我想对一个矩阵进行积分,使得输出矩阵的每个元素都是被积函数矩阵的相应元素的积分。代码片段如下:
import numpy as np
from scipy.integrate import quad
N=3
A = np.random.rand(N,N)
evs = np.linalg.eigvals(A)
evs = -np.sort(-evs)
Anew = A/(evs[0]+1) - np.eye(N)
B = np.eye(N)
def integrand(t,A,B):
prod = np.multiply(sp.linalg.expm(A*t),B)
return np.multiply(prod,prod.T)
这给出了一个方阵,其中每个元素都是 t 的函数。我使用以下内容进行集成:
np.vectorize(quad)(integrand,0,1,args=(Anew,B))
但是,我收到以下错误消息:
integrand() missing 1 required positional argument: 'B'
虽然这表明缺少“B”,但我不明白它,因为我提供 B 作为参数。我也不确定我是否正确实现了矢量化。
尝试
scipy.integrate.quad_vec
。它尚未发布,因此您需要 scipy 的开发版本,可以从 github 获取该版本。或者,等到 scipy 1.4 发布。