如何对交叉路口进行 lambdify
How to lambdify an Intersection
我正在用 sympy.solvers.solveset
中的 invert_real
反转一个函数,因为由于某些原因 solve
和 solveset
都不能这样做。结果是 Intersection
并且似乎是正确的。
我现在想用它来进行数值计算。当我用 .subs
尝试时它工作正常,但是当我尝试 lambdify
时我得到
NameError: name 'Intersection' is not defined
我已经发现我需要在 lambdify
的 modules=
中传递 Intersection
的来源。但是我找不到工作来源。
这是一个代码示例:
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))
最简单的方法是忽略 Intersection 并仅对作为其第二个参数的集合进行 lambdify。
res = lambdify(y, next(iter(res_alg.args[1])), "numpy")
print(res(0.5))
打印 3.850817669777474e-08
。
这里,res_alg.args
是Intersection的参数列表。 args[1] 选择 {-log(-y + 1)/18000000}。 next(iter(...))
从该集合中选取第一个元素,因此 lambdified 函数 returns 是一个浮点数而不是集合。
如果传递一个没有实际解的值,例如res(1.5)
,输出为nan。
我正在用 sympy.solvers.solveset
中的 invert_real
反转一个函数,因为由于某些原因 solve
和 solveset
都不能这样做。结果是 Intersection
并且似乎是正确的。
我现在想用它来进行数值计算。当我用 .subs
尝试时它工作正常,但是当我尝试 lambdify
时我得到
NameError: name 'Intersection' is not defined
我已经发现我需要在 lambdify
的 modules=
中传递 Intersection
的来源。但是我找不到工作来源。
这是一个代码示例:
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))
最简单的方法是忽略 Intersection 并仅对作为其第二个参数的集合进行 lambdify。
res = lambdify(y, next(iter(res_alg.args[1])), "numpy")
print(res(0.5))
打印 3.850817669777474e-08
。
这里,res_alg.args
是Intersection的参数列表。 args[1] 选择 {-log(-y + 1)/18000000}。 next(iter(...))
从该集合中选取第一个元素,因此 lambdified 函数 returns 是一个浮点数而不是集合。
如果传递一个没有实际解的值,例如res(1.5)
,输出为nan。