所以我有以下方程组
x1 - x2 = 20
x2 - x3 = 30
x3 - x4 = 75
x4 - x5 = -49
-x1 + x5 = -20
如何使用Matlab解决系统问题?我有点卡住了。
很有可能没有解决方案,但如果有人能让我知道如何做到这一点会很棒!
答案 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}}。这是一个优化问题:您希望最小化Ax
和b
之间的错误。通常,人们使用最小二乘法。也就是说,您最小化残差的平方和。这可以通过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为零,右侧是正面的,所以没有解决方案!