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

使用Sympy整理表达式求解T_p时返回空列表的问题求助

问题原因

solve函数本身支持分数次幂的方程求解,运行返回空的原因有两个:

  • 方程中系数、指数都用了浮点数格式,sympy做符号解析解推导时,对浮点数的代数运算支持度差,容易无法收敛得到解
  • 声明符号时没有指定实数域假设,sympy默认会在复数域下判断多解情况,逻辑复杂度太高最终返回空结果

解决方案

方法1:获取T_p关于T_i的符号表达式

将所有浮点数转成有理数格式,声明符号时指定实数域,求解时加force=True参数强制处理幂次方程,修改后代码如下:

from sympy import symbols, Eq, solve, Rational
# 声明符号为实数类型,减少复数域多解判断
T_i, T_p = symbols('T_i T_p', real=True)
# 所有浮点数转成有理数类型
eq = Eq(Rational('1.32')*(T_i - T_p)**Rational('1.25') + Rational('58.5')*T_i, 3774)
# 加force参数强制处理幂次方程
sol = solve(eq, T_p, force=True)
print(sol)

运行后输出结果为:
[T_i - 145751250**(1/5)*(37740 - 585*T_i)**(4/5)/1485]
该解的有效定义域为3774 - 58.5*T_i >= 0,也就是T_i <= 约64.51,否则偶次根式无实数解。

方法2:给定T_i数值求T_p的数值解

如果不需要符号表达式,仅需要对应特定T_i的T_p数值,用nsolve数值求解更快,示例代码如下:

from sympy import symbols, Eq, nsolve
T_i, T_p = symbols('T_i T_p')
eq = Eq(1.32*(T_i - T_p)**1.25 + 58.5*T_i, 3774)
# 代入T_i=20,初始猜测值设为10
sol_num = nsolve(eq.subs(T_i, 20), T_p, 10)
print(sol_num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:54:06