주요 콘텐츠

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는 최소 노름 해가 아닐 수 있습니다.

예제

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 = 5×1 sparse double column vector (5 nonzeros)
   (1,1)       1.0000
   (2,1)       2.0000
   (3,1)       3.0000
   (4,1)       4.0000
   (5,1)       5.0000

입력 인수

모두 축소

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

A가 스칼라이면 요소별 나눗셈이 수행됩니다. 요소별 나눗셈에는 정수 데이터형만 지원됩니다. 자세한 내용은 ldivide 항목을 참조하십시오.

데이터형: 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)("조밀"이라고도 함) 형식 입력 배열과 희소 형식 입력 배열을 구분합니다.

참고 문헌

[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 이전에 개발됨

모두 확장