通过 Sympy integrate 加速集成

Speeding up integration by Sympy integrate

有两个函数 expFun1expFun2 我尝试从 t 到 s 关于 u 的积分。

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 是唯一的符号化变量。

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 的函数形式,加快计算时间的最佳方法是什么?

根据@Oscar Benjamin 的意见,我将解决方案更新如下。

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}))