如何lambdify交叉点

时间:2018-02-21 10:28:12

标签: python sympy set-intersection lambdify

我正在使用invert_real中的sympy.solvers.solveset反转一个函数,因为solvesolveset都不能出于某种原因这样做。结果是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))

1 个答案:

答案 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。