radial_schrodinger package

Submodules

radial_schrodinger.analysis module

径向薛定谔方程求解器的分析模块

包含波函数处理、能量分析和收敛性研究等功能。提供数值结果的验证、分析和后处理。

主要功能: - 波函数的归一化和导数计算 - 渐近行为分析和小r极限处理 - 能量本征值与理论值比较 - 数值方法的收敛性研究

Classes:

WavefunctionProcessor: 波函数处理器,处理归一化和导数 EnergyAnalyzer: 能量分析器,比较计算值和理论值 ConvergenceAnalyzer: 收敛性分析器,研究网格依赖性

class radial_schrodinger.analysis.ConvergenceAnalyzer(energy_analyzer: EnergyAnalyzer)[源代码]

基类:object

收敛性分析类

Methods

analyze_grid_convergence(solver, n_values)

分析不同网格点数的收敛性

analyze_grid_convergence(solver, n_values: list) dict[源代码]

分析不同网格点数的收敛性

对一系列网格点数计算能量本征值,分析相对误差随 网格间距的变化关系,用于确定数值方法的收敛阶数。

Parameters:
solverobject

求解器实例

n_valueslist

要测试的网格点数列表

Returns:
dict

包含以下键的字典: - n_points: 网格点数列表 - energies: 对应的能量值 - errors: 相对误差(%) - delta_h: 网格间距

class radial_schrodinger.analysis.EnergyAnalyzer(theoretical_values: Dict)[源代码]

基类:object

能量分析类

Methods

compare_with_theory(E, V_type, n, l)

与理论值比较

compare_with_theory(E: float, V_type: str, n: int, l: int) dict[源代码]

与理论值比较

Parameters:
Efloat

计算得到的能量

V_typestr

势能类型

nint

主量子数

lint

角量子数

Returns:
dict

比较结果字典

class radial_schrodinger.analysis.WavefunctionProcessor(非均匀网格版本)[源代码]

基类:object

提供波函数的归一化、导数计算和渐近行为分析等功能。 特别处理了原点附近的奇异性问题。

Attributes:
rnp.ndarray

非均匀径向网格点

lint

角量子数

deltafloat

网格变换参数

jnp.ndarray

均匀网格点索引

r_pfloat

网格变换参数

dr_djnp.ndarray

网格变换的导数

Methods

analyze_asymptotic(u[, num_points])

分析r→0时波函数的渐进行为

get_derivatives(u)

计算波函数在非均匀网格上的导数

get_r0_values(u)

获取r=0处的函数值和导数

normalize_wavefunction(r)

  1. 通过拟合处理r→0处的行为

analyze_asymptotic(u: ndarray, num_points: int = 10) Tuple[float, float][源代码]

分析r→0时波函数的渐进行为

通过对数拟合确定渐进形式:u(r) ~ r^m * exp(-r/n)

Parameters:
unp.ndarray

波函数值

num_pointsint

用于拟合的点数

Returns:
Tuple[float, float]

(幂次m, 指数参数n) m应接近l+1, n应接近主量子数

get_derivatives(u: ndarray) Tuple[ndarray, ndarray][源代码]

计算波函数在非均匀网格上的导数

Parameters:
unp.ndarray

波函数值

Returns:
Tuple[np.ndarray, np.ndarray]

一阶和二阶导数

get_r0_values(u: ndarray) Tuple[float, float][源代码]

获取r=0处的函数值和导数

normalize_wavefunction(r)[源代码]
  1. 通过拟合处理r→0处的行为

  2. 归一化变换后的波函数u(r)

  3. 计算物理波函数R(r) = u(r)/r

  4. 验证归一化条件∫|R(r)|²r²dr = 1

Parameters:
unp.ndarray

输入波函数u(r)

tolfloat, optional

归一化精度要求

Returns:
Tuple[np.ndarray, np.ndarray]

(归一化的u(r), 对应的R(r))

Raises:
ValueError

当波函数无效或归一化失败时

radial_schrodinger.main module

径向薛定谔方程求解主程序

整合各功能模块,提供完整的计算流程和用户接口。

功能特点: - 命令行参数配置和运行控制 - 多种原子、量子态和求解方法的示例 - 自动化的收敛性分析流程 - 结构化的结果输出和可视化

