Python:插值的集成

Python:插值的集成,python,numpy,integration,scipy,interpolation,Python,Numpy,Integration,Scipy,Interpolation,我有一些问题无法解决: #! /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,

我有一些问题无法解决:

#! /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)
但它不起作用


你能给我一些提示(或解决方案)吗?谢谢

根据
quad
的文档,您需要给出一个函数作为第一个参数,然后是积分范围的上下限,以及一些函数的额外参数(在shell中键入
帮助(quad)
,以了解更多信息

您将数组作为第一个参数(
ys
)传递,这就是它不起作用的原因。您可能需要尝试以下操作:

results = quad(s, xs[0], xs[-1])


正如Pierre GM所说,您必须为quad提供一个函数(我认为您也可以使用
np.inf
作为上界,尽管在这里这并不重要,因为样条曲线很快就会变为0)。但是,您需要的是:

s.integral(0, np.inf)

由于这是一条样条线,
UnivariateSpline
对象已经实现了一个应该更好更快的积分。

不需要在列表周围加括号,
x=[0,10,…,4560]
完全可以接受。好的,谢谢你的解释。但是这个函数的返回值是什么?我怎样才能将它转换成一个函数来显示“plot()”?嗯,我想你应该绘制反导数,不确定是否有一个很好的方法来计算s.integral(0,val)对于很多val来说,如果我想在C中做完全相同的事情呢?有什么方法可以做到吗?
s.integral(0, np.inf)