用自由变量MATLAB求解线性方程组

时间:2017-09-12 08:30:22

标签: matlab scientific-computing

这是一个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 ;

3 个答案:

答案 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矩阵,bn维向量。您希望在A x = b的情况下了解m<n的所有解决方案,并表示如下:

x = x_0 + K y,..(1)

其中x_0是原始等式的任意解,A x = bKn - 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 = 0i=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

其中VU分别为n - by - nm - 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中进行奇异值分解,但必须有一个函数。