2

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

我现在想用它来进行数值计算。当我尝试它.subs时效果很好,但是当我尝试时lambdify我得到

NameError:名称“交叉点”未定义

我已经发现我需要Intersectionmodules=. 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))
4

1 回答 1

0

最简单的方法是忽略 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 函数返回一个浮点数而不是一个集合。

如果您传递一个没有真正解决方案的值,例如res(1.5),则输出为 nan。

于 2018-02-21T13:40:58.667 回答