【问题标题】:How to understand the formula c=A(i:j,:)*inv(A)*b如何理解公式 c=A(i:j,:)*inv(A)*b
【发布时间】:2015-04-13 16:16:00
【问题描述】:

我正在尝试理解公式

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×5 矩阵,其中从 A 的第 3 行到第 5 行创建第 1 到第 3 行。D 的最后一行是 1。那么上面的公式就是

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

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

【问题讨论】:

  • 什么什么??与所有为您提供此类代码的人解除好友关系!
  • @knedlsepp:我的代码发生了什么?代码只是实现了上面的公式

标签: matlab matrix linear-algebra matrix-inverse


【解决方案1】:

对于可逆矩阵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)

【讨论】:

  • 你是否尝试过实现 D=ones(4,5); D(1:3,:)=A(3:5,:);那么c=D*inv(A)*b=???。它将元素从 3 复制到 5 并最终生成一个新元素。假设 A 是可逆的。
  • @user8264:这不是一个错误的解释。这是一个错误的问题!
  • 对不起我的问题。也许我没有清楚地理解。然而。我从非常好的纸张和标准中得到它。对于简短的论文,让我们在这里看到它on-demand.gputechconf.com/gtc/2012/posters/…
  • @user8264:好吧,即使您不同意,我想我也回答了您提出的问题。祝你好运。
  • @user8264:读一本关于线性代数的书。
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 2022-08-11
相关资源
最近更新 更多