如何将 scipy 与数组集成为函数的一部分

How to integrate using scipy with an array as part of the function

我想在 scipy 中使用积分命令,并且有一个函数可以乘以数组中的每个元素一次。

import math 
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
from scipy.integrate import quad, romberg
import scipy.special as special
from numpy import sqrt

yes = np.array([0,1])

def integrate(x,yes):
    return x+yes

result = quad(integrate,0,1,args=(yes))

print(result)

当我这样做时,我得到了错误 只有大小为 1 的数组可以转换为 Python 标量

但如果我这样做

import math 
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
from scipy.integrate import quad, romberg
import scipy.special as special
from numpy import sqrt

yes = np.array([0])

def integrate(x,yes):
    return x+yes

result = quad(integrate,0,1,args=(yes))

print(result)

它给了我这个 (0.5, 5.551115123125783e-15) 这正是我想要的,但我想要数组中的每个元素。

有没有办法写一个for循环? 我也听说过 scipy.integrate.quad_vec,但那是行不通的。提前谢谢你

您可以使用 quadpy,它是完全矢量化的。只需确保您的函数 f,如果给定一个特定 length/shape 的输入 x,returns 一个形状 range_shape + x.shape 的对象。结果的形状为 range_shape.

import numpy as np
from quadpy import quad


def f(x):
    return np.add.outer(np.array([0, 1]), x)


val, err = quad(f, 0, 1)
print(val)
[0.5 1.5]