如何用Matlab求解线性方程?

时间:2014-01-05 17:24:25

标签: matlab linear-algebra

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"

如何纠正?

3 个答案:

答案 0 :(得分:1)

你无法做你想做的事情:“将奇异矩阵转换为非奇异矩阵而不改变数据”,但你可以使用pseudoinverse {{1}找到一个系统Ax = B的解决方案}}

答案与使用pinv时的答案相同。使用mldivide(或mldivide)发出的警告只是警告,而不是错误。检查this link,看看如果您需要使用单一矩阵并厌倦警告,如何抑制警告。

\

给出了:

x = pinv(A)*B;
x =
  -5.0000e-01
   1.2490e-16
   5.0000e-01

Egons answersimilar question

  

但请记住,这样的系统没有独特的解决方案,所以   伪逆和反斜杠运算符都可以(并且在此   case将会返回非常不同的解决方案,无论是否有任何解决方案   可接受的取决于你的申请。

答案 1 :(得分:1)

三个向量[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处理它,但警告你。铅笔和纸将引导您得出相同的结论。没有独特的答案。

答案 2 :(得分:1)

假设您知道解决方案可能不存在,您可以简单地询问第二个输出参数。这将告诉Matlat你已经意识到这个问题并且只想获得最好的解决方案。

以下是如何完成的:

[X, R] = linsolve(A,B)

当然在doc中提及。