使用Matlab求解方程组

3

我有以下方程组:

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

我该如何使用Matlab解决这个系统问题?我遇到了一些困难。
虽然很可能不存在解决方案,但如果有人能告诉我该怎么做,那就太好了!

1
这里有一个提示:http://stackoverflow.com/questions/1728636/matlab-solving-equations-problem - bla
2个回答

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];

你正在尝试找到使得 Ax = b 成立的 x。但是你不能取反 A,因为它是奇异的。要确定这一点,你需要检查它的秩;rank(A) == 4。如果 A 是非奇异的,则秩将为5。

因此,你应该寻找最佳的 x,从左边乘以 A 来逼近 b。这是一个优化问题:你想要将 Axb 之间的误差最小化。通常人们使用最小二乘法。也就是说,你最小化残差平方和。这可以通过 伪逆矩阵 来实现:

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最小化、稀疏编码等。


告诉人们通过使用det测试奇异性是一个非常糟糕的想法。更好的方法是建议使用rank或cond。https://dev59.com/imcs5IYBdhLWcg3wGQDF#13146750 - user85109
2
现在有一个我可以同意的答案。+1 - user85109

0

只需看一眼并在脑海中相加方程。 左边是零,右边是某个正数,因此没有解!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接