Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

mldivide, \

x에 대한 선형 연립방정식 Ax = B의 해 구하기

설명

예제

x = A\B는 선형 연립방정식 A*x = B의 해를 구합니다. 행렬 AB의 행 개수는 동일해야 합니다. A가 준특이 행렬(badly scaled)이거나 유사 특이 행렬(Nearly Singular)이면 MATLAB®에서 경고 메시지가 표시되지만, 계산은 이에 관계없이 수행됩니다.

  • A가 스칼라인 경우 A\BA.\B와 동일합니다.

  • A가 정사각 n×n 행렬이고 Bn개 행을 갖는 행렬이면, x = A\B는 방정식 A*x = B의 해가 존재하는 경우 그 해가 됩니다.

  • Am ~= n인 직사각 m×n 행렬이고 Bm개 행을 갖는 행렬이면, A\B는 연립방정식 A*x= B에 대한 최소제곱해(Least-squares Solution)를 반환합니다.

x = mldivide(A,B)x = A\B를 실행하는 또 다른 방법이지만 거의 사용되지 않습니다. 이 표현식은 클래스에 대한 연산자 오버로드를 지원합니다.

예제

모두 축소

간단한 선형 연립방정식 A*x = B를 풉니다.

A = magic(3);
B = [15; 15; 15];
x = A\B
x = 3×1

    1.0000
    1.0000
    1.0000

특이 행렬 A가 있는 선형 연립방정식 A*x = b를 풉니다.

A = magic(4);
b = [34; 34; 34; 34];
x = A\b
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  1.306145e-17.
x = 4×1

    1.5000
    2.5000
   -0.5000
    0.5000

rcond0eps 사이이면 MATLAB®에서 유사 특이 행렬(Nearly Singular) 경고가 발생하지만, 계산은 계속 진행됩니다. 조건이 나쁜 행렬을 사용하는 경우에는 잔차 (b-A*x)가 상대적으로 작더라도 신뢰할 수 없는 해가 반환될 수 있습니다. 이 특정 예에서는 잔차의 노름이 0이므로, rcond가 작더라도 엄밀해를 구할 수 있습니다.

rcond0이면 특이 행렬 경고가 나타납니다.

A = [1 0; 0 0];
b = [1; 1];
x = A\b
Warning: Matrix is singular to working precision.
x = 2×1

     1
   Inf

이 경우, 0으로 나누기를 수행하면 Inf 및/또는 NaN을 사용한 계산이 수행되므로 계산 결과를 신뢰할 수 없게 됩니다.

선형 연립방정식 A*x = b를 풉니다.

A = [1 2 0; 0 4 3];
b = [8; 18];
x = A\b
x = 3×1

         0
    4.0000
    0.6667

희소 행렬을 사용하여 간단한 선형 연립방정식을 풉니다.

행렬 방정식 A*x = B가 있다고 가정해 보겠습니다.

A = sparse([0 2 0 1 0; 4 -1 -1 0 0; 0 0 0 3 -6; -2 0 0 0 2; 0 0 4 2 0]);
B = sparse([8; -1; -18; 8; 20]);
x = A\B
x = 
   (1,1)       1.0000
   (2,1)       2.0000
   (3,1)       3.0000
   (4,1)       4.0000
   (5,1)       5.0000

입력 인수

모두 축소

피연산자로, 벡터, 비희소 행렬 또는 희소 행렬로 지정됩니다. AB는 행 개수가 같아야 합니다.

  • A 또는 B가 정수 데이터형인 경우 다른 하나의 입력값은 스칼라여야 합니다. 정수 데이터형을 가진 피연산자는 복소수일 수 없습니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
복소수 지원 여부:

출력 인수

모두 축소

벡터, 비희소 행렬, 희소 행렬 중 하나가 해로 반환됩니다. Am×n 행렬이고 Bm×p 행렬인 경우 xn×p 행렬이 됩니다(p==1인 경우 포함).