Modules:

utils: 工具函数和配置类 solver: 数值求解方法 analysis: 结果分析和处理 visualization: 结果可视化

class radial_schrodinger.main.RadialSchrodingerSolver(config: SolverConfig)[源代码]

基类:object

径向薛定谔方程主求解器

整合配置、网格、求解器、分析器和可视化器, 提供完整的求解流程控制。

Attributes:
configSolverConfig

计算配置

gridRadialGrid

计算网格

Vcallable

势能函数

wave_processorWavefunctionProcessor

波函数处理器

energy_analyzerEnergyAnalyzer

能量分析器

visualizerResultVisualizer

结果可视化器

convergence_analyzerConvergenceAnalyzer

收敛性分析器

solverUnion[ShootingSolver, FiniteDifferenceSolver]

具体求解器实例

Methods

convergence_study([n_points_list])

进行收敛性分析

solve()

求解指定的量子态

solve_with_points(n_points)

使用指定网格点数求解

convergence_study(n_points_list=None) Dict[源代码]

进行收敛性分析

Parameters:
n_points_listlist, optional

要测试的网格点数列表

Returns:
dict

收敛性分析结果

solve() Dict[源代码]

求解指定的量子态

根据配置选择求解方法,完成求解并进行后处理: 1. 确定能量搜索范围 2. 求解本征值和本征函数 3. 波函数归一化和处理 4. 与理论值比较 5. 结果可视化

Returns:
Dict

计算结果字典,包含: - energy: 本征能量 - wavefunction: 波函数数据 - analysis: 与理论值的比较 - all_energies: (仅FD方法)所有本征值 - all_states: (仅FD方法)所有本征态

Raises:
Exception

求解过程中的错误

solve_with_points(n_points: int) float[源代码]

使用指定网格点数求解

Parameters:
n_pointsint

网格点数

Returns:
float

计算得到的能量

radial_schrodinger.main.main()[源代码]

主程序入口

处理命令行参数并执行相应的计算路径: 1. 示例计算模式 2. 收敛性分析模式 3. 单次计算模式

支持的参数: –V-type: 势能类型(hydrogen/lithium) –n: 主量子数 –l: 角量子数 –method: 求解方法(shooting/fd) –j-max: 网格点数 –example: 运行示例 –convergence: 进行收敛性分析

radial_schrodinger.main.run_example()[源代码]

运行示例计算

radial_schrodinger.solver module

径向薛定谔方程求解器的核心求解模块

实现了两种求解方法: 1. 打靶法(shooting): 从外向内积分,寻找满足边界条件的能量本征值 2. 有限差分法(finite difference): 构建矩阵直接求解本征值问题

主要特点: - 采用变换坐标系统,处理波函数在原点附近的奇异性 - 使用改进的RK4方法进行数值积分 - 引入多重评价指标确保解的物理正确性 - 支持任意外部势能函数

Classes:

ShootingSolver: 打靶法求解器 FiniteDifferenceSolver: 有限差分法求解器

class radial_schrodinger.solver.FiniteDifferenceSolver(grid: RadialGrid, V: callable, l: int)[源代码]

基类:object

有限差分法求解器

Methods

V_eff(j)

计算有效势

construct_hamiltonian()

构建哈密顿量矩阵

fd_solve(n_states)

渐进式求解本征值问题

construct_B_matrix

V_eff(j) float[源代码]

计算有效势

Parameters:
jarray_like

网格点索引

Returns:
float

有效势能

construct_B_matrix(N_reduced)[源代码]
construct_hamiltonian()[源代码]

构建哈密顿量矩阵

对应变换后的径向方程: -[v’’(j) - v(j)δ²/4] + 2δ²rp²e^(2δj)v(j)V_eff(j) = E[2δ²rp²e^(2δj)]v(j) 从j=1开始构建方程

Returns:
scipy.sparse.csr_matrix

哈密顿量稀疏矩阵

fd_solve(n_states: int) tuple[源代码]

渐进式求解本征值问题

先求解最低本征值,然后根据1/n²规律估计后续本征值位置

Parameters:
n_statesint

需要求解的本征态数量

