二维非线性薛定谔方程紧致差分格式Matlab代码
时间: 2023-12-11 11:05:35 浏览: 236
非线性薛定谔方程求解代码
4星 · 用户满意度95%
二维非线性薛定谔方程可以写成如下形式:
i ∂ψ/∂t = -1/2(∂²ψ/∂x² + ∂²ψ/∂y²) + V(x,y)ψ + g|ψ|²ψ
其中,ψ是波函数,V(x,y)是势能函数,g是非线性系数。
紧致差分格式可以用来离散化二维空间和时间,具体的差分格式如下:
i(ψ_ij^(n+1) - ψ_ij^n)/Δt = -1/2(ψ_i-1,j^(n+1) - 2ψ_ij^(n+1) + ψ_i+1,j^(n+1))/Δx^2 - 1/2(ψ_i,j-1^(n+1) - 2ψ_ij^(n+1) + ψ_i,j+1^(n+1))/Δy^2 + V_ijψ_ij^(n+1) + g|ψ_ij^(n+1)|²ψ_ij^(n+1)
其中,Δt、Δx、Δy是时间和空间的离散化步长,n是时间步数,i和j是空间中的离散点,ψ_ij^(n+1)表示在(i,j)点上的波函数值,V_ij表示在(i,j)点上的势能函数值。
根据以上公式,可以编写如下的Matlab代码:
```matlab
%% 二维非线性薛定谔方程紧致差分格式Matlab代码
clear;clc;
%% 参数设置
Lx = 10;
Ly = 10;
Nx = 101;
Ny = 101;
Nt = 500;
dx = Lx/(Nx-1);
dy = Ly/(Ny-1);
dt = 0.01;
x = linspace(-Lx/2,Lx/2,Nx);
y = linspace(-Ly/2,Ly/2,Ny);
[X,Y] = meshgrid(x,y);
V = zeros(Nx,Ny);
g = 1;
%% 初始条件
kx = 1;
ky = 2;
psi = exp(1i*(kx*X+ky*Y));
%% 紧致差分格式
psi_new = psi;
for n = 1:Nt
for j = 2:Ny-1
for i = 2:Nx-1
psi_xx = (psi(i-1,j)+psi(i+1,j)-2*psi(i,j))/dx^2;
psi_yy = (psi(i,j-1)+psi(i,j+1)-2*psi(i,j))/dy^2;
psi_new(i,j) = psi(i,j) - 1i*dt*(-0.5*psi_xx-0.5*psi_yy+V(i,j)*psi(i,j)+g*abs(psi(i,j))^2*psi(i,j));
end
end
psi = psi_new;
end
%% 绘图
figure(1)
surf(X,Y,abs(psi_new).^2)
title('波函数的模方')
xlabel('x')
ylabel('y')
zlabel('|\psi|^2')
```
运行以上代码,即可得到波函数的模方图像。注意,由于此处只考虑了自由边界条件,边界处波函数的值需要特殊处理。
阅读全文