3

问题:

    >> syms('a', 'b', 'c');

    >>A =

    [ -2, 3,  1, a]
    [  1, 1, -1, b]
    [  0, 5, -1, c]

    >>rref(A)

    ans =

    [ 1, 0, -4/5, 0]
    [ 0, 1, -1/5, 0]
    [ 0, 0,    0, 1]

我遇到的问题是我需要用 ab 和 c 来回答,所以我需要类似的东西:

    ans =
    [1, 0, 0, a+2b-c]
    [0, 1, 0, 3a-c]
    [0, 0, 1, a+b+c]

有什么方法可以让 Matlab 做到这一点?

4

3 回答 3

3

您只需要将问题转换为相关的形式以便rref正确使用,即,而不是:

[1, 0, 0, a+2b-c]
[0, 1, 0, 3a-c]
[0, 0, 1, a+b+c]

其中 x,y,z 形成单位矩阵块,写:

 syms x y z
 D =
[ 1, 2, -1, x]
[ 3, 0, -1, y]
[ 1, 1,  1, z]

rref(D)
ans =
[ 1, 0, 0,     (3*y)/10 - x/10 + z/5]
[ 0, 1, 0,       (2*x)/5 - y/5 + z/5]
[ 0, 0, 1, (3*z)/5 - y/10 - (3*x)/10]
于 2013-01-22T01:35:40.597 回答
1

您想要为您提供 rref(A) 的消除矩阵。

但是什么是 rref(A)?

UpperTri=rref(A)=[LastStep]...[Step3][Step2][Step1]*A。

这是一系列步骤,可将 A 简化为上三角形或可能的最佳三角形。

Matlab有,

[ 1, 0, -4/5, (3*b)/5 - a/5]
[ 0, 1, -1/5, a/5 + (2*b)/5]
[ 0, 0,    0,             1]

然后Matlab只是把它卷起来,你不再有步骤了。所以它显示为:

    [ 1, 0, -4/5, 0]
    [ 0, 1, -1/5, 0]
    [ 0, 0,    0, 1]

如果你想要一系列步骤,你想要带有一系列步骤的消除矩阵,所以使用单位矩阵记录它。代替:

A = 
[ -2, 3,  1, a]
[  1, 1, -1, b]
[  0, 5, -1, c]

利用

>>  A = [ -2, 3,  1, 1 0 0; 1, 1, -1, 0 1 0;  0, 5, -1, 0 0 1]

A =

    -2     3     1     1     0     0
     1     1    -1     0     1     0
     0     5    -1     0     0     1

>> E=rref(A)

E =

    1.0000         0   -0.8000         0    1.0000   -0.2000
         0    1.0000   -0.2000         0         0    0.2000
         0         0         0    1.0000    2.0000   -1.0000

这就像 [A][I],现在 [rref Steps matrix]*[A][I]=[rref(A)][rref Steps matrix]

现在 E=[rref(A)][rref Steps matrix] =

 E =

        1.0000         0   -0.8000         0    1.0000   -0.2000
             0    1.0000   -0.2000         0         0    0.2000
             0         0         0    1.0000    2.0000   -1.0000

通过检查 E1=[rref Steps matrix]=

E1 =

         0    1.0000   -0.2000
         0         0    0.2000
    1.0000    2.0000   -1.0000

所以现在:

E1 =

         0    1.0000   -0.2000
         0         0    0.2000
    1.0000    2.0000   -1.0000

>> B=[a;b;c;]

B =

 a
 b
 c

>> B1=E1*B

B1 =

     b - c/5
         c/5
 a + 2*b - c

去检查:

A1 = [ -2, 3,  1, a; 1, 1, -1, b;  0, 5, -1, c]

A1 =

[ -2, 3,  1, a]
[  1, 1, -1, b]
[  0, 5, -1, c]

>> A2=E1*A1

A2 =

[ 1, 0, -4/5,     b - c/5]
[ 0, 1, -1/5,         c/5]
[ 0, 0,    0, a + 2*b - c]

注意 a + 2b - c =0,因此 c=a+2b,因此 sub c,(c/5)= ((a+2b)/5),并且 (bc/5)=(5b-(a+2b) ))/5

所以

[(-a+3*b)/5; (a+2*b)/5; a + 2*b - c ]
于 2014-11-24T03:54:28.463 回答
1

Matlab 实际上为您的示例给出了正确答案,这似乎令人惊讶,因为它不依赖于a,bc; 如果您使用另一个示例,例如

B = [1, 2, a; 2, 1, b];
rref(B)

a那么答案将取决于b预期。


这里我只是解释一下为什么你的缩减排梯队形式A确实是

[ 1, 0, -4/5, 0]
[ 0, 1, -1/5, 0]
[ 0, 0,    0, 1]

通过展示行缩减的一些重要步骤。Matlab 以 开头A,并将其简化为

[ 1, 0, -4/5, (3*b)/5 - a/5]
[ 0, 1, -1/5, a/5 + (2*b)/5]
[ 0, 0,    0,   a + 2*b - c]

然后它将最后一行除以 (a + 2*b - c) 得到

[ 1, 0, -4/5, (3*b)/5 - a/5]
[ 0, 1, -1/5, a/5 + (2*b)/5]
[ 0, 0,    0,             1]

然后它继续从它上面的行中减去该行以给出

[ 1, 0, -4/5, 0]
[ 0, 1, -1/5, 0]
[ 0, 0,    0, 1]

Matlab 假设a + 2*b - c不等于 0(尝试用 替换ca + 2*b然后rref(A)会给你不同的答案)。我知道没有办法强制 Matlab 不除以a + 2*b - c,即让 Matlab 假设a + 2*b + c可能等于零。

于 2013-12-02T21:00:36.900 回答