6

labview から python に移植しようとしています。

labviewには、一連のサンプルを入力として取り、サンプルの離散積分を実行し、シンプソンズ規則に従って値のリスト(曲線の下の領域)を返す関数「Integral x(t) VI」があります。

scipy.integrate.simps などの同等の関数を scipy で見つけようとしましたが、これらの関数は一連のサンプルの合計積分を float として返します。

積算値の合計ではなく、積算値のリストを取得するにはどうすればよいですか?

問題を間違った方法で見ているだけですか?

4

2 に答える 2

8

scipy.integrate.simpsを少し間違って使用している可能性があると思います。によって返される面積 は、 (渡された最初のパラメーター) のscipy.integrate.simps下の合計面積です。y2 番目のパラメーターはオプションで、x 軸のサンプル値 (各 y 値の実際の x 値) です。すなわち:

>>> import numpy as np
>>> import scipy
>>> a=np.array([1,1,1,1,1])
>>> scipy.integrate.simps(a)
4.0
>>> scipy.integrate.simps(a,np.array([0,10,20,30,40]))
40.0

異なる制限間で同じ曲線の下にある領域を返したいと思いますか? これを行うには、次のように、必要な曲線の部分を渡します。

>>> a=np.array([0,1,1,1,1,10,10,10,10,0])
>>> scipy.integrate.simps(a)
44.916666666666671
>>> scipy.integrate.simps(a[:5])
3.6666666666666665
>>> scipy.integrate.simps(a[5:])
36.666666666666664
于 2012-05-30T11:26:33.803 に答える
2

SciPy にはscipy.integrate.cumtrapz()、Simpson ルールまたは別の方法を特に使用する必要がない限り、必要な機能を実行する累積統合を行う方法が 1 つしかありません。そのために、提案されているように、常に自分でループを書くことができます。

于 2016-09-05T13:46:00.373 に答える