我对此代码有疑问(我在发布前减少了它)
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上显示错误。那么他们之间有什么区别?我能相信结果吗?
答案 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)
等于零,这意味着它是无法解释的代数。
我不知道你的矩阵是什么意思,但你不能用你的代码中的值来解决你在代码中提出的系统。