Returns:
tuple

(energies, states)

class radial_schrodinger.solver.ShootingSolver(grid: RadialGrid, V: callable, l: int)[源代码]

基类:object

打靶法求解器

使用改进的RK4方法从外向内积分求解径向方程。通过多重评价指标 (节点数、渐进行为、连续性等)寻找正确的能量本征值。

Attributes:
gridRadialGrid

计算使用的径向网格

Vcallable

势能函数

lint

角量子数

deltafloat

网格变换参数

r_pfloat

网格变换标度参数

jndarray

网格索引数组

Methods

V_eff(j)

计算有效势

integrate_inward(E)

从外向内积分

shooting_solve(E_min, E_max[, target_nodes])

打靶法求解本征值和本征函数

V_eff(j) float[源代码]

计算有效势

Parameters:
j不只局限于整数

当前的网格索引,可以是半整数,便于rK4积分

Returns:
float

有效势

integrate_inward(E: float) ndarray[源代码]

从外向内积分

Parameters:
Efloat

能量

Returns:
np.ndarray

波函数u(r)

shooting_solve(E_min: float, E_max: float, target_nodes: int = None) Tuple[float, ndarray][源代码]

打靶法求解本征值和本征函数

使用优化算法最小化多重目标函数: 1. 波函数在原点附近的对数导数误差 2. 波函数节点数与目标值的偏差 3. 波函数在r_min处的幅值误差 4. 波函数导数的连续性误差

Parameters:
E_minfloat

能量搜索下限

E_maxfloat

能量搜索上限

target_nodesint, optional

目标节点数,默认为n-l-1

Returns:
float

能量本征值

np.ndarray

归一化的波函数

Raises:
RuntimeError

当优化算法未能收敛时抛出

radial_schrodinger.utils module

径向薛定谔方程求解器的工具模块

包含网格生成、势能函数、波函数工具等基础设施。 提供配置类和理论值查询等功能支持。

默认单位: - 长度: a bohr半径 - 能量: hatree

Classes:

SolverConfig: 求解器配置类 RadialGrid: 径向网格工具类 PotentialFunction: 势能函数类 WavefunctionTools: 波函数工具类

Functions:

get_theoretical_values: 获取理论参考值 get_energy_bounds: 估计能量搜索范围

class radial_schrodinger.utils.PotentialFunction[源代码]

基类:object

势能函数类

提供不同原子的势能函数实现: 1. 氢原子: 库仑势 V(r) = -1/r 2. 锂原子: GTH赝势,包含局域和非局域部分

V(r) = V_loc(r) + V_nl(r)

注: 已考虑电子负电荷,势能直接给出

Methods

V_hydrogen(r)

氢原子势能: V(r) = -1/r

V_lithium(r[, Z_ion, r_loc, C1, C2, C3, C4])

锂原子赝势

get_potential(V_type)

获取势能函数

static V_hydrogen(r: ndarray) ndarray[源代码]

氢原子势能: V(r) = -1/r

Parameters:
rnp.ndarray

径向距离数组

Returns:
np.ndarray

势能数组

static V_lithium(r: ndarray, Z_ion: float = 3, r_loc: float = 0.4, C1: float = -14.0093922, C2: float = 9.5099073, C3: float = -1.7532723, C4: float = 0.0834586) ndarray[源代码]

锂原子赝势

Parameters:
rnp.ndarray

径向距离数组

Z_ionfloat, optional

有效核电荷

r_locfloat, optional

局域化参数

C1-C4float, optional

势能参数

Returns:
np.ndarray

势能数组

classmethod get_potential(V_type: str)[源代码]

获取势能函数

Parameters:
V_typestr

势能类型(‘hydrogen’或’lithium’)

Returns:
callable

对应的势能函数

class radial_schrodinger.utils.RadialGrid(config: SolverConfig)[源代码]

基类:object

径向网格工具类,处理非均匀网格的生成和变换

使用变换 r = r_p[exp(j*delta) - 1] + r_min 生成非均匀网格, 在原点附近较密,远处较疏,更适合原子波函数的数值计算。

Attributes:
configSolverConfig

网格配置对象

jndarray

均匀网格点索引

r_pfloat

