首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正态数值积分

正态数值积分
EN

Stack Overflow用户
提问于 2017-11-26 21:45:57
回答 3查看 835关注 0票数 1

我使用的是四叉方法的Scipy库,我想评估一个由用户输入的函数的数值积分。函数以字符串的形式存储。但是,quad方法除了字符串输入之外。那么,如何将这个字符串表达式转换为一个数值呢?

假设字符串表达式是: s1 =“5*x**2-4*x+ 2”,lower_bound =0,upper_bound =5 四(s1,lower_bound,upper_bound)

我尝试过将这个字符串分割成与算术符号有关的标记,然后调用quad方法,但是自变量(在本例中是x)仍然是字符串。

我该如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-26 21:56:29

您可以像这样使用eval():

代码语言:javascript
复制
>>> eval( "lambda x:x+1" )
<function <lambda> at 0x7f1b80d8ef28>

如果您在表达式的开头添加了一个"lambda:“字符串,那么对结果使用eval()就会返回一个函数,它可以满足您的需要。然后,您可以将此函数传递给您的Scipy集成函数。

注意: eval将执行传递给它的任何代码,因此不要在会造成安全问题的上下文中使用它。如果这是一个在线应用程序,那么eval()是错误的选择。如果这是一个桌面应用程序,那么用户已经可以在计算机上做他们想做的任何事情了,在这个上下文中eval()是可以的。

票数 2
EN

Stack Overflow用户

发布于 2017-11-26 22:01:02

我不确定你在这里能做什么,除了:

  1. 编写自己的解析器,将字符串作为输入并返回该表单的函数。虽然evallambda可以完成这个任务,但是它是不安全的,而且速度会慢一些。如果您只期望多项式,您可能需要查看NumPy Polynomial模块(链接)。
  2. 查看像SymPy这样的符号评估库

另外,看看已经被问到的问题:Python中的方程解析(SO)

票数 1
EN

Stack Overflow用户

发布于 2017-11-26 21:53:16

scipy.integrate.quad()期望一个函数作为它的第一个参数(文档)。

在这里,可以使用函数或lambda表达式:

代码语言:javascript
复制
lower_bound = 0
upper_bound = 5

def s1(x):
    return 5*x**2 - 4*x + 2

quad(s1, lower_bound, upper_bound)
quad(lambda x: 5*x**2 - 4*x + 2, lower_bound, upper_bound)

如果您想从字符串中的符号表达式中进行解析,可以使用eval()作为快速攻击。

代码语言:javascript
复制
s1 = "5*x**2 - 4*x + 2"
quad(lambda x: eval(s1), lower_bound, upper_bound)

如果你做了很多象征性的数学,我建议你使用SymPy。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47501343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档