A가 비희소 저장 형식을 갖는 경우 x도 비희소 저장 형식을 갖습니다. A가 희소 행렬인 경우 xB와 동일한 저장 형식을 갖습니다.

  • 연산자 /\는 등식 B/A = (A'\B')'의 관계에 있습니다.

  • A가 정사각 행렬인 경우 A\B는 대략적으로 inv(A)*B와 같지만 MATLAB에서는 A\B를 이와 다르게 더욱 견고한 방식으로 처리합니다.

  • A의 랭크가 A의 열 개수보다 작은 경우, x = A\B가 반드시 최소 노름 해가 되지는 않습니다. x = lsqminnorm(A,B) 또는 x = pinv(A)*B를 사용하여 최소 노름 최소제곱해를 계산할 수 있습니다.

  • 각기 다른 우변을 갖는 선형 시스템을 효율적으로 여러 번 풀려면 decomposition을 사용하십시오. decomposition 객체를 사용하면 계수 행렬 분해를 여러 번 수행할 필요가 없으므로, 반복적으로 해를 구해야 하는 문제를 풀 때 적합합니다.

알고리즘

모두 축소

선형 시스템을 풀 때 mldivide를 다양하게 활용할 수 있는 것은 적절한 솔버에 디스패치하여 문제의 대칭성을 활용할 수 있는 기능 덕분입니다. 이 접근 방식은 계산 시간을 최소화하는 것이 목적입니다. 이 함수는 가장 먼저 비희소(Full)("조밀"이라고도 함) 형식 입력 배열과 희소 형식 입력 배열을 구분합니다.

비희소 형식 입력값에 대한 알고리즘

아래에 나와 있는 플로우 차트에서는 입력값 AB비희소 형식인 경우의 알고리즘 경로를 보여줍니다.

The properties of full input matrices determine which algorithm mldivide uses to solve the linear system

희소 형식 입력값에 대한 알고리즘

A가 비희소 행렬이고 B가 희소 행렬인 경우, mldivideB를 비희소 행렬로 변환하고 비희소 형식 알고리즘 경로(위에 나와 있음)를 사용하여 비희소 저장 형식으로 해를 계산합니다. A가 희소 행렬인 경우, 해 x의 저장 형식은 B의 저장 형식과 같으며, mldivide는 아래 나와 있는 것처럼 희소 형식 입력값에 대한 알고리즘 경로를 따릅니다.

The properties of sparse input matrices determine which algorithm mldivide uses to solve the linear system

참고 문헌

[1] Gilbert, John R., and Tim Peierls. “Sparse Partial Pivoting in Time Proportional to Arithmetic Operations.” SIAM Journal on Scientific and Statistical Computing 9, no. 5 (September 1988): 862–874. https://doi.org/10.1137/0909058.

[2] Anderson, E., ed. LAPACK Users’ Guide. 3rd ed. Software, Environments, Tools. Philadelphia: Society for Industrial and Applied Mathematics, 1999. https://doi.org/10.1137/1.9780898719604.

[3] Davis, Timothy A. "Algorithm 832: UMFPACK V4.3 – an unsymmetric-pattern multifrontal method." ACM Transactions on Mathematical Software 30, no. 2 (June 2004): 196–199. https://doi.org/10.1145/992200.992206.

[4] Duff, Iain S. “MA57---a Code for the Solution of Sparse Symmetric Definite and Indefinite Systems.” ACM Transactions on Mathematical Software 30, no. 2 (June 2004): 118–144. https://doi.org/10.1145/992200.992202.

[5] Davis, Timothy A., John R. Gilbert, Stefan I. Larimore, and Esmond G. Ng. “Algorithm 836: COLAMD, a Column Approximate Minimum Degree Ordering Algorithm.” ACM Transactions on Mathematical Software 30, no. 3 (September 2004): 377–380. https://doi.org/10.1145/1024074.1024080.

[6] Amestoy, Patrick R., Timothy A. Davis, and Iain S. Duff. “Algorithm 837: AMD, an Approximate Minimum Degree Ordering Algorithm.” ACM Transactions on Mathematical Software 30, no. 3 (September 2004): 381–388. https://doi.org/10.1145/1024074.1024081.

[7] Chen, Yanqing, Timothy A. Davis, William W. Hager, and Sivasankaran Rajamanickam. “Algorithm 887: CHOLMOD, Supernodal Sparse Cholesky Factorization and Update/Downdate.” ACM Transactions on Mathematical Software 35, no. 3 (October 2008): 1–14. https://doi.org/10.1145/1391989.1391995.

[8] Davis, Timothy A. “Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing Sparse QR Factorization.” ACM Transactions on Mathematical Software 38, no. 1 (November 2011): 1–22. https://doi.org/10.1145/2049662.2049670.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장