【问题标题】:How can I retrieve x from this Ax=b?如何从此 Ax=b 中检索 x?
【发布时间】:2020-12-05 08:08:48
【问题描述】:

我正在研究逆问题,我试图逆矩阵 A,但它有“秩不足”。 矩阵 A 也是非方阵。 所以,我尝试了 b 次 pinv(A),但它产生了不正确的解决方案。

我想知道可以解决这个问题的方法或函数。

这是 MATLAB 代码

vertical = eye(20);
A=zeros(10,200);
for j=0:9;
    A(j+1,1+20*j:20*j+20)=1;
end

for j=0:9;
    A(11:30,1+20*j:20*j+20)=vertical;
    
end

b=[0 4 4 4 10 10 4 4 4 0 0 2 2 2 2 2 2 2 2 0 0 2 2 2 8 8 2 2 2 0];
x=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
   0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0;
   0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0;
   0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0;
   0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0;
   0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0;
   0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0;
   0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0;
   0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0;
   0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];

【问题讨论】:

  • 在您的脚本中给出了Axb。你到底想计算什么? A 是一个 30x200 矩阵,b 是一个 1x30 向量。没有xAx=b
  • @m2016b 请不要更改问题中的代码样式。操作员周围的空间是个人选择,我们通常不会强迫这里的人们以这种或另一种方式这样做。
  • 鉴于 A 和 b 的大小,看起来您有 Ax=b' (单引号代表转置)。在 MATLAB 中,您可以使用 x = A \ b.'
  • @ThomasSablik 哦,对不起,我错过了转置。
  • @CrisLuengo Right.

标签: matlab matrix-inverse


【解决方案1】:

您的矩阵和向量的尺寸不正确,因此无法正常工作。 Matlab 中的pinv(A) 有一个称为容差的参数,它会在某个 epsilon 之后截断奇异值。您可以通过这种方式使用截断的 SVD 来求解,您将得到一个近似值。条件编号为 inf,因此首先更正您的脚本,然后将容差设置为 10^(-13) 或其他内容。

【讨论】:

  • 谢谢。我认为这不能完全检索 x。
  • @Park 假设它们是正确的尺寸,那么它会。另一张海报提到反斜杠运算符 x = A\b' 通常会更好。如果您阅读此scicomp.stackexchange.com/questions/1001/… 它通常会更快,因为它考虑了矩阵的结构。在这种情况下,由于它是病态且非正方形的,它可能无论如何都会使用 SVD。
【解决方案2】:

我认为你应该拥有的是

x = pinv(A)*b'

因为'b'的大小是1x30,而A的大小是30x200


要验证结果,可以试试

>> A*(pinv(A)*b')-b'
ans =

  -9.4369e-16
   1.7764e-15
  -3.5527e-15
            0
  -8.8818e-15
   3.5527e-15
   8.8818e-16
   3.5527e-15
  -2.6645e-15
  -2.2204e-16
  -6.6613e-16
   8.8818e-16
            0
   4.4409e-16
   8.8818e-16
  -2.4425e-15
   1.3323e-15
  -8.8818e-16
   2.2204e-15
  -1.4988e-15
  -3.3029e-15
  -4.4409e-16
            0
   3.5527e-15
            0
            0
  -3.7748e-15
  -2.4425e-15
  -8.8818e-16
   3.0531e-16

【讨论】:

  • 抱歉,这是个糟糕的建议。求解 x 的正确方法是 x = A \ b.'。这可以更加精确和稳健,并且计算效率也更高。
猜你喜欢
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 2011-09-26
相关资源
最近更新 更多