我想了解公式
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个元素
答案 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)
代替。