我按照维基百科的公式:http://en.wikipedia.org/wiki/Pseudo_inverse,计算伪逆矩阵但是我没有得到正确的结果。例如:
我想要找出方程
Y=R*theta
中的theta
,我在matlab上写了以下代码:R = -[1/sqrt(2) 1 1/sqrt(2) 0;0 1/sqrt(2) 1 1/sqrt(2);-1/sqrt(2) 0 1/sqrt(2) 1];
% R is 3x4 matrix
Y = [0; -1/sqrt(2);-1]; %Y is 3x1 matrix
B1 = pinv(R);
theta1 = B1*Y;
result1 = R*theta1 - Y
B2 = R'*inv(R*R');
theta2 = B2*Y;
result2 = R*theta2 - Y
这是结果:
result1 =
1.0e-15 *
-0.1110
-0.2220
-0.2220
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.904842e-17.
> In pseudoinverse at 14
result2 =
0.1036
-0.1768
-0.3536
显然,theta2是错误的答案,但我不知道为什么。我读了很多书,它们给我提供了与维基百科相同的公式。 有人能帮我手动计算伪逆吗?谢谢!
theta1
是错误的答案",就像你写的那样。 - horchlertheta2
。theta1
正确,因为result1
约等于0,而theta2
错误,因为result2
不等于0。 - kerry_13theta2
。你没有叫做theta2
的变量。你在脚本中所称的theta2
实际上被命名为theta1
。我只是想为其他人澄清你的问题。我无法编辑你的问题来更改一个字符 - 你需要自己去做。 - horchler