用matlab求解方程组

时间:2012-11-20 23:40:46

标签: matlab system equations

所以我有以下方程组

 x1 - x2 =  20
 x2 - x3 =  30
 x3 - x4 =  75
 x4 - x5 = -49
-x1 + x5 = -20

如何使用Matlab解决系统问题?我有点卡住了。

很有可能没有解决方案,但如果有人能让我知道如何做到这一点会很棒!

2 个答案:

答案 0 :(得分:9)

首先,将此等式转换为矩阵表示法:

A = [ 1 -1  0  0  0
      0  1 -1  0  0
      0  0  1 -1  0
      0  0  0  1 -1
     -1  0  0  0  1];

b = [ 20
      30
      75
     -49
     -20];

您正试图找到x给予Ax = b。你不能采用A的倒数,因为它是单数。要看这个检查它的等级; rank(A) == 4。如果A是非单数的,那就是5。

因此,当您从左侧乘以x时,您应该找到最接近b A的{​​{1}}。这是一个优化问题:您希望最小化Axb之间的错误。通常,人们使用最小二乘法。也就是说,您最小化残差的平方和。这可以通过pseudo inverse完成,如下所示:

x = pinv(A) * b

给出

x =

   31.8000
   23.0000
    4.2000
  -59.6000
    0.6000

找到最佳近似值
b2 = A*x


b2 =

    8.8000
   18.8000
   63.8000
  -60.2000
  -31.2000

发现最小二乘误差为

e = norm(b-b2)

e =

   25.0440

如果您想尝试替代最小二乘法的其他方法来最小化Ax-b,您可以使用谷歌l1最小化,稀疏编码等。

答案 1 :(得分:0)

看看它并精神上加上方程式。 LHS为零,右侧是正面的,所以没有解决方案!