Вместо:
b=(X'*V^(-1)*X)^(-1)*X'*V^(-1)*Y
Использовать
b= (X'/V *X)\X'/V*Y
То есть заменить все экземпляры X*(Y^-1)
на X/Y
.Matlab пропустит вычисление обратного (сложного и подверженного ошибкам) и непосредственно вычислит деление.
Редактировать: Даже при наилучшем манипулировании матрицей некоторые операции невозможны (например, приводят к ошибкам)как вы описываете).
Пример того, что может иметь отношение к вашей проблеме, - если попытаться решить проблему наименьших квадратов при ограничении, то множественные измерения идеально, на 100% коррелированы.За исключением редких, вырожденных случаев, это не может быть достигнуто ни в математике, ни физически.Вам нужна некоторая независимость в измерениях, чтобы учесть шум измерений или ошибки моделирования.Например, если у вас есть два измерения, каждое с дисперсией 1 и идеально коррелированные, тогда ваша матрица V
будет выглядеть так:
V = [1 1; ...
1 1];
И вы никогда не сможете соответствоватьданные.(Как правило, это означает, что вам необходимо переформулировать свои базовые функции, но это более длинное эссе.)
Однако, если вы отрегулируете дисперсию измерений, чтобы обеспечить некоторую небольшую степень независимости между измерениями, то это будет работать безпроблема.Например, 95% коррелированные измерения будут выглядеть так:
V = [1 0.95; ...
0.95 1 ];