【问题标题】:How to lambdify an Intersection如何对一个交叉点进行lambdify
【发布时间】:2018-02-21 10:28:11
【问题描述】:

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

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

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

我已经发现我需要在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))

【问题讨论】:

  • 我发布了一个issue,关于这个方程的求解和求解集的性能。
  • @FTP 该线程有一些有趣的信息。谢谢。

标签: python sympy set-intersection lambdify


【解决方案1】:

最简单的方法是忽略 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多