Matlab - RCOND错误

时间:2015-08-07 15:08:34

标签: matlab

我对此代码有疑问(我在发布前减少了它)

epsilon=0.60; t=-3.0; n=11; E=+0.34; I=eye(n,n); eta=1.0e-10;

DB = gallery('tridiag',t*ones(1,n-1),epsilon*ones(1,n),t*ones(1,n-1));
ODB1 = sparse(1:n,1:n,t*heaviside((-1).^(2:n+1)));
ODB2 = sparse(1:n,1:n,t*heaviside((-1).^(1:n)));

a=(E*I-DB)\ODB2';b=(E*I-DB)\ODB1;
p0=(E*I-DB)\ODB1';q0=(E*I-DB)\ODB2;

%initial
p=(I-a*q0-b*p0)\(a*p0);q=(I-a*q0-b*p0)\(b*q0);
tmp1=p; tmp2=q;

while norm([p q]) > 1.0e-8
A=(1+eta*1i)*I-p*q-q*p; (1)
x=A\I; (2)
p=x*p*p; q=x*q*q; (3)
%p=((1+eta*1i)*I-p*q-q*p)\(p*p); (4)
%q=((1+eta*1i)*I-p*q-q*p)\(q*q); (5)
tmp1=tmp1+tmp2*p;
tmp2=tmp2*q;
end

如果我用(4-5)替换(1-3)行,Matlab会在RCOND上显示错误。那么他们之间有什么区别?我能相信结果吗?

1 个答案:

答案 0 :(得分:0)

您的矩阵p*p是:

ans =

   39.2012         0  -28.3944         0   10.1201         0   10.6411         0  -28.4320         0   38.6426
   16.3606         0  -11.9292         0    4.3186         0    4.4104         0  -11.9335         0   16.2645
  -28.3944         0   20.9268         0   -7.6333         0   -7.6709         0   20.8517         0  -28.4320
  -28.2897         0   20.6792         0   -7.5188         0   -7.6149         0   20.6748         0  -28.1980
   10.1201         0   -7.6333         0    3.1358         0    2.5773         0   -7.6709         0   10.6411
   32.6084         0  -23.8794         0    8.7457         0    8.7457         0  -23.8794         0   32.6084
   10.6411         0   -7.6709         0    2.5773         0    3.1358         0   -7.6333         0   10.1201
  -28.1980         0   20.6748         0   -7.6149         0   -7.5188         0   20.6792         0  -28.2897
  -28.4320         0   20.8517         0   -7.6709         0   -7.6333         0   20.9268         0  -28.3944
   16.2645         0  -11.9335         0    4.4104         0    4.3186         0  -11.9292         0   16.3606
   38.6426         0  -28.4320         0   10.6411         0   10.1201         0  -28.3944         0   39.2012

第一次运行。它的倒数条件数(类似于条件数但缩放到1-0范围),rcon(p*p)等于零,这意味着它是无法解释的代数。

我不知道你的矩阵是什么意思,但你不能用你的代码中的值来解决你在代码中提出的系统。