72

Y 軸の高さと X 軸の長さとして 100 の数値のリストが 1 つあります。1 から 100 までの一定のステップ 5 です。(x,y) の曲線に含まれる面積を計算する必要があります。ポイント、および X 軸、長方形と Scipy を使用します。この曲線の関数を見つける必要がありますか? か否か?...私が読んだほとんどすべての例は、Y 軸の特定の方程式に関するものです。私の場合、方程式はなく、リストからのデータだけです。古典的な解決策は、Yポイントを追加またはステップX距離で乗算することです... Scipyを使用して何か考えはありますか?

Scipy と Numpy を使用して、数値 (有限初等) メソッドに焦点を当てた本を誰かお勧めできますか? ...

4

3 に答える 3

81

numpyおよびscipyライブラリには、複合台形(numpy.trapz)およびSimpson(scipy.integrate.simps)のルールが含まれています。

これが簡単な例です。との両方trapzsimps、引数dx=5はx軸に沿ったデータの間隔が5単位であることを示します。

import numpy as np
from scipy.integrate import simps
from numpy import trapz


# The y values.  A numpy array is used here,
# but a python list could also be used.
y = np.array([5, 20, 4, 18, 19, 18, 7, 4])

# Compute the area using the composite trapezoidal rule.
area = trapz(y, dx=5)
print("area =", area)

# Compute the area using the composite Simpson's rule.
area = simps(y, dx=5)
print("area =", area)

出力:

area = 452.5
area = 460.0
于 2012-11-10T16:38:16.787 に答える
23

シンプソンの公式または台形公式を使用して、一定の間隔でy値のテーブルが与えられたグラフの下の面積を計算できます。

シンプソンの公式を計算するPythonスクリプト:

def integrate(y_vals, h):
    i = 1
    total = y_vals[0] + y_vals[-1]
    for y in y_vals[1:-1]:
        if i % 2 == 0:
            total += 2 * y
        else:
            total += 4 * y
        i += 1
    return total * (h / 3.0)

hはy値間のオフセット(またはギャップ)であり、y_valsはy値の配列です。

例(上記の関数と同じファイル内):

y_values = [13, 45.3, 12, 1, 476, 0]
interval = 1.2
area = integrate(y_values, interval)
print("The area is", area)
于 2012-11-10T07:53:12.183 に答える