Python:插值的集成

问题描述 投票:0回答:2

我有一些无法解决的问题:

#! /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)

但是没用。

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

python numpy scipy interpolation numerical-integration
2个回答
3
投票

正如 Pierre GM 所说,你必须为四边形提供一个函数(我认为你也可以使用

np.inf
作为上限,尽管在这里这并不重要,因为样条曲线很快就会变成 0)。然而,你想要的是:

s.integral(0, np.inf)

由于这是一条样条线,因此

UnivariateSpline
对象已经实现了一个应该更好更快的积分。


3
投票

根据

quad
的文档,您需要提供一个函数作为第一个参数,然后是积分范围的下限和上限,以及函数的一些额外参数(在 shell 中键入
help(quad)
获取更多信息) .

您传递了一个数组作为第一个参数(

ys
),这就是它不起作用的原因。您可能想尝试以下操作:

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

results = quad(s, 0, 9999)
© www.soinside.com 2019 - 2024. All rights reserved.