2009-09-14 4 views
14

나는 (http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/ 다큐먼트에서이 블로그 게시물에서) 몇 군데에서 읽습니다. Matlab의 호출이 왜 느리고 부정확합니까? 이 느리고 부정확하기 때문에 매트랩 INV의 사용은 권장하지 않음 것을 :

나는이 부정확의 원인을 찾기 위해 노력하고있다. 현재 Google은 재미있는 결과를주지 않았으므로 여기있는 사람이 나를 안내 할 수 있다고 생각했습니다.

감사합니다.

답변

30

내가 언급 한 부정확성 메소드 INV이 아니라 그것의 MATLAB의 구현입니다. QR, LU 또는 다른 방}의 시스템을 해결하는 방}은 대개이 시스템의 조건 x 호를 제곱 할 필요가 없기 때.입니다. 일반적으로 inv를 사용하면 원래 시스템의 조건 번호를 제곱하여 정확성을 잃는 연산이 필요합니다. 당신이 해결하기 위해 여러 오른쪽 벡터를하지 않는 한

--Loren

19

Loren의 블로그의 요점은 MATLAB의 inv 함수가 매트릭스 역행렬을 계산하는 다른 수치 구현보다 특히 느리거나 부정확하다는 것입니다. 오히려, 즉 대부분의 경우에, 역 자체가 불필요하고 (예 \를 이용한 선형 방식으로 해결하는 것이 아니라, 역 컴퓨팅 - - 슬래시 연산자)을 다른 방법으로 진행할 수있다.

+1

또한 백 슬래시 연산자 (일반적으로)는 inv (A) * b보다 더 정확한 결과를 제공합니다. A * x = b를 해결하는 데 적합한 알고리즘을 선택합니다. – Martijn

+0

당신이 쓰고 싶은, 거기에 학생에 대한 명시하기 위해'X = A \ b' 대신 선형 시스템의 도끼 = B를 해결하기 위해'X = INV (A) * b'의. A의 역행렬을 계산하는 것은 반드시 필요한 것은 아니며 강건하지 않고 빠르지도 않습니다. A^-1을 볼 수있는 많은 수학 공식에서 알고리즘은 A의 역함수를 계산하지 않고도 구현할 수 있습니다. 이렇게 작고 완전한 랭크 행렬의 경우 컴퓨팅 inv (A)는 항상 완벽하게 괜찮아. 큰 행렬이나 나쁜 조건 행렬의 경우 문제가 발생할 수 있습니다. –

0

inv() 확실히 \보다 느립니다. 그러나 MathWorks의 부정확성에 대한 조언은 수치 선형 대수 결과에서 지나치게 보수적 인 경계 때문입니다. 즉, inv()은 정확하지 않습니다. 링크는 더 부연 : http://arxiv.org/abs/1201.6035

몇몇 널리 사용 교과서 계산 역 INV (A)에서 벡터 B를 승산하여 방정식들의 선형 시스템 도끼 = B를 해결하는 것은 잘못되었다고 생각 독자 리드. 숫자 분석과 수치 선형 대수학에 관한 다른 모든 교과서는 이것이 정확한지 여부를 밝히지 않고 계산 된 역 정보를 사용하지 말라고 조언합니다. 실제로, 역함수가 계산되는 방법에 대한 합리적인 가정하에 x = inv (A) * b는 최상의 후방 안정 (back - stable) 솔버가 계산 한 솔루션만큼 정확합니다.