网格变换标度参数

rndarray

物理空间径向坐标

drndarray

网格间距

Methods

get_grid_info()

返回网格信息

setup_grid()

设置非均匀网格,使用变换 r = r_p[exp(j*delta) - 1] + r_min

get_grid_info() dict[源代码]

返回网格信息

setup_grid()[源代码]

设置非均匀网格,使用变换 r = r_p[exp(j*delta) - 1] + r_min

class radial_schrodinger.utils.SolverConfig(r_max: float = 30.0, r_min: float = 1e-05, j_max: int | None = None, delta: float | None = None, l: int = 0, n: int = 1, n_states: int = 3, V_type: str = 'hydrogen', method: str = 'shooting', tol: float = 1e-08)[源代码]

基类:object

求解器配置类

Attributes:
r_maxfloat

最大径向距离 (Bohr)

r_minfloat

最小径向距离 (Bohr)

j_maxint

径向网格点数

deltafloat

网格变换参数

lint

角量子数

nint

主量子数

n_statesint

需要求解的本征态数量

V_typestr

势能类型 (‘hydrogen’ 或 ‘lithium’)

methodstr

求解方法 (‘shooting’ 或 ‘fd’)

tolfloat

收敛精度

V_type: str = 'hydrogen'
property config_summary: str

返回配置摘要信息

delta: float | None = None
j_max: int | None = None
l: int = 0
method: str = 'shooting'
n: int = 1
n_states: int = 3
r_max: float = 30.0
r_min: float = 1e-05
tol: float = 1e-08
class radial_schrodinger.utils.WavefunctionTools[源代码]

基类:object

波函数工具类

Methods

count_nodes(u[, eps])

计算波函数节点数

get_analytic_hydrogen(r)

实现前几个低量子数态的径向波函数解析表达式: R(r) = N_nl * r^l * L_n^(2l+1)(2r/n) * exp(-r/n) 其中N_nl为归一化系数,L_n^k为拉盖尔多项式

static count_nodes(u: ndarray, eps: float = 1e-10) int[源代码]

计算波函数节点数

Parameters:
unp.ndarray

波函数数组

epsfloat, optional

判定零点的阈值

Returns:
int

节点数

static get_analytic_hydrogen(r)[源代码]

实现前几个低量子数态的径向波函数解析表达式: R(r) = N_nl * r^l * L_n^(2l+1)(2r/n) * exp(-r/n) 其中N_nl为归一化系数,L_n^k为拉盖尔多项式

Parameters:
rnp.ndarray

径向距离数组

nint

主量子数

lint

角量子数

Returns:
Optional[np.ndarray]

解析波函数,若无解析表达式则返回None

radial_schrodinger.utils.get_energy_bounds(V_type: str, n: int) Tuple[float, float][源代码]

获取不同原子的能量范围估计

Parameters:
V_typestr

势能类型

nint

主量子数

Returns:
Tuple[float, float]

(E_min, E_max) 能量范围估计

radial_schrodinger.utils.get_theoretical_values(Hartree单位)[源代码]

获取理论参考值(Hartree单位)

Returns:
Dict

不同原子的能量本征值字典 格式: {原子类型: {(n,l): 能量}}

radial_schrodinger.visualization module

径向薛定谔方程求解器的可视化模块

负责绘制波函数、概率密度、能量扫描结果等图像。 提供结果可视化和分析展示功能。

Classes:

ResultVisualizer: 结果可视化类

class radial_schrodinger.visualization.ResultVisualizer(r: ndarray)[源代码]

基类:object

结果可视化类

提供原子波函数、能量和收敛性分析的可视化功能。 自动处理中文显示和样式优化。

Attributes:
rnp.ndarray

径向网格点

Methods

plot_convergence_study(results[, V_type, n, ...])

绘制收敛性分析结果

plot_energy_scan(E_array, u0_array, n, l, V_type)

绘制能量扫描结果

plot_wavefunction(u, R, E, n, l, V_type[, ...])

绘制波函数及其概率密度分布

plot_convergence_study(results: Dict, V_type: str = '', n: int = 1, l: int = 0, method: str = 'shooting')[源代码]

绘制收敛性分析结果

