我有以下方程组:
x1 - x2 = 20
x2 - x3 = 30
x3 - x4 = 75
x4 - x5 = -49
-x1 + x5 = -20
我该如何使用Matlab解决这个系统问题?我遇到了一些困难。
虽然很可能不存在解决方案,但如果有人能告诉我该怎么做,那就太好了!
首先,将这个方程转换为矩阵表示:
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
。这是一个优化问题:你想要将 Ax
与 b
之间的误差最小化。通常人们使用最小二乘法。也就是说,你最小化残差平方和。这可以通过 伪逆矩阵 来实现:
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最小化、稀疏编码等。
只需看一眼并在脑海中相加方程。 左边是零,右边是某个正数,因此没有解!