我正在尝试理解公式
c=A(i:j,:)*inv(A)*b
哪里i,j=1:length(A)
.假设 A 是可逆
上面的公式允许我们将索引 i
中的所有元素复制到向量 b
中的索引j
。我还通过 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 x 5,其中从第 3 行到第 5 行创建第 1 行到第 3 行。D 的最后一行是 1。那么上面的公式是
c(1:4,:)=D*inv(A)*b=[8;10;6;1.12]...
它还复制向量 b 的第 3 到 5 个元素
对于可逆矩阵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)
即可。