행렬의 역행렬 계산이 필요한 최적화 알고리즘을 실행 중입니다. 알고리즘의 목표는 행렬 A에서 음의 값을 제거하고 새로운 행렬 B를 얻는 것입니다. 기본적으로 동일한 크기의 알려진 정사각형 행렬 B와 C로 시작합니다.Matlab에서 역행렬 계산
A = B^-1 * C
또는 매트랩
:A = B\C;
난 같다 행렬 A를 계산함으로써 시작할
Matlab에서 B\C
이보다 정확하다고 말했기 때문에 이것을 사용합니다..
A의 음수
은 2 개로 분할되고, 그 행은 새로운 사용 a (1)의 길이는, I와 함께 새로운 B를 계산 가지고있어되도록는 규격화되어 (1/N) * A * C '= B^-1
여기서 N은 스케일링 계수 (A의 열 수)입니다. 이 새로운 B는 첫 번째 단계에서 다시 사용되며 A에서 네거티브가 사라질 때까지 이러한 반복이 계속됩니다.
내 문제는 두 번째 방정식에서 B를 계산 한 다음 정규화해야한다는 것입니다.
invB = (1/N)*A*C'; B = inv(invB);
나는 inv(B^-1)
를 사용하여 B를 계산하고했지만 몇 번 반복 후에 나는 B^-1
이라고 메시지를 받기 시작 "단수 또는 심하게 확장 부근에 있습니다."
이 알고리즘은 실제로 더 작은 행렬 (약 70x70)에서 작동하지만 약 500x500에 도달하면 이러한 메시지를 받기 시작합니다.
inv(B^-1)
을 계산하는 더 좋은 방법이 있습니까?
가 도움이됩니까? – Darhuuk
'B = eye (N) \ invB'를 사용할 때 나는 더 이상 그 방정식에 대한 에러를 얻지 않지만'A = B \ C'가 계산 될 때마다 에러를 내게됩니다 ... – user1259832