Я запускаю алгоритм оптимизации, который требует вычисления обратной матрицы. Цель алгоритма — исключить отрицательные значения из матрицы A и получить новую матрицу B. По сути, я начинаю с известных квадратных матриц B и C одинакового размера.
Я начинаю с вычисления матрицы A, которая равна:
A = B^-1 * C
Или в Матлабе:
A = B\C;
Я использую это, потому что Matlab сказал мне, что B\C
точнее, чем inv(B)*C
.
Отрицательные значения в A затем делятся на два, а затем A нормализуется, чтобы его строки имели длину 1. Используя этот новый A, я вычисляю новый B с помощью:
(1/N) * A * C' = B^-1
где N — это просто коэффициент масштабирования (количество столбцов в A). Затем этот новый B будет снова использоваться на первом этапе, и эти итерации будут продолжаться до тех пор, пока отрицательные значения в A не исчезнут.
Моя проблема в том, что я должен вычислить B из второго уравнения, а затем нормализовать его.
invB = (1/N)*A*C'; B = inv(invB);
Я вычислял B, используя inv(B^-1)
, но после нескольких итераций я начал получать сообщения о том, что B^-1
"близок к единичному или плохо масштабируется".
Этот алгоритм на самом деле работает для меньших матриц (около 70x70), но когда он достигает размера 500x500, я начинаю получать эти сообщения.
Есть ли лучшие способы вычисления inv(B^-1)
?
B = eye(N) \ invB
? - person AVH   schedule 09.03.2012B = eye(N) \ invB
, я больше не получаю эту ошибку для этого уравнения, но она дает мне ошибку каждый раз, когда вычисляетсяA = B\C
... - person user1259832   schedule 09.03.2012