【发布时间】:2022-02-11 08:30:48
【问题描述】:
我正在尝试在 Python 中实现 Galerkin 不连续方法来求解偏微分方程。该方法涉及求解大量具有以下形式的常微分方程组
其中矩阵 $M^i$ 由 $L^2$ 乘积定义,即矩阵的每个条目是两个函数 $N_k$ 和 $N_l$ 乘积的积分,即
其中 $I_i=[-1,1]$。
为了做这些积分,我定义了函数 DotProduct(G, H) 如下
from scipy.integrate import quad
def DotProduct(G, H):
F = lambda x:G(x)*H(x)
w = quad(F, -1.0, 1.0)[0]
return w
这个函数的使用如下
f01 = lambda x: 0.5*(1-x)
f11 = lambda x: 0.5*(1+x)
Integral = DotProduct(f01, f11)
print(Integral)
我的问题是 90% 的代码执行时间专门用于计算这些积分。
我读过关于使用 numba 加快积分计算时间的文章,但在 DotProduct(G, H) 函数中实现它没有成功。
有人有什么建议吗?
【问题讨论】:
-
首先,所有函数都必须可由 numba 编译(就像@Jérôme Richard 在他的回答中显示的那样)第二步是创建一个低级可调用对象。这避免了 Python Interperter 中的函数调用开销。示例:stackoverflow.com/a/61089817/4045774
标签: python optimization scipy numba