附带了测试用的matlab代码。
A = [0.8 0.25 0.18 0.1;
0.1 0.7 0.12 0.4;
0.1 0.05 0.7 0.2];
beta = [0.68 0.40 0.80 0.5;
0.15 0.34 0.35 0.4;
0.45 0.70 0.30 0.5;
1 1 1 1];
y = A*beta;
% For convenience, I use the same y as input.
%---------------------Method One-------------------
AThreeInverse = inv(A(:,1:3));
tmp = -A(:,4);
AInverse1 = [AThreeInverse,tmp];
yTmp = [y; 1 1 1 1];
final1 = AInverse1*yTmp;
errors = final1 - beta(1:3,:);
disp(errors);
%-------------------Method Two---------------------
% This method seems bullshit.
AInverse2 = pinv(A);
final2 = AInverse2*y;
errors = final2(1:3,:) - beta(1:3,:);
disp(errors);
这个问题的简化版本就是,已知A和y2,求beta2. 其中beta2也是4x4的方阵,且最后一行为1.
如果A的主对角线的比重较小,那么第一种方法的误差会很大。如何得到精确或者误差较小的值?有没有通用的较好的方法?