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

使用sympy计算传递函数拉普拉斯逆变换出现RisingFactorial报错如何解决

报错根因

sympy的符号拉普拉斯逆变换要求运算过程中所有多项式系数为精确数值(整数、有理数),你当前传递函数里全是浮点系数,极小值的浮点还存在精度误差,导致符号运算过程中生成了非整数阶的特殊函数表达式RisingFactorial,无法继续运算就抛出了该错误。

解决方法

方法1:将浮点系数转换为精确有理数后再运算

利用sympy的nsimplify或者Rational把所有浮点系数转成精确的有理数值,同时可以先把延迟项e^(-2s)单独提取,利用拉普拉斯延迟特性简化运算:

import sympy as sp
s = sp.symbols('s')
t = sp.symbols('t', positive=True)

# 定义传递函数时先转精确有理数
num = sp.nsimplify(1.0e-8 * s + 0.02) * sp.exp(-2*s)
den = sp.nsimplify(s * (1.0e-11 * s**2 + 2.0000003e-5 * s + 0.00177))
wtl = num / den

# 先提取延迟项,计算无延迟部分的逆变换
no_delay_part = sp.nsimplify((1.0e-8 * s + 0.02) / (s * (1.0e-11 * s**2 + 2.0000003e-5 * s + 0.00177)))
inv_no_delay = sp.inverse_laplace_transform(no_delay_part, s, t, noconds=True)

# 应用延迟特性,替换t为t-2,乘以阶跃函数
wtl_t = inv_no_delay.subs(t, t-2) * sp.Heaviside(t-2)

方法2:直接用数值方法计算逆变换结果

如果你不需要符号解析解,只需要数值结果,用scipy的信号处理库运算效率更高,完全不会有符号运算的兼容性问题:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

# 定义传递函数系数
num = [1.0e-8, 0.02]
den = [1.0e-11, 2.0000003e-5, 0.00177, 0]
# 构建系统
sys = signal.TransferFunction(num, den)
# 计算阶跃响应,时间范围覆盖延迟时段
t = np.linspace(0, 10, 1000)
t_out, y_out = signal.step(sys, T=t)
# 应用2s延迟
y_out[t_out < 2] = 0

# 直接得到各时刻的数值结果
print(y_out)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:51:00