[討論] dark soliton的邊界不收斂問題已回收
大家好,我最近在解一個非線性薛丁格方程式如下:
i*u_z+0.5*u_xx-|u|^2*u=0
預期收斂的結果會是u=1.0*tanh(x)
不過使用cheb當微分矩陣,邊界都會亂跳(理論上應該是水平)
僅提供目前我所做的code,但關於邊界條件還是不知道怎麼設才對,請大家講解一下
設法的原理,謝謝!!!
N = 10;
tol = 1e-6;
D_c = 1.0;
chi_c = 1.0;
L = 10.0;
[D,x] = cheb(N); % Compute Fourier second derivative
x = L*x; % Rescale [0, 2pi] to [-L,L]
D = (1/L)*D;
D2=D^2;
D2(1,:)=[1 zeros(1,N)];
D2(end,:)=[zeros(1,N) 1];
D2(:,1)=[1 zeros(1,N)]';
D2(:,end)=[zeros(1,N) 1]';
% initial guess
mu = 1.0; % chemical potential
wd = 1.0;
u0 = 1.0*tanh(x);
u0(1)=1;
u0(N+1)=-1;
subplot(2,1,1)
u1 = 1.0*tanh(x);
plot(x,abs(u0),x,abs(u1),'--');
u_del = i*ones(2*(N+1),1);
ite_num = 0;
ite_max = 50;
while (ite_num < ite_max & norm(abs(u_del)) > tol)
u_R = real(u0);
u_I = imag(u0);
Mat_A11 =
mu*eye(N+1)+0.5*D_c*D2-2.0*chi_c*diag(abs(u0).*abs(u0))-1.0*chi_c*diag(u_R.*u_R-u_I.*u_I);
Mat_A12 = -2.0*chi_c*diag(u_R.*u_I);
Mat_A21 = -2.0*chi_c*diag(u_R.*u_I);
Mat_A22 =
mu*eye(N+1)+0.5*D_c*D2-2.0*chi_c*diag(abs(u0).*abs(u0))+1.0*chi_c*diag(u_R.*u_R-u_I.*u_I);
Mat_A = [Mat_A11 Mat_A12; Mat_A21 Mat_A22];
vec_B1 =
-1.0*(mu*u_R+0.5*D_c*D2*u_R-1.0*chi_c*diag(abs(u0).*abs(u0))*u_R);
vec_B2 =
-1.0*(mu*u_I+0.5*D_c*D2*u_I-1.0*chi_c*diag(abs(u0).*abs(u0))*u_I);
vec_B = [vec_B1;vec_B2];
vec_Y = Mat_A\vec_B;
u_del = vec_Y(1:N+1)+i*vec_Y(N+2:2*(N+1));
u_new = u0+u_del;
ite_num = ite_num+1;
err_norm = norm(abs(u_del));
fprintf(1,'norm of errors for %d-iterations = %f \n',ite_num, err_norm);
u0 = u_new;
end
subplot(2,1,2)
plot(x,abs(u_new),x,abs(u1),'--');
--
※ 發信站 :批踢踢實業坊(ptt.cc)
◆ From: 111.251.208.140