使用双对数坐标展示网格间距与相对误差的关系。 同时绘制二阶和四阶收敛的参考线以供比较。

Parameters:
resultsDict

包含 ‘delta_h’(网格间距)和’errors’(相对误差)的字典

V_typestr

势能类型

nint

主量子数

lint

角量子数

methodstr

求解方法(‘shooting’或’fd’)

plot_energy_scan(E_array: ndarray, u0_array: ndarray, n: int, l: int, V_type: str)[源代码]

绘制能量扫描结果

Parameters:
E_arraynp.ndarray

能量数组

u0_arraynp.ndarray

对应的u(0)值

nint

主量子数

lint

角量子数

V_typestr

势能类型

plot_wavefunction(u: ndarray, R: ndarray, E: float, n: int, l: int, V_type: str, R_analytic: ndarray | None = None, method: str = 'shooting')[源代码]

绘制波函数及其概率密度分布

生成两个子图: 1. 波函数图:展示变换后的u(r)和物理波函数R(r) 2. 概率密度图:展示r²R²(r)分布

当提供解析解时,同时绘制对比曲线。

Parameters:
unp.ndarray

变换坐标下的径向波函数u(r)

Rnp.ndarray

物理坐标下的径向波函数R(r)

Efloat

能量本征值(Hartree)

nint

主量子数

lint

角量子数

V_typestr

势能类型(‘hydrogen’或’lithium’)

R_analyticnp.ndarray, optional

解析波函数(对氢原子部分态可用)

methodstr

求解方法(‘shooting’或’fd’)

Module contents

class radial_schrodinger.ConvergenceAnalyzer(energy_analyzer: EnergyAnalyzer)[源代码]

基类:object

收敛性分析类

Methods

analyze_grid_convergence(solver, n_values)

分析不同网格点数的收敛性

analyze_grid_convergence(solver, n_values: list) dict[源代码]

分析不同网格点数的收敛性

对一系列网格点数计算能量本征值,分析相对误差随 网格间距的变化关系,用于确定数值方法的收敛阶数。

Parameters:
solverobject

求解器实例

n_valueslist

要测试的网格点数列表

Returns:
dict

包含以下键的字典: - n_points: 网格点数列表 - energies: 对应的能量值 - errors: 相对误差(%) - delta_h: 网格间距

class radial_schrodinger.EnergyAnalyzer(theoretical_values: Dict)[源代码]

基类:object

能量分析类

Methods

compare_with_theory(E, V_type, n, l)

与理论值比较

compare_with_theory(E: float, V_type: str, n: int, l: int) dict[源代码]

与理论值比较

Parameters:
Efloat

计算得到的能量

V_typestr

势能类型

nint

主量子数

lint

角量子数

Returns:
dict

比较结果字典

class radial_schrodinger.FiniteDifferenceSolver(grid: RadialGrid, V: callable, l: int)[源代码]

基类:object

有限差分法求解器

Methods

V_eff(j)

计算有效势

construct_hamiltonian()

构建哈密顿量矩阵

fd_solve(n_states)

渐进式求解本征值问题

construct_B_matrix

V_eff(j) float[源代码]

计算有效势

Parameters:
jarray_like

网格点索引

Returns:
float

有效势能

construct_B_matrix(N_reduced)[源代码]
construct_hamiltonian()[源代码]

构建哈密顿量矩阵

对应变换后的径向方程: -[v’’(j) - v(j)δ²/4] + 2δ²rp²e^(2δj)v(j)V_eff(j) = E[2δ²rp²e^(2δj)]v(j) 从j=1开始构建方程

Returns:
scipy.sparse.csr_matrix

哈密顿量稀疏矩阵

fd_solve(n_states: int) tuple[源代码]

渐进式求解本征值问题

先求解最低本征值,然后根据1/n²规律估计后续本征值位置

Parameters:
n_statesint

需要求解的本征态数量

Returns:
tuple

(energies, states)

class radial_schrodinger.PotentialFunction[源代码]

基类:object

势能函数类

提供不同原子的势能函数实现: 1. 氢原子: 库仑势 V(r) = -1/r 2. 锂原子: GTH赝势,包含局域和非局域部分

V(r) = V_loc(r) + V_nl(r)

