Algorithm 非线性项为空间非局部时非线性非局部薛定谔方程的求解

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

标准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; 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循环中的某些内容,如注释“集成开始”部分所示。你好,萨米特