Algorithm 非线性项为空间非局部时非线性非局部薛定谔方程的求解
标准NLSE是:Algorithm 非线性项为空间非局部时非线性非局部薛定谔方程的求解,algorithm,matlab,numerical-methods,pde,nonlinear-functions,Algorithm,Matlab,Numerical Methods,Pde,Nonlinear Functions,标准NLSE是: i du/dt+1/2 d^2u/dx^2+|u|^2u = 0 解决这一问题的方法之一是伪谱法: L=80; N=2048; dt=0.0001; 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; u=1.2*sech(1.2*(x+20)).*exp(i*x)+0.8*sech(0.8*x); udata=u; t
i du/dt+1/2 d^2u/dx^2+|u|^2u = 0
解决这一问题的方法之一是伪谱法:
L=80; N=2048; dt=0.0001; 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;
u=1.2*sech(1.2*(x+20)).*exp(i*x)+0.8*sech(0.8*x);
udata=u; tdata=0;
for nn=1:nmax % integration begins
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 % integration ends
mesh(x, tdata, abs(udata')); % solution plotting
colormap('jet'); view(10, 60)
grid on
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])
在MATLAB中,标准NLSE中的非线性项如下所示:
u(x,t).*conj(u(x,t)).*u(x,t).
现在,在非局部NLSE中,相同的非线性项是:
u(x,t).*conj(u(-x,t)).*u(x,t)
在conj(u(x,t))
中使用“-”符号
现在我的问题是:在非局部NLSE中,代码将如何变化,更具体地说,如何在标记为
13、14、15、16、17、18的行中处理非线性项的“-”符号 这个代码应该是可运行的吗?显然,它在循环中包含了一个错误(在“第13行”)到embert:现在我给出了一个不同的代码,它使用伪谱方法来解决NLSE。它在MATLAB中运行正常。请参见上面问题中的代码。现在,你能告诉我如何用这种方法求解非局部NLSE吗?在u和v的参数中现在有“-x”,即非线性项中的conj(u(-x,t))和conj(v(-x,t))?也许我们需要更改for循环中的某些内容,如注释“集成开始”部分所示。你好,萨米特