MATLAB 的程序如下
%program 2 :the pseudospectral method
%iu_t+u_xx+2abs(u)^2u=0
L=80;N=256;dt=0.02;tmax=20;nmax=round(tmax/dt);
dx=L/N;x=[-L/2:dx:L/2-dx];K=[0:N/2-1,-N/2:-1]*2*pi/L;k2=K.^2;
s1=1.2;s2=0.8;b1=1;b2=0;d1=20;d2=0;
u=s1*sech(s1*(x+d1)).*exp(b1*1i*x)+s2*sech(s2*(x+d2)).*exp(b2*1i*x);
udata=u;tdata=0;
for nn=1:nmax
du1=1i*(ifft(-k2.*fft(u))+2*u.*u.*conj(u));
v=u+0.5*du1*dt;
du2=1i*(ifft(-k2.*fft(v))+2*v.*v.*conj(v));
v=u+0.5*du2*dt;
du3=1i*(ifft(-k2.*fft(v))+2*v.*v.*conj(v));
v=u+du3*dt;
du4=1i*(ifft(-k2.*fft(v))+2*v.*v.*conj(v));
u=u+(du1+2*du2+2*du3+du4)*dt/6;
if mod(nn,round(nmax/25))==0
udata=[udata;u];
tdata=[tdata nn*dt];
end
end
% plot
waterfall(x,tdata,abs(udata));
colormap([0 0 0]); view(10,60)
text(-2,-6,'x','fontsize',15)
text(50,5,'t','fontsize',15)
zlabel('|u|','fontsize',15)
axis([-L/2 L/2 0 tmax 0 2]);grid off
set(gca ,'xtick',[-40 -20 0 20 40])
set(gca ,'ytick',[0 10 20])
set(gca ,'ztick',[0 1 2])