scipy.special.eval_hermite是否仅支持实参?报错原因及解决方法咨询
关于scipy.special.eval_hermite复数参数支持问题的解答
报错原因
scipy.special.eval_hermite的底层C实现仅针对实数值输入做了适配,没有处理复数类型的逻辑分支。尽管Hermite多项式在数学上完全支持复数自变量,但该函数的输入类型检查会直接拒绝复数,触发类型转换安全检查失败的报错。- 官方文档未明确标注这一限制,容易造成误解。
解决办法
方法1:使用numpy的Hermite多项式实现
NumPy的Hermite类原生支持复数输入,示例代码:
import numpy as np # 初始化4阶Hermite多项式(系数数组对应H₀到H₄,仅H₄系数为1) hermite_poly = np.polynomial.hermite.Hermite([0, 0, 0, 0, 1]) # 计算复数参数结果 result = hermite_poly(1.j) print(result) # 输出:(-6+0j)
方法2:手动实现递推计算
利用Hermite多项式的递推公式 ( H_n(z) = 2zH_{n-1}(z) - 2(n-1)H_{n-2}(z) )(初始条件 ( H_0(z)=1 ),( H_1(z)=2z )),手动实现支持复数的版本:
def hermite(n, z): if n == 0: return 1.0 + 0.0j if isinstance(z, complex) else 1.0 elif n == 1: return 2 * z else: return 2 * z * hermite(n-1, z) - 2 * (n-1) * hermite(n-2, z) # 测试复数输入 print(hermite(4, 1.j)) # 输出:(-6+0j)
方法3:使用scipy.special.hermite生成多项式对象
scipy.special.hermite返回的多项式函数对象支持复数输入,示例代码:
from scipy.special import hermite # 获取4阶Hermite多项式函数 h4 = hermite(4) # 计算复数参数结果 result = h4(1.j) print(result) # 输出:(-6+0j)
内容的提问来源于stack exchange,提问作者Wolpertinger
相关产品推荐
相关产品推荐

