如何对交叉路口进行 lambdify

How to lambdify an Intersection

我正在用 sympy.solvers.solveset 中的 invert_real 反转一个函数,因为由于某些原因 solvesolveset 都不能这样做。结果是 Intersection 并且似乎是正确的。

我现在想用它来进行数值计算。当我用 .subs 尝试时它工作正常,但是当我尝试 lambdify 时我得到

NameError: name 'Intersection' is not defined

我已经发现我需要在 lambdifymodules= 中传递 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。