如何在 python 中对字符串和变量进行数值积分?

How do I numerically integrate a string with variables in python?

免责声明:这里完全是菜鸟,请尽可能简单

我的计划是使用 scipy.integrate.quad()eval()(在我的情况下,代码安装不是问题)。当等式中的唯一变量是积分变量时,这很好用:

from scipy.integrate import quad

equation = '1+2*x'

result = quad(lambda x: eval(equation), 0, 1)

只要定义了附加变量,就可以添加这些变量:

from scipy.integrate import quad

equation = 'A+B*x'
A=1
B=2

result = quad(lambda x: eval(equation), 0, 1)

但是,如果我尝试像我应该的那样用字典给 eval() 那些额外的变量,它突然开始抱怨找不到 x:

from scipy.integrate import quad

equation = 'A+B*x'
paramsDict = {'A':1, 'B':2}

result = quad(lambda x: eval(equation, paramsDict), 0, 1)

>>> NameError: name 'x' is not defined

显然 eval() 可以 return 具有未定义变量的函数没有问题,除非我给它 一些 值来处理?我该如何解决这个问题?

如果你看一下 eval 的文档,你会发现第二个参数设置了 eval 函数可以看到的范围,特别是它提供了一组全局变量eval 可以利用。因此,在您的情况下,它将无法访问 x。这可以通过多种方式解决,我的快速而肮脏的解决方案如下:

result = quad(lambda x: eval(equation, {**paramsDict, 'x':x}), 0, 1)