[英]How to solve linear equation using Matlab?
A= [1 2 3;3 4 5;5 6 7]
, B=[1;1;1]
。我需要求解方程AX = B。 这里使用的是Matlab代码,例如X=linsolve(A,B)
。 但是,使用此警告发生了...
“警告:矩阵接近奇异或缩放错误。结果可能不准确。RCOND= 1.541976e-18。”
如何纠正?
您无法做您想做的事情:“在不更改数据的情况下将奇异矩阵转换为非奇异矩阵”,但是您可以使用伪逆数 pinv
找到系统Ax = B
的一种解决方案。
答案与使用mldivide
时获得的答案相同。 使用mldivide
(或\\
)得到的警告只是警告,而不是错误。 检查此链接 ,了解如果需要使用奇异矩阵并厌倦了警告,如何消除警告。
x = pinv(A)*B;
x =
-5.0000e-01
1.2490e-16
5.0000e-01
这使:
A*x
ans =
1.00000
1.00000
1.00000
但是请记住,这样的系统没有唯一的解决方案,因此伪逆运算符和反斜杠运算符都可能(在这种情况下)将返回非常不同的解决方案,其中的任何一个是否可以接受实际上取决于您的应用程序。
三个向量[1,2,3],[3,4,5],[5,6,7]
位于单个平面中。 我怎么知道? 因为我可以看到[3,4,5]-[1,2,3]=[2,2,2]
和[3,4,5]+[2,2,2]=[5,6,7]
。
因此,当问题是“这三个向量的线性组合如何使我到达这一点”时,如果该点在平面中,则存在无数这样的解决方案,如果不在平面中,则没有解决方案。 仅通过检查就可以看到
[1,1,1] = ( [3,4,5]-[1,2,3] ) / 2
表示解决方案是[-0.5 0.5 0]
要么
[1,1,1] = ( [5,6,7] - [3,4,5] ) / 2
表示解决方案是[0 -0.5 0.5]
等等。
您不可能会遇到一些并非不是问题的问题-在这种情况下,它是病态的,因此有无数种解决方案。 Matlab在这种情况下会处理它,但会警告您。 铅笔和纸会使您得出相同的结论。 没有唯一的答案。
假设您知道THE解决方案可能不存在,则只需索要第二个输出参数即可。 这将告诉Matlat您已经意识到了问题,只是想获得最好的解决方案。
这是完成的过程:
[X, R] = linsolve(A,B)
当然在文档中提到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.