You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

波函数从位置到动量空间的傅里叶变换及绘图问题

解决波函数的动量空间傅里叶变换与绘图问题

首先要纠正一个关键问题:你当前代码里的psi(x)计算的是概率密度(|ψ(x)|²),而动量空间的波函数φ(p)是对**波函数本身ψ(x)**做傅里叶变换,不是概率密度。所以第一步要先修正波函数的定义。

你尝试的代码存在的问题

  • 未提前定义变量n、x就直接使用
  • psi的定义缺少闭合括号,语法错误
  • 虚数单位应该用Sympy的smp.I,而非未定义的i
  • 积分的语法错误,把表达式和integrate函数直接拼接,不符合Python语法
  • 混用Sympy符号计算和Numpy数值数组,两者不兼容

下面提供两种可行的解决方案:


方案一:Sympy符号计算(解析解)

适合简单波函数,可以得到精确的解析表达式,再转换成数值函数绘图:

import sympy as smp
import numpy as np
import matplotlib.pyplot as plt

# 定义符号变量
x, p, n, L = smp.symbols('x p n L')
# 定义波函数(注意是波函数本身,不是概率密度)
psi = smp.sqrt(2/L) * smp.sin(n * smp.pi * x / L)
# 定义傅里叶变换(量子力学常用归一化,ℏ=1)
phi_expr = (1 / smp.sqrt(2 * smp.pi)) * smp.integrate(psi * smp.exp(-smp.I * p * x), (x, 0, L))

# 代入参数n=1, L=1,得到具体的表达式
phi_specific = phi_expr.subs({n:1, L:1}).simplify()
# 将符号表达式转换为可处理Numpy数组的函数
phi_func = smp.lambdify(p, phi_specific, 'numpy')

# 生成p的取值范围(动量范围可以扩大,比如-10到10,更能看到分布)
p_vals = np.linspace(-10, 10, 200)
# 计算φ(p)的模(因为结果是复数,绘图通常看模或者模平方)
phi_vals = np.abs(phi_func(p_vals))

# 绘图
plt.figure(figsize=(8, 4))
plt.plot(p_vals, phi_vals, label=r'$|\phi(p)|$')
plt.xlabel('动量p')
plt.ylabel('$|\phi(p)|$')
plt.title('动量空间波函数')
plt.legend()
plt.grid(True)
plt.show()

方案二:Numpy数值积分(数值解)

适合复杂波函数,无法得到解析解时用数值积分:

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad

# 参数设置
n = 1
L = 1

# 定义波函数ψ(x)
def psi(x):
    return np.sqrt(2/L) * np.sin(n * np.pi * x / L)

# 定义傅里叶变换的积分函数,对每个p计算积分
def phi(p):
    # 被积函数是ψ(x)*e^(-ipx),因为是复数积分,需要分别计算实部和虚部
    integrand_real = lambda x: psi(x) * np.cos(p * x)
    integrand_imag = lambda x: -psi(x) * np.sin(p * x)
    real_part, _ = quad(integrand_real, 0, L)
    imag_part, _ = quad(integrand_imag, 0, L)
    # 归一化因子
    return (1 / np.sqrt(2 * np.pi)) * (real_part + 1j * imag_part)

# 生成p的取值范围
p_vals = np.linspace(-10, 10, 200)
# 向量化phi函数,批量计算每个p的值
phi_vals = np.vectorize(phi)(p_vals)
# 取模绘图
phi_abs = np.abs(phi_vals)

# 绘图
plt.figure(figsize=(8, 4))
plt.plot(p_vals, phi_abs, label=r'$|\phi(p)|$')
plt.xlabel('动量p')
plt.ylabel('$|\phi(p)|$')
plt.title('动量空间波函数(数值积分)')
plt.legend()
plt.grid(True)
plt.show()

内容的提问来源于stack exchange,提问作者Tooba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:27:28