我正在用分步傅立叶方法求解非线性薛定谔方程: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