繁体   English   中英

如何使用Matlab求解线性方程式?

[英]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

Egons回答 类似的问题

但是请记住,这样的系统没有唯一的解决方案,因此伪逆运算符和反斜杠运算符都可能(在这种情况下)将返回非常不同的解决方案,其中的任何一个是否可以接受实际上取决于您的应用程序。

三个向量[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM