登录论坛

查看完整版本 : [求助]matlab求本征值问题的一个奇特现象


zhan
2008-11-22, 17:42
最近我在求一个含有连续参数的本征值问题,发现利用eig或eigs命令都出现同样的一个奇怪的现象,具体的m文件如下:
%%%%%%%%以下为m文件
w0=-40.0; %参数的起始位置
w1=20.0;
dw=0.4;
w=w0:dw:w1;
K=(w1-w0)/dw;
V=-2.6e3*(-2+w)./((-2+w)*(7i+10)-49).^2-1.1;
N=10;
Ninterest=5;
Lambda=2.2+4.4*(0:N);
y=zeros(Ninterest,K+1);
trilambda=1:N;
for n=1:K+1
v=V(n);
trilambda1=trilambda*v;
MatrixEig=diag(Lambda+lambda*v)+diag(trilambda1,1)+diag(trilambda1,-1);
y(:,n)=eigs(MatrixEig,Ninterest,'SM');
end
y=-y*1.2e-2;
%%%%以下是画图,可以不看
figure1 = figure('PaperSize',[20.98 29.68]);
axes1 = axes('Parent',figure1,'FontWeight','bold','FontSize',16,...
'FontAngle','oblique');
xlim([-30 20]); % 由dw的数值可以知道,这个窗口里的参数对于w0=-40和-80是一样的
box on;
grid on;
hold on;
%%%%
plot1 = plot(w,real(y),'Parent',axes1,'LineWidth',3);
%%%%%%%
set(plot1(1),'Color',[1 0 1],'DisplayName','n=0');
set(plot1(2),'Color',[1 1 0],'DisplayName','n=1');
set(plot1(3),'Color',[0 0 0],'DisplayName','n=2');
set(plot1(4),'Color',[0 1 0],'DisplayName','n=3');
set(plot1(5),'Color',[0 0 1],'DisplayName','n=4');
%%%%%%
xlabel('\lambda','FontSize',20,'FontWeight','bold');
ylabel('K_n','FontSize',16,'FontWeight','bold');
legend1 = legend(axes1,'show');
set(legend1,'Position',[0.7389 0.5497 0.1613 0.3685],'FontSize',14);
hold off
%%%%% m文件结束%%%%%
我将w0由-40改成-80,发现这两个图相差极大(见附件).大家可以自行运行一下程序.附件里图可能看不清楚.不知道这里边具体是什么原因.怎么样才能使它们输出一致.谢谢各位!

zhan
2008-11-23, 20:24
没人愿意帮忙么?

zhan
2008-11-24, 16:12
我已经知道原因了.

meteora1005
2008-11-24, 23:35
你贴这么大一堆代码上来,没有几个人会仔细看的。那最后到底是什么原因呢?

zhan
2008-11-25, 12:27
做大循环时,尽量避免用复杂的匿名函数。应该是内存变量的原因。这可能要取决于计算机的性能了。