Python で次数 2 の多項式を使用して概算したデータの範囲があります。この多項式の下の面積を 0 と 1 の間で計算したいと思います。
私が使用できるnumpyの微積分または同様のパッケージはありますか、またはこれらの関数を統合するための単純な関数を作成する必要がありますか?
数学関数を定義するための最良のアプローチが何であるかは少しわかりません。
ありがとう。
Python で次数 2 の多項式を使用して概算したデータの範囲があります。この多項式の下の面積を 0 と 1 の間で計算したいと思います。
私が使用できるnumpyの微積分または同様のパッケージはありますか、またはこれらの関数を統合するための単純な関数を作成する必要がありますか?
数学関数を定義するための最良のアプローチが何であるかは少しわかりません。
ありがとう。
最初から2次または3次多項式を積分する場合、明示的な積分式を導出する代わりに、シンプソンの法則を使用することもできます。この方法が3次以下の多項式を正確に統合することは深い事実です。
Mike Grahamの例を借りるには(私はしばらくPythonを使用していません。コードが不安定に見える場合は、お詫びします):
>>> import numpy
>>> p = numpy.poly1d([2, 4, 6])
>>> print p
2
2 x + 4 x + 6
>>> integrand = (1 - 0)(p(0) + 4*p((0 + 1)/2) + p(1))/6
シンプソンの法則を使用して、の値を計算しますintegrand
。メソッドがアドバタイズされたとおりに機能することを自分で確認できます。
もちろん、とを任意の値とに置き換えることができることをintegrand
示すために式を単純化したわけではありません。コードは、からまでの関数の積分を見つけるために引き続き機能します。0
1
u
v
u
v
scipy.integrateの「quad」は、単一の変数の関数を一定の間隔で統合するための汎用メソッドです。単純なケース(質問で説明されているケースなど)では、関数と下限および上限をそれぞれ渡します。'quad'は、積分結果と誤差項の上限で構成されるタプルを返します。
from scipy import integrate as TG
fnx = lambda x: 3*x**2 + 9*x # some polynomial of degree two
aoc, err = TG.quad(fnx, 0, 1)
[注:これを投稿した後、私の前に投稿された回答で、Numpyで「poly1d」を使用した多項式を表します。すぐ上の私のスクリプトレットは、次の形式の多項式も受け入れることができます。
import numpy as NP
px = NP.poly1d([2,4,6])
aoc, err = TG.quad(px, 0, 1)
# returns (8.6666666666666661, 9.6219328800846896e-14)