我很尴尬地问这个问题,因为我相信我可能遗漏了一些明显的东西,但我就是看不出我哪里出错了。作为一个更大项目的一部分,我正在研究应用离散化方法来近似方波上的对流方程。但是,我注意到在某些情况下,我的方波的边界被错误地应用了。当 10.25<=X<=10.5 时,它的初始条件应该是 1,其他地方应该是 0。这是该问题的一个示例:
L=20; %domain length
dx=0.01; %space step
nx=(L/dx); %number of steps in space
x=0:dx:(nx-1)*dx; %steps along x
sqr=zeros(1,nx); %pre-allocate array space
for j=1:nx
if ((10.25<=x(j))&&(x(j)<=10.5))
sqr(j)=1;
else
sqr(j)=0;
end
d=plot(x,sqr,'r','LineWidth',2); axis([10.1 10.6 0 1.1]);
drawnow;
在这种情况下,波形显示不正确,x=10.5 取值为 0 而不是 1,如下所示:
https://dl.dropboxusercontent.com/u/8037738/project/square_wave.png
奇怪的是,如果我将域长度更改为不同的值,它有时会正确显示。这是当域长度设置为 30 并且正确显示时:
https://dl.dropboxusercontent.com/u/8037738/project/square_wave_correct.png
我真的不明白,因为我的 x 数组总是以 0.01 的间隔离散,所以它在循环时永远不会“错过”10.5。我希望我已经充分解释了这个问题,如果这是我的愚蠢错误,我提前道歉。