我正在尝试使用 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
您可以索引
sols.args
以获得两个解决方案。第一个解决方案是 sols.args[0]
,第二个解决方案是 sols.args[1]
。如果您想要数值,可以执行 sols.args[0].rhs
,其中“rhs”表示右侧(即等号的右侧)。
fxl = 0
的导数 x
,而不考虑
间隔。[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)