MATLAB 实现:
- 用一个无限高三角形势阱约束电子:三角形内 (V=0),边界(含外部)(V\to\infty)
- 用矩形网格覆盖三角形外接正方形 ,外部点用大势能墙近似
- 用五点差分离散二维定态薛定谔方程
- 用反幂迭代(inverse iteration)/ 位移反迭代 求基态能量与波函数
1)物理模型(无量纲化)
为数值稳定,先做约化:
−ℏ22m∗∇2+V(x,y)ψ=Eψ\left-\\frac{\\hbar\^2}{2m\^\*}\\nabla\^2+V(x,y)\\right\psi=E\psi−2m∗ℏ2∇2+V(x,y)ψ=Eψ
令特征长度 (L)(取三角形直角边长),做:
x′=x/L,y′=y/L,V~=V/E0,E~=E/E0,E0=ℏ22m∗L2x'=x/L,\quad y'=y/L,\quad \tilde V=V/E_0,\quad \tilde E=E/E_0,\quad E_0=\frac{\hbar^2}{2m^*L^2}x′=x/L,y′=y/L,V~=V/E0,E~=E/E0,E0=2m∗L2ℏ2
则方程变成(略去撇):
(−∇2+V~)ψ=E~ψ(-\nabla^2+\tilde V)\psi=\tilde E\psi(−∇2+V~)ψ=E~ψ
三角形(等腰直角):
Ω={(x,y):x≥0, y≥0, x+y≤1},V~∣Ω=0,ψ∣∂Ω=0\Omega=\{(x,y): x\ge0,\;y\ge0,\;x+y\le 1\},\qquad \tilde V|\Omega=0,\quad \psi|{\partial\Omega}=0Ω={(x,y):x≥0,y≥0,x+y≤1},V~∣Ω=0,ψ∣∂Ω=0
2)MATLAB 代码
matlab
%% =========================================================
% 二维电子气 --- 等腰三角形无限深势阱
% 五点差分 + 位移反幂迭代求基态(无任何搜索/优化工具箱)
% =========================================================
clear; clc; close all;
%% ---- 1. 网格 ----
L = 1; % 三角形直角边长(你以后可换成 nm)
N = 80; % 网格点数/维(越大越贵)
dx = L/(N-1); dy = dx;
x = linspace(0,L,N); y = linspace(0,L,N);
[X,Y] = meshgrid(x,y);
% 三角形掩码
triMask = (X>=0 & Y>=0 & X+Y<=L+1e-12);
% 外部点:当作"势能墙"
Vbig = 1e6; % 足够大,使波函数在外部→0
V = zeros(N,N);
V(~triMask) = Vbig;
% ---- 2. 构造哈密顿矩阵 H(稀疏)----
% 约化单位里 (-∇²) 系数 = 1
coef = 1; % = ħ²/(2m*L²) 已吸收
ax2 = coef/dx^2;
ay2 = coef/dy^2;
M = N*N; % 全矩形网格铺平索引
Ic = zeros(M*5,1); Jc = Ic; S = Ic; % 预分配(稀疏三元组)
cnt = 0;
for j=1:N
for i=1:N
p = (j-1)*N + i; % 全局索引
% 如果点在"墙"里,直接钉死 ψ≈0:主元=1,其余=0(保证 ψ=0)
if ~triMask(j,i)
cnt=cnt+1; Ic(cnt)=p; Jc(cnt)=p; S(cnt)=1; % Hψ 中这一行 => ψ(p)=0
continue;
end
% 五点模板
diagH = 2*ax2 + 2*ay2 + V(j,i);
cnt=cnt+1; Ic(cnt)=p; Jc(cnt)=p; S(cnt)=diagH;
% i+1
if i<N
q=(j-1)*N+(i+1); cnt=cnt+1; Ic(cnt)=p; Jc(cnt)=q; S(cnt)=-ax2;
end
% i-1
if i>1
q=(j-1)*N+(i-1); cnt=cnt+1; Ic(cnt)=p; Jc(cnt)=q; S(cnt)=-ax2;
end
% j+1
if j<N
q=(j)*N+i; cnt=cnt+1; Ic(cnt)=p; Jc(cnt)=q; S(cnt)=-ay2;
end
% j-1
if j>1
q=(j-2)*N+i; cnt=cnt+1; Ic(cnt)=p; Jc(cnt)=q; S(cnt)=-ay2;
end
end
end
H = sparse(Ic(1:cnt), Jc(1:cnt), S(1:cnt), M, M);
fprintf('H 稀疏: %d×%d, 非零=%d\n', M, M, nnz(H));
%% ---- 3. 位移反幂迭代求最小特征值(基态)----
% 解 (H - sigma*I) ψ = v 反复迭代 => 收敛到最接近 sigma 的特征向量
sigma = 0.5; % 位移(可初估 ~ 几倍 π² 量级)
maxIter = 2000; tol = 1e-12;
psi = rand(M,1); psi = psi/norm(psi); % 初始随机向量
for it=1:maxIter
rhs = psi; % (H-sigma)ψ_new = ψ_old
psi_new = (H - sigma*speye(M))\rhs; % 直接反斜杠(稀疏 LU 内部)
nrm = norm(psi_new);
psi_new = psi_new / nrm;
if norm(psi_new - sign(dot(psi_new,psi))*psi) < tol
psi = psi_new; fprintf('收敛 iter=%d\n',it); break;
end
psi = psi_new;
end
E0 = dot(psi,H*psi)/dot(psi,psi); % Rayleigh 商
fprintf('基态能量 E0 ≈ %.6f (约化单位)\n', E0);
% 还原到带物理单位的表达式(可选)
% 若你要真实 eV: E0_phys = E0 * (hbar^2/(2*meff*L^2)/eV) [L 要换成真实米]
%% ---- 4. 把 ψ 铺回网格并裁剪到三角区内 ----
PsiGrid = zeros(N,N);
PsiGrid(triMask) = psi( sub2ind([N,N], reshape(find(triMask),[],1) ) ); % 只填三角内
PsiGrid(~triMask) = 0;
%% ---- 5. 可视化 ----
figure('Color','w');
subplot(1,2,1)
pcolor(X,Y,PsiGrid); shading flat; colorbar
hold on
plot([0 L L 0 0],[0 0 L 0 0],'k-','LineW',2)
xlabel('x'); ylabel('y'); title('基态波函数 ψ(x,y)')
axis equal tight
subplot(1,2,2)
pcolor(X,Y,PsiGrid.^2); shading flat; colorbar
hold on
plot([0 L L 0 0],[0 0 L 0 0],'k-','LineW',2)
xlabel('x'); ylabel('y'); title('|ψ|² 概率密度')
axis equal tight
sgtitle('三角形无限深势阱 --- 基态(五点差分 + 反幂迭代)')
参考代码 计算二维电子气在三角形势阱内的一些量子特性 www.youwenfan.com/contentcsv/101624.html
3)直接"读数"的量子特性
- 基态能量 (E_0)(约化单位)
- 波函数形状:三角形内应光滑、在边界趋于 0
- 概率密度 (|\psi|^2):告诉你电子最常出现在三角形哪个区域(通常不是几何中心,而是偏向"胖"区域)