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)詳細についてはシェルに入力してください)。

配列を最初の引数(ys)として渡したため、機能しません。次のようなものを試してみてください。

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

また

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

np.infPierre GMが言ったように、quadの関数を指定する必要があります(スプラインがすぐに0になるので、ここでは問題ではありませんが、上限にも使用できると思います)。ただし、必要なのは次のとおりです。

s.integral(0, np.inf)

これはスプラインであるため、UnivariateSplineオブジェクトはすでに、より良く、より高速であるはずの積分を実装しています。

于 2012-09-01T13:42:27.290 に答える