如何使用 Matlab 求解线性方程



A= [1 2 3;3 4 5;5 6 7]B=[1;1;1] .我需要求解方程 AX=B。这里使用的是像X=linsolve(A,B)这样的 Matlab 代码。但是,使用它会发生警告...

"警告:矩阵接近单数或缩放不良。结果可能不准确。RCOND = 1.541976e-18."

如何纠正?

你不能做你想做的事:"在不改变数据的情况下将奇异矩阵转换为非奇异矩阵",但你可以通过使用伪逆找到一个系统解决方案,Ax = Bpinv

答案与您在使用时得到的相同 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)

当然在文档中提到过。

相关内容

  • 没有找到相关文章

最新更新