注: 已考虑电子负电荷,势能直接给出

Methods

V_hydrogen(r)

氢原子势能: V(r) = -1/r

V_lithium(r[, Z_ion, r_loc, C1, C2, C3, C4])

锂原子赝势

get_potential(V_type)

获取势能函数

static V_hydrogen(r: ndarray) ndarray[源代码]

氢原子势能: V(r) = -1/r

Parameters:
rnp.ndarray

径向距离数组

Returns:
np.ndarray

势能数组

static V_lithium(r: ndarray, Z_ion: float = 3, r_loc: float = 0.4, C1: float = -14.0093922, C2: float = 9.5099073, C3: float = -1.7532723, C4: float = 0.0834586) ndarray[源代码]

锂原子赝势

Parameters:
rnp.ndarray

径向距离数组

Z_ionfloat, optional

有效核电荷

r_locfloat, optional

局域化参数

C1-C4float, optional

势能参数

Returns:
np.ndarray

势能数组

classmethod get_potential(V_type: str)[源代码]

获取势能函数

Parameters:
V_typestr

势能类型(‘hydrogen’或’lithium’)

Returns:
callable

对应的势能函数

class radial_schrodinger.RadialGrid(config: SolverConfig)[源代码]

基类:object

径向网格工具类,处理非均匀网格的生成和变换

使用变换 r = r_p[exp(j*delta) - 1] + r_min 生成非均匀网格, 在原点附近较密,远处较疏,更适合原子波函数的数值计算。

Attributes:
configSolverConfig

网格配置对象

jndarray

均匀网格点索引

r_pfloat

网格变换标度参数

rndarray

物理空间径向坐标

drndarray

网格间距

Methods

get_grid_info()

返回网格信息

setup_grid()

设置非均匀网格,使用变换 r = r_p[exp(j*delta) - 1] + r_min

get_grid_info() dict[源代码]

返回网格信息

setup_grid()[源代码]

设置非均匀网格,使用变换 r = r_p[exp(j*delta) - 1] + r_min

class radial_schrodinger.RadialSchrodingerSolver(config: SolverConfig)[源代码]

基类:object

径向薛定谔方程主求解器

整合配置、网格、求解器、分析器和可视化器, 提供完整的求解流程控制。

Attributes:
configSolverConfig

计算配置

gridRadialGrid

计算网格

Vcallable

势能函数

wave_processorWavefunctionProcessor

波函数处理器

energy_analyzerEnergyAnalyzer

能量分析器

visualizerResultVisualizer

结果可视化器

convergence_analyzerConvergenceAnalyzer

收敛性分析器

solverUnion[ShootingSolver, FiniteDifferenceSolver]

具体求解器实例

Methods

convergence_study([n_points_list])

进行收敛性分析

solve()

求解指定的量子态

solve_with_points(n_points)

使用指定网格点数求解

convergence_study(n_points_list=None) Dict[源代码]

进行收敛性分析

Parameters:
n_points_listlist, optional

要测试的网格点数列表

Returns:
dict

收敛性分析结果

solve() Dict[源代码]

求解指定的量子态

根据配置选择求解方法,完成求解并进行后处理: 1. 确定能量搜索范围 2. 求解本征值和本征函数 3. 波函数归一化和处理 4. 与理论值比较 5. 结果可视化

Returns:
Dict

计算结果字典,包含: - energy: 本征能量 - wavefunction: 波函数数据 - analysis: 与理论值的比较 - all_energies: (仅FD方法)所有本征值 - all_states: (仅FD方法)所有本征态

Raises:
Exception

求解过程中的错误

solve_with_points(n_points: int) float[源代码]

使用指定网格点数求解

Parameters:
n_pointsint

网格点数

Returns:
float

计算得到的能量

class radial_schrodinger.ResultVisualizer(r: ndarray)[源代码]

基类:object

结果可视化类

提供原子波函数、能量和收敛性分析的可视化功能。 自动处理中文显示和样式优化。

Attributes:
rnp.ndarray

径向网格点

Methods

plot_convergence_study(results[, V_type, n, ...])

绘制收敛性分析结果

plot_energy_scan(E_array, u0_array, n, l, V_type)

