如何为依赖于x的非线性薛定谔方程的初始条件编写子程序



我正在用分步傅立叶方法求解非线性薛定谔方程:i df/dz+1/2*d^2f/dX^2+|f|^2*f=0

使用初始条件:f=q*exp(-(X/X0(^24(。

但是对于|x|<1,否则,q=0。因此,我为横向变量x编写了以下子程序(涉及横向变量的代码摘录(:

fs=120;
N_fx=2^11; %number of points in frequency domain
dX=1/fs;
N_X=N_fx;
X=(-(N_X-1)/2:(N_X-1)/2)*dX;
X0=1;
Xn=length(X);
for m=1:Xn
Xnn=Xn/8;
pp=m;
if pp>3*Xnn && pp<5*Xnn
q=1.0;
f=q*exp(-(X/X0).^24);
else  
f=0;
end
end

但"f"似乎是错的,它是一个1乘2048的向量,所有条目都为零。我没有得到预期的结果。如果我的初始条件只有f=q*exp(-(X/X0(^24(,q=1,这很简单,但对于上述条件(q=1用于|x|<1,否则,q=0(,我需要做什么?任何帮助都将不胜感激。提前谢谢。

MWE,它具有0 < [f(867) : f(1162)] <= 1:

fs=120;
N_fx=2^11; %number of points in frequency domain
dX=1/fs;
N_X=N_fx;
X=(-(N_X-1)/2:(N_X-1)/2)*dX;
X0=1;
Xn=length(X);
f = zeros(1,Xn);  % new: preallocate f size and initialise it to 0
for m=1:Xn
Xnn=Xn/8;
if m>3*Xnn && m<5*Xnn
%if abs(X(m)) < 1   %alternative to line above
q=1.0;
% error was here below: you overwrote a 1x1 f at each iteration
f(m)=q*exp(-(X(m)/X0).^24);   
else
f(m)=0;
end
end

相关内容

  • 没有找到相关文章

最新更新