集成使用替换的函数

时间:2016-01-01 23:52:24

标签: python-2.7 integration substitution

你好经历过Pythoners

我的问题是关于Python中的简单三重集成。要集成的功能的一个简单示例如下:

-2*u - 5*v + 9*w + 15

这些函数是从输入文件读入的,但首先我想通过简单地将其作为函数来检查时间。该函数通过u,v和w从0 - >积分。 1.以下代码将集成此功能:

from scipy.integrate import tplquad
from time import time as epochTime

def ppsi(u,v,w):
   F = -2*u - 5*v + 9*w + 15
   return F
start = epochTime()
func = lambda u,v,w: ppsi(u,v,w)
u1,u2 = 0, 1
v1,v2 = lambda u: 0, lambda u: 1
w1,w2 = lambda u,v: 0, lambda u,v: 1
test = tplquad(ppsi, u1, u2, v1, v2, w1, w2)
print test
print ('Took:{:.3}s'.format(epochTime() - start))

这可以像人们预期的那样迅速得到(< 0.01s)。由于这些函数实际上是从输入文件读入的,我首先用Python可以使用的可用格式替换字符串字符:

from scipy.integrate import tplquad
from time import time as epochTime

def ppsi(u,v,w):
    ## Psi is the function read in from the input file
    f = sympy.sympify(Psi)
    f = f.subs({"u": u})
    f = f.subs({"v": v})
    f = f.subs({"w": w})
    return f
start = epochTime()
func = lambda u,v,w: ppsi(u,v,w)
u1,u2 = 0, 1
v1,v2 = lambda u: 0, lambda u: 1
w1,w2 = lambda u,v: 0, lambda u,v: 1
test = tplquad(func, u1, u2, v1, v2, w1, w2)
print test
print ('Took:{:.3}s'.format(epochTime() - start))

替换命令允许Python处理上面列出的函数,并且两个代码片段给出相同的答案,但第二个代码需要相当长的时间来评估(> 8s)。

每次集成运行时,是否会因为应用替换功能而增加时间?有没有一种简单的方法可以解决这个问题,并减少第二次实施的评估时间?

提前谢谢

1 个答案:

答案 0 :(得分:0)

使用wolfsgang提供的链接我修改了代码并且速度有了显着提升:

start = epochTime()
f = lambdify([u,v,w], Psi, "numpy")
u1,u2 = 0, 1
v1,v2 = lambda u: 0, lambda u: 1
w1,w2 = lambda u,v: 0, lambda u,v: 1
F = tplquad(f, u1,u2,v1,v2,w1,w2)
print F
print ('Took:{:.3}s'.format(epochTime() - start))

这需要0.0095秒来评估它最初花费的8秒。因此性能提升了三个数量级。 Lambdify肯定是要走的路!