我有一些无法解决的问题:
#! /usr/bin/env python
import numpy as np
from scipy.interpolate import UnivariateSpline
from scipy.integrate import quad
import pylab as pl
x = ([0,10,20,30,40,50,60,70,...,4550,4560])
y = ([0,0,0,0,0,0,0,3,2,3,2,1,2,1,2,...,8,6,5,7,11,6,7,10,6,5,8,13,6,8,8,3])
s = UnivariateSpline(x, y, k=5, s=5)
xs = np.linspace(0, 4560, 4560)
ys = s(xs)
这是我对某些数据进行插值的代码。 另外,我绘制了这个函数。
但现在我想对它进行积分(从零到无穷大)。
我试过了
results = integrate.quad(ys, 0, 99999)
但是没用。
您能给我一些提示(或解决方案)吗?谢谢
正如 Pierre GM 所说,你必须为四边形提供一个函数(我认为你也可以使用
np.inf
作为上限,尽管在这里这并不重要,因为样条曲线很快就会变成 0)。然而,你想要的是:
s.integral(0, np.inf)
由于这是一条样条线,因此
UnivariateSpline
对象已经实现了一个应该更好更快的积分。
根据
quad
的文档,您需要提供一个函数作为第一个参数,然后是积分范围的下限和上限,以及函数的一些额外参数(在 shell 中键入 help(quad)
获取更多信息) .
您传递了一个数组作为第一个参数(
ys
),这就是它不起作用的原因。您可能想尝试以下操作:
results = quad(s, xs[0], xs[-1])
或
results = quad(s, 0, 9999)