gpt4 book ai didi

matlab - 手工计算伪逆

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:38 25 4
gpt4 key购买 nike

我遵循维基上的公式:

http://en.wikipedia.org/wiki/Pseudo_inverse

计算伪逆,但我无法收到正确的结果。例如:我想找到方程的 theta:Y=R*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 是错误的答案,但我不知道如何以及为什么。我读了很多书,他们给了我与 wiki 相同的公式。谁能帮我手工做伪逆?谢谢!

最佳答案

代数告诉您可以使用伪逆来求解此类方程,但代数并未考虑有限精度计算。

事实上,使用矩阵乘法方法计算伪逆是不合适的,因为它在数值上不稳定。使用 \ 运算符进行矩阵除法,如

theta = R \ Y;

在代数上,矩阵除法与伪逆相乘相同。但是 MATLAB 的实现要稳定得多。

有关更多信息,包括稳定的方法,请参阅

关于matlab - 手工计算伪逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com