绘制能量扫描结果

plot_wavefunction(u, R, E, n, l, V_type[, ...])

绘制波函数及其概率密度分布

plot_convergence_study(results: Dict, V_type: str = '', n: int = 1, l: int = 0, method: str = 'shooting')[源代码]

绘制收敛性分析结果

使用双对数坐标展示网格间距与相对误差的关系。 同时绘制二阶和四阶收敛的参考线以供比较。

Parameters:
resultsDict

包含 ‘delta_h’(网格间距)和’errors’(相对误差)的字典

V_typestr

势能类型

nint

主量子数

lint

角量子数

methodstr

求解方法(‘shooting’或’fd’)

plot_energy_scan(E_array: ndarray, u0_array: ndarray, n: int, l: int, V_type: str)[源代码]

绘制能量扫描结果

Parameters:
E_arraynp.ndarray

能量数组

u0_arraynp.ndarray

对应的u(0)值

nint

主量子数

lint

角量子数

V_typestr

势能类型

plot_wavefunction(u: ndarray, R: ndarray, E: float, n: int, l: int, V_type: str, R_analytic: ndarray | None = None, method: str = 'shooting')[源代码]

绘制波函数及其概率密度分布

生成两个子图: 1. 波函数图:展示变换后的u(r)和物理波函数R(r) 2. 概率密度图:展示r²R²(r)分布

当提供解析解时,同时绘制对比曲线。

Parameters:
unp.ndarray

变换坐标下的径向波函数u(r)

Rnp.ndarray

物理坐标下的径向波函数R(r)

Efloat

能量本征值(Hartree)

nint

主量子数

lint

角量子数

V_typestr

势能类型(‘hydrogen’或’lithium’)

R_analyticnp.ndarray, optional

解析波函数(对氢原子部分态可用)

methodstr

求解方法(‘shooting’或’fd’)

class radial_schrodinger.ShootingSolver(grid: RadialGrid, V: callable, l: int)[源代码]

基类:object

打靶法求解器

使用改进的RK4方法从外向内积分求解径向方程。通过多重评价指标 (节点数、渐进行为、连续性等)寻找正确的能量本征值。

Attributes:
gridRadialGrid

计算使用的径向网格

Vcallable

势能函数

lint

角量子数

deltafloat

网格变换参数

r_pfloat

网格变换标度参数

jndarray

网格索引数组

Methods

V_eff(j)

计算有效势

integrate_inward(E)

从外向内积分

shooting_solve(E_min, E_max[, target_nodes])

打靶法求解本征值和本征函数

V_eff(j) float[源代码]

计算有效势

Parameters:
j不只局限于整数

当前的网格索引,可以是半整数,便于rK4积分

Returns:
float

有效势

integrate_inward(E: float) ndarray[源代码]

从外向内积分

Parameters:
Efloat

能量

Returns:
np.ndarray

波函数u(r)

shooting_solve(E_min: float, E_max: float, target_nodes: int = None) Tuple[float, ndarray][源代码]

打靶法求解本征值和本征函数

使用优化算法最小化多重目标函数: 1. 波函数在原点附近的对数导数误差 2. 波函数节点数与目标值的偏差 3. 波函数在r_min处的幅值误差 4. 波函数导数的连续性误差

Parameters:
E_minfloat

能量搜索下限

E_maxfloat

能量搜索上限

target_nodesint, optional

目标节点数,默认为n-l-1

Returns:
float

能量本征值

np.ndarray

归一化的波函数

Raises:
RuntimeError

当优化算法未能收敛时抛出

class radial_schrodinger.SolverConfig(r_max: float = 30.0, r_min: float = 1e-05, j_max: int | None = None, delta: float | None = None, l: int = 0, n: int = 1, n_states: int = 3, V_type: str = 'hydrogen', method: str = 'shooting', tol: float = 1e-08)[源代码]

基类:object

求解器配置类

Attributes:
r_maxfloat

最大径向距离 (Bohr)

r_minfloat

最小径向距离 (Bohr)

j_maxint

径向网格点数

deltafloat

网格变换参数

lint

角量子数

nint

主量子数

n_statesint

需要求解的本征态数量

V_typestr

