如何在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
相关产品推荐
相关产品推荐

