如何在solve()之后获得Sympy上的等式值

问题描述 投票:0回答:2

我正在尝试使用 Sympy 解决微积分的一些问题,但是当我求解导数时,我无法处理结果,因为它是一个“相等”作为条件。

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

fx = (0.00282*x**4) + (0.206*x**3) - (4.49*x**2)   + (18.8*x)   - (93.9)

# Interval
lim_inf = 0
lim_sup = 17
 
# Derivative
fxl = sp.diff(fx, x)

# Solutions of "derivate(fx) = 0"
sols = sp.solve([x >= lim_inf, x <= lim_sup, fxl], x)
print(sols)

输出是:

Eq(x, 2.56905057637722) | Eq(x, 9.67787339919465)

如何获得这两个值来继续我的实施?我需要得到 x=2.569 和 x=9.678 来在我的函数“f(x)”中计算。

我尝试做类似的事情:

print(sols[0])

但我收到错误:

----> 3 print(sols[0])
      4 
      5 

TypeError: 'Or' object is not subscriptable
python sympy
2个回答
0
投票

您可以索引

sols.args
以获得两个解决方案。第一个解决方案是
sols.args[0]
,第二个解决方案是
sols.args[1]
。如果您想要数值,可以执行
sols.args[0].rhs
,其中“rhs”表示右侧(即等号的右侧)。


0
投票
  1. 求解
    fxl = 0
    的导数
    x
    ,而不考虑 间隔。
  2. 过滤解决方案,仅保留您区间内的解决方案:
    [lim_inf, lim_sup]

类似这样的:

import sympy as sp
x = sp.symbols('x')
fx = (0.00282*x**4) + (0.206*x**3) - (4.49*x**2) + (18.8*x) - (93.9)
fxl = sp.diff(fx, x)
solutions = sp.solve(fxl, x)
lim_inf = 0
lim_sup = 17
filtered_solutions = [sol.evalf() for sol in solutions if lim_inf <= sol.evalf() <= lim_sup]
print(filtered_solutions)
© www.soinside.com 2019 - 2024. All rights reserved.