如何理解公式c = A(i:j,:) * inv(A)* b

时间:2015-04-13 16:16:01

标签: matlab matrix linear-algebra matrix-inverse

我想了解公式

c=A(i:j,:)*inv(A)*b

其中i,j=1:length(A)。假设A是可逆的

上述公式允许我们将向量i中的所有元素从索引j复制到索引b。我也用matlab代码实现了它,如下面的代码。但是,我不清楚为什么上面的公式允许我们复制向量b中的元素。让我看看我的公式和我的实现,请解释帮助我?非常感谢 当我在matlab中实现时,代码是

A =[ 10     1     7    10     9;
     3     9     3     1     2;
     9     2     3     5     4;
     1     2     8     6     1;
     5     2     6     6    10]

b =[ 8;
     5;
     8;
    10;
     6]

然后c=A(3:5,:)*inv(A)*b=[8;10;6] 结果看起来像c=b(3:5,:);

更多延伸:假设D是矩阵4乘5,其中从A的第3行到第5行创建第1到第3行.D的最后一行是1。那么上面的公式是

c(1:4,:)=D*inv(A)*b=[8;10;6;1.12]...

它还复制了向量b的第3到第5个元素

1 个答案:

答案 0 :(得分:4)

对于可逆矩阵A,代码c = A(i:j,:)*inv(A)*b(最多为数字错误)相当于:

tmp = A*inv(A)*b;
c = tmp(i:j);

矩阵乘积A*inv(A)将相互抵消(123*(1/123)或更x*(1/x) x~=0)(同样:对于可逆矩阵,直到数值误差) ),所以它相当于:

tmp = b;
c = tmp(i:j);

实际上没有理由做上述任何一项,你只会引入数值误差,它甚至不能正确地用于奇异矩阵!只需使用c = b(i:j)代替。