问题描述
我正在通过分步傅里叶方法求解非线性Schrodinger方程: i df / dz + 1/2 * d ^ 2f / dX ^ 2 + | f | ^ 2 * f = 0
使用初始条件: f = q * exp(-(X / X0)^ 24)。
但是我必须对| 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,则很简单,但是具有上述条件(对于| x |
解决方法
一个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