量子力学中的非厄米离散化

计算科学 有限差分 量子力学 搭配
2021-12-01 14:00:48

考虑薛定谔方程

(122x2+V(x))ψ(x)=Eψ(x)

解决它的通常方法是引入离散化ψ(x). 这产生了一个特征值问题,可以通过线性代数的标准方法来解决。当使用导致厄米特(或对称)矩阵的离散化时,可以获得确定系统本征态能量的实本征值。

然而,当对二阶导数矩阵使用非对称离散化时,例如来自 Chebyshev 或 Legendre 搭配的矩阵,或仅来自在边界处具有前向或后向差异的等距网格,通常会获得复特征值。

这是否意味着不能将非对称离散化用于量子力学?有什么解决方法吗?

1个回答

如果你的离散方程正确地代表了你的问题,你应该有正确的特征值,尽管在数值上你可以在解决特征值问题时得到一个小的虚部。

例如,让我们考虑圆柱井的轴对称情况。薛定谔方程可以写成

2ψr2+1rψr=Eψ.

使用朴素的有限差分,我们可以使用以下近似值

2ψ(ri)r2ψi+12ψi+ψi1Δr2,ψ(ri)rψi+1ψi12Δ,

其中第二个近似导致一个斜对称矩阵。离散问题将是

[D2r+RinvDr]{Ψ}=E{Ψ},

存在D2r二阶导数矩阵, Dr一阶导数矩阵和Rinv一个对角矩阵1ri+Δr/2作为条目。

下面的代码片段解决了这个问题

from __future__ import division, print_function
from scipy.special import j0, jn_zeros
import numpy as np
from scipy.sparse import diags
from scipy.sparse.linalg import eigs
import matplotlib.pyplot as plt

# Parameters
r_max = 1.0
dr = 0.01
r = np.arange(0, r_max, dr)
npts = r.shape[0]
nvals = 10

# Matrices
D2 = diags([1, -2, 1], [-1, 0, 1], shape=(npts - 1, npts - 1))/dr**2
D1 = diags([-0.5, 0, 0.5], [-1, 0, 1], shape=(npts - 1, npts - 1))/dr
r_new = r[0:npts-1] + dr/2
R_inv = diags(1/r_new, 0)
A = D2 + R_inv.dot(D1)

# Finite differences
vals, vecs = eigs(-A, k=nvals, which="SM") 
vecs = np.vstack((vecs, np.zeros(vecs.shape[1])))

# Analytic results
vals_anal = jn_zeros(0, nvals)
vecs_anal = j0(np.outer(r, vals_anal)/r_max)


## Plots

# Eigenvalues
plt.figure()
plt.plot(vals_anal**2)
plt.plot(vals, "ok")
plt.legend(["Analytic eigenvalues",
            "Numeric eigenvalues"])
plt.xlabel(r"$n$")
plt.ylabel(r"$E_n$")


# Eigenvectors
plt.figure()
plt.subplot(121)
plt.plot(r, np.abs(vecs[:, 0:4]/vecs[0, 0:4])**2)
plt.title("Finite differences")
plt.xlabel(r"$r$")
plt.ylabel(r"$|\psi|^2$")

plt.subplot(122)
plt.plot(r, np.abs(vecs_anal[:, 0:4])**2)
plt.title("Analytic solution")
plt.xlabel(r"$r$")
plt.ylabel(r"$|\psi|^2$")

plt.tight_layout()
plt.show()

具有以下特征值

在此处输入图像描述

和这些特征向量

在此处输入图像描述