【发布时间】: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];
【问题讨论】:
-
在您的脚本中给出了
A、x和b。你到底想计算什么?A是一个 30x200 矩阵,b是一个 1x30 向量。没有x和Ax=b。 -
@m2016b 请不要更改问题中的代码样式。操作员周围的空间是个人选择,我们通常不会强迫这里的人们以这种或另一种方式这样做。
-
鉴于 A 和 b 的大小,看起来您有 Ax=b' (单引号代表转置)。在 MATLAB 中,您可以使用
x = A \ b.'。 -
@ThomasSablik 哦,对不起,我错过了转置。
-
@CrisLuengo Right.
标签: matlab matrix-inverse