我正在使用invert_real
中的sympy.solvers.solveset
反转一个函数,因为solve
和solveset
都不能出于某种原因这样做。结果是Intersection
,似乎是正确的。
我现在想用它进行数值计算。当我使用.subs
进行尝试时效果很好,但是当我尝试lambdify
时,我得到了
NameError:name' Intersection'未定义
我已经发现我需要在Intersection
modules=
中传递lambdify
的来源。但我找不到工作来源。
这是一个代码示例:
from sympy import *
from sympy.solvers.solveset import invert_real
x, y = symbols('x,y')
expr = 1 - exp(-18000000*x)
res_alg = invert_real(expr, y, x)[1]
print("res_alg: ", res_alg)
res_1 = res_alg.subs(y, 0.5)
print("res_1: ", res_1)
res = lambdify(y, res_alg, "numpy")
print(res, res(0.5))
答案 0 :(得分:0)
最简单的方法是忽略Intersection并仅将lambdify作为第二个参数的集合。
res = lambdify(y, next(iter(res_alg.args[1])), "numpy")
print(res(0.5))
打印3.850817669777474e-08
。
此处,res_alg.args
是交集的参数列表。 args [1]选择{-log(-y + 1)/ 18000000}。 next(iter(...))
从该集合中选择第一个元素,以便lambdified函数返回float而不是set。
如果传递的值没有真正的解决方案,例如res(1.5)
,则输出为nan。