势能类型 (‘hydrogen’ 或 ‘lithium’)

methodstr

求解方法 (‘shooting’ 或 ‘fd’)

tolfloat

收敛精度

V_type: str = 'hydrogen'
property config_summary: str

返回配置摘要信息

delta: float | None = None
j_max: int | None = None
l: int = 0
method: str = 'shooting'
n: int = 1
n_states: int = 3
r_max: float = 30.0
r_min: float = 1e-05
tol: float = 1e-08
class radial_schrodinger.WavefunctionProcessor(非均匀网格版本)[源代码]

基类:object

提供波函数的归一化、导数计算和渐近行为分析等功能。 特别处理了原点附近的奇异性问题。

Attributes:
rnp.ndarray

非均匀径向网格点

lint

角量子数

deltafloat

网格变换参数

jnp.ndarray

均匀网格点索引

r_pfloat

网格变换参数

dr_djnp.ndarray

网格变换的导数

Methods

analyze_asymptotic(u[, num_points])

分析r→0时波函数的渐进行为

get_derivatives(u)

计算波函数在非均匀网格上的导数

get_r0_values(u)

获取r=0处的函数值和导数

normalize_wavefunction(r)

  1. 通过拟合处理r→0处的行为

analyze_asymptotic(u: ndarray, num_points: int = 10) Tuple[float, float][源代码]

分析r→0时波函数的渐进行为

通过对数拟合确定渐进形式:u(r) ~ r^m * exp(-r/n)

Parameters:
unp.ndarray

波函数值

num_pointsint

用于拟合的点数

Returns:
Tuple[float, float]

(幂次m, 指数参数n) m应接近l+1, n应接近主量子数

get_derivatives(u: ndarray) Tuple[ndarray, ndarray][源代码]

计算波函数在非均匀网格上的导数

Parameters:
unp.ndarray

波函数值

Returns:
Tuple[np.ndarray, np.ndarray]

一阶和二阶导数

get_r0_values(u: ndarray) Tuple[float, float][源代码]

获取r=0处的函数值和导数

normalize_wavefunction(r)[源代码]
  1. 通过拟合处理r→0处的行为

  2. 归一化变换后的波函数u(r)

  3. 计算物理波函数R(r) = u(r)/r

  4. 验证归一化条件∫|R(r)|²r²dr = 1

Parameters:
unp.ndarray

输入波函数u(r)

tolfloat, optional

归一化精度要求

Returns:
Tuple[np.ndarray, np.ndarray]

(归一化的u(r), 对应的R(r))

Raises:
ValueError

当波函数无效或归一化失败时

class radial_schrodinger.WavefunctionTools[源代码]

基类:object

波函数工具类

Methods

count_nodes(u[, eps])

计算波函数节点数

get_analytic_hydrogen(r)

实现前几个低量子数态的径向波函数解析表达式: R(r) = N_nl * r^l * L_n^(2l+1)(2r/n) * exp(-r/n) 其中N_nl为归一化系数,L_n^k为拉盖尔多项式

static count_nodes(u: ndarray, eps: float = 1e-10) int[源代码]

计算波函数节点数

Parameters:
unp.ndarray

波函数数组

epsfloat, optional

判定零点的阈值

Returns:
int

节点数

static get_analytic_hydrogen(r)[源代码]

实现前几个低量子数态的径向波函数解析表达式: R(r) = N_nl * r^l * L_n^(2l+1)(2r/n) * exp(-r/n) 其中N_nl为归一化系数,L_n^k为拉盖尔多项式

Parameters:
rnp.ndarray

径向距离数组

nint

主量子数

lint

角量子数

Returns:
Optional[np.ndarray]

解析波函数,若无解析表达式则返回None

radial_schrodinger.get_energy_bounds(V_type: str, n: int) Tuple[float, float][源代码]

获取不同原子的能量范围估计

Parameters:
V_typestr

势能类型

nint

主量子数

Returns:
Tuple[float, float]

(E_min, E_max) 能量范围估计

radial_schrodinger.get_theoretical_values(Hartree单位)[源代码]

获取理论参考值(Hartree单位)

Returns:
Dict

不同原子的能量本征值字典 格式: {原子类型: {(n,l): 能量}}