这是一个3*5
矩阵,有2个自由变量。我不知道这是否是在MATLAB中解决这个问题的最佳方法。但它不起作用并输出Empty sym: 0-by-1
clear x_1 x_2 x_3 x_4 x_5
syms x_1 x_2 x_3 x_4 x_5
eqn1 = x_1+0*x_2+3*x_3+2*x_4-4*x_5==4 ;
eqn2 = 2*x_1+x_2+6*x_3+5*x_4+0*x_5==7 ;
eqn3 = -x_1+x_2-3*x_3-x_4+x_5==-5 ;
tic ;
res = solve([eqn1,eqn2,eqn3]) ;
toc ;
答案 0 :(得分:0)
对于简单的线性方程组,您不需要符号数学工具箱。您最好使用mldivide
,这很常见,因为它有速记\
。
对于系统Ax = b
,其中x
是x值的向量,A
是系数矩阵,b
是他们的产品(右侧)你的系统),你可以通过
x = A\b;
所以
A = [1 0 3 2 -4;
2 1 6 5 0;
-1 1 -3 -1 1];
b = [4; 7; -5];
x = A\b
>> ans = [0; 0; 2; -1; 0];
您可以手动检查此结果(x3=2, x4=-1, x1=x2=x5=0
)是否有效。
答案 1 :(得分:0)
使用QR或LU分解
>> [l,u] = lu(A)
l =
0.5 -0.33333 1
1 0 0
-0.5 1 0
u =
2 1 6 5 0
0 1.5 0 1.5 1
0 0 0 0 -3.6667
>> c = l\b
c =
7
-1.5
0
然后切换到Uy = L\b = c
问题。现在你有,
[2 1 6 5 0][x1] [ 7 ]
[0 1.5 0 1.5 1][x2] = [-1.5]
[0 0 0 0 -3.6667][x3] [ 0 ]
[x4]
[x5]
最后一个删除x5
,因此删除第3行/第5列。然后,您可以检查解空间。
答案 2 :(得分:0)
假设A
是m-by-n矩阵,b
是n
维向量。您希望在A x = b
的情况下了解m<n
的所有解决方案,并表示如下:
x = x_0 + K y
,..(1)
其中x_0
是原始等式的任意解,A x = b
,K
是n
- by - (n-m)
矩阵,其列构成基础A
的零空间(也称为内核),y
是任意(n-m)
维向量。此y
对应于您所说的“自由参数”。
让我更多地解释矩阵K
。矩阵A
的零空间是一组向量v
,使A v = 0
。这组v
实际上是(n-m)
维度的向量空间,任何v
都可以表示为(n-m)
向量的线性组合k_1
, ..,k_{n-m}
,它们彼此线性相关并且满足A k_i = 0
(i=1,..,n-m
)。 k_1,..,k_{n-m}
的选择并不是唯一的。
您可以替换eq。 (1)到A x =b
验证它确实是解决方案,因为A K = 0
。术语K y
表示所有向量v
,使A v=0
。
找到矩阵K
的一种方法是奇异值分解,
A V = U S
,
其中V
和U
分别为n
- by - n
和m
- by - m
正交矩阵,{ {1}}是一个S
- by - m
对角矩阵,如
n
由于S = [s_1 0 0 0 0 ]
[ 0 s_2 0 0 0 ]
[ 0 0 s_3 0 0 ]
的最后(n-m)
列是零向量,因此产品S
的最后(n-m)
列也是零向量。这意味着,如果我们从左侧乘以U S
,则(n-m)
的最后V
列将产生零向量。因此,A
的这些列属于V
的空格。由于它们是线性无关的(因为A
是正交矩阵),它们构成零空间的基础。因此,我们可以将V
设置为奇异值分解中找到的K
的最后(n-m)
列。
我不知道如何在Matlab中进行奇异值分解,但必须有一个函数。