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

如何在Sympy中提取solve()返回的Equality对象中的x值?

如何从Sympy返回的Or类型解中提取x值?

当你用Sympy带不等式条件求解时,solve返回的是Or逻辑对象而非列表,因此无法通过下标直接访问解。以下两种方法可以提取所需的x值:

方法1:先求所有根再过滤区间

直接解方程fxl=0得到所有根,再筛选出区间[0,17]内的解:

import sympy as sp
x = sp.symbols('x')
sp.init_printing(use_unicode=True)

fx = 0.00282*x**4 + 0.206*x**3 - 4.49*x**2 + 18.8*x - 93.9
lim_inf = 0
lim_sup = 17

fxl = sp.diff(fx, x)

# 求解所有根,再过滤有效区间
all_roots = sp.solve(fxl, x)
valid_x = [root for root in all_roots if lim_inf <= root <= lim_sup]
print(valid_x)

输出:

[2.56905057637722, 9.67787339919465]

方法2:处理返回的Or对象

如果已经得到了Or类型的解,可以通过访问其args属性拆分出单个等式,再提取x的值:

# 基于你原有的sols变量
from sympy import Or, Eq

sols = sp.solve([x >= lim_inf, x <= lim_sup, fxl], x)
# 拆分Or对象为等式列表
eqs = list(sols.args) if isinstance(sols, Or) else []
# 提取每个等式的右侧值(即x的解)
valid_x = [eq.rhs for eq in eqs if isinstance(eq, Eq)]
print(valid_x)

代入函数计算

拿到x值后,用subs方法代入原函数计算:

for x_val in valid_x:
    fx_val = fx.subs(x, x_val)
    print(f"x={x_val:.3f},fx结果:{fx_val:.3f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:32:36