3

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

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

但它没有用。

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

4

2 回答 2

3

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

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

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

或者

results = quad(s, 0, 9999)
于 2012-09-01T13:33:11.590 回答
3

正如 Pierre GM 所说,您必须为 quad 提供一个函数(我认为您也可以将np.inf其用于上限,尽管在这里它并不重要,因为样条曲线无论如何都会很快变为 0)。但是,您想要的是:

s.integral(0, np.inf)

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

于 2012-09-01T13:42:27.290 回答