首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Sympy integrate加速集成

使用Sympy integrate加速集成
EN

Stack Overflow用户
提问于 2021-02-16 22:25:30
回答 1查看 46关注 0票数 0

这里有两个函数expFun1expFun2,我试着从t到s关于u进行积分。

代码语言:javascript
复制
import sympy as sym

# It returns a symbolic function where u is the only symbol in the function
def expFun1(X1,X2,a1,a2,T,u):        
    fx= X1*sym.exp(-a1*(T-u))+X2*sym.exp(-a2*(T-u))
    return fx

# Squared version of expFun1
def expFun2(X1,X2,a1,a2,T,u):        
    fx= (X1*sym.exp(-a1*(T-u))+X2*sym.exp(-a2*(T-u))) **2
    return fx

我将以下参数传递给函数,其中u是唯一的符号化变量。

代码语言:javascript
复制
u = sym.symbols('u')
t=0
s=1
T=1.2
X1, X2, a1, a2= [0.5, 0.3, 2, 0.1] 

Fx1=sym.integrate(expFun1(X1,X2,a1,a2,T,u), (u,t,s))
Fx2=sym.integrate(expFun2(X1,X2,a1,a2,T,u), (u,t,s))

Fx1的计算时间约为0.09秒。然而,对于Fx2来说,这大约是30秒。在实际的应用程序中,我需要遍历非符号参数的不同值,而expFun2的集成将永远耗费时间。

在给定expFun2函数形式的情况下,加速计算时间的最佳方法是什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 00:08:54

有了@奥斯卡·本杰明的评论,我更新了解决方案,如下所示。

代码语言:javascript
复制
import sympy as sym

X1, X2, a1, a2= sym.symbols('X1, X2, a1, a2')
t,s,T,u=sym.symbols('t,s,T,u')
fx= (X1*sym.exp(-a1*(T-u))+X2*sym.exp(-a2*(T-u))) **2
fx=sym.expand(fx)    
Fx=sym.integrate(fx,(u,t,s))

ans=float(Fx.subs({X1:0.5, X2: 0.3, a1:2, a2:0.1, T:1.2, t:0, s:1}))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66226245

复制
相关文章

相似问题

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