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

如何用Python求解复函数根?代码报错问题排查

问题:复函数连分式方程求根报错排查

我正在处理以omega为变量的复函数,已通过以下代码定义alpha、beta、gamma及ContinuedFrac函数:

from sympy import *

def alpha(n, rho, l):
     return n**2 + (2*rho + 2)*n + 2*rho + 1

def beta(n, rho, l):
     return -(2*n**2 + (8*rho + 2)*n + 8*rho**2 + 4*rho + l*(l+1) -3)

def gamma(n, rho, l):
     return n**2 + 4*rho*n + 4*rho**2 - 4

def ContinuedFrac(n, rho, l):
     cf = 0
     for i in reversed(range(1,n+1)):
         cf = cf + beta(i, rho, l)/alpha(i, rho, l)
         cf = (-gamma(i, rho, l)/alpha(i, rho, l)) / cf
     return cf

我的需求是:找到满足当n=3、rho=i*omega、l=3时,ContinuedFrac等于beta(0, i*omega, 3)/alpha(0, i*omega, 3)的根。尝试使用mpmath库的findroot函数编写了如下代码,但运行报错,期望得到类似(1.198 - 0.185i)的结果:

from sympy import *
import mpmath as mp

omega = symbols("ω")

f = ContinuedFrac(1, i*omega, 3) + beta(0, i*omega, 3)/alpha(0, I*omega, 3)
findroot(f, 2-0.5j)

错误原因与修正方案

核心问题点

  • 符号与数值函数不兼容:mpmath.findroot是数值求解工具,需要传入可直接计算数值的函数,但你用Sympy的symbols创建了符号变量ω,导致符号表达式无法被mpmath解析计算。
  • 参数与需求不符:需求中n=3,但代码里调用ContinuedFrac(1, ...),n参数错误。
  • 虚数单位混用:Sympy中虚数单位是大写I,但代码里混用了小写i(会被视为未定义变量),mpmath中虚数单位应为1j。
  • 方程逻辑错误:需求是ContinuedFrac(...) = beta(0,...)/alpha(0,...),对应方程应为ContinuedFrac(...) - beta(0,...)/alpha(0,...) = 0,你写成了加号,符号错误。

修正后的代码

import mpmath as mp

def alpha(n, rho, l):
    return n**2 + (2*rho + 2)*n + 2*rho + 1

def beta(n, rho, l):
    return -(2*n**2 + (8*rho + 2)*n + 8*rho**2 + 4*rho + l*(l+1) - 3)

def gamma(n, rho, l):
    return n**2 + 4*rho*n + 4*rho**2 - 4

def ContinuedFrac(n, rho, l):
    cf = 0
    for i in reversed(range(1, n+1)):
        cf = cf + beta(i, rho, l)/alpha(i, rho, l)
        cf = (-gamma(i, rho, l)/alpha(i, rho, l)) / cf
    return cf

# 定义数值目标函数:输入omega(复数),返回方程差值(等于0时为根)
def target_func(omega):
    rho = 1j * omega  # mpmath使用1j表示虚数单位
    lhs = ContinuedFrac(3, rho, 3)
    rhs = beta(0, rho, 3)/alpha(0, rho, 3)
    return lhs - rhs

# 调用findroot求解,初始值2-0.5j
result = mp.findroot(target_func, 2 - 0.5j)
print(result)

运行后即可得到符合预期的复数根。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:32:49