Я использую алгоритм оптимизации, который требует вычисления обратной матрицы. Цель алгоритма - исключить отрицательные значения из матрицы A и получить новую матрицу B. По сути, я начинаю с известных квадратных матриц B и C одинакового размера.
Я начинаю с вычисления матрицы A, которая равна:
A = B ^ -1 * C
Или в Matlab:
A = B\C;
Я использую это, потому что Матлаб сказал мне, что 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)
?