2変数の定積分
例題として、2変数の定積分 を考えてみましょう。
以下の関数を考えます:
$$ f(x, y) = x^2 + y^2 $$
そして、この関数を$ [x \in [-2, 2], y \in [-2, 2]] $の範囲で積分してみます。
Pythonで積分を計算し、結果をグラフ化するためには、SciPy とmatplotlib を使用します。
以下がそのコード例です:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import numpy as npfrom scipy import integrateimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Ddef integrand (x, y ): return x**2 + y**2 x_range = (-2 , 2 ) y_range = (-2 , 2 ) result, _ = integrate.dblquad(integrand, x_range[0 ], x_range[1 ], lambda x: y_range[0 ], lambda x: y_range[1 ]) print ("積分の結果:" , result)x_vals = np.linspace(x_range[0 ], x_range[1 ], 100 ) y_vals = np.linspace(y_range[0 ], y_range[1 ], 100 ) X, Y = np.meshgrid(x_vals, y_vals) Z = integrand(X, Y) fig = plt.figure() ax = fig.add_subplot(111 , projection='3d' ) ax.plot_surface(X, Y, Z, cmap='viridis' , rstride=5 , cstride=5 , alpha=0.7 , linewidth=0.5 , edgecolors='w' ) ax.set_xlabel('X' ) ax.set_ylabel('Y' ) ax.set_zlabel('Z' ) ax.set_title('2D Integral Example' ) plt.show()
このコードでは、dblquadを使用して2変数の積分 を計算しています。
そして、plot_surfaceメソッドを使用して関数の3Dプロットを作成しています。
プログラムを実行すると、積分の結果が表示され、関数がどのように分布しているかがグラフで視覚化されます。
[実行結果]
ソースコード解説
このソースコードは、Pythonを使用して2変数の関数を定積分 し、その結果を3Dグラフ化するサンプルコードです。
以下に、コードの各部分の説明を示します。
1 2 3 4 import numpy as npfrom scipy import integrateimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D
まず、必要なライブラリをインポートしています。
numpyは数値計算を効率的に行うためのライブラリ、scipyは科学技術計算のためのライブラリ、matplotlibはグラフの描画のためのライブラリ、Axes3Dは3Dグラフを描画するためのサブモジュールです。
1 2 3 def integrand (x, y ): return x**2 + y**2
integrandという関数を定義しています。
この関数は、2変数$ [x, y] $に対して$ [x^2 + y^2] $を返します。
これが積分対象の関数です。
1 2 3 x_range = (-2 , 2 ) y_range = (-2 , 2 )
x_rangeおよびy_rangeで積分の範囲を指定しています。
この例では、$ [x \in [-2, 2]] $および$ [y \in [-2, 2]] $の範囲で積分を行います。
1 2 result, _ = integrate.dblquad(integrand, x_range[0 ], x_range[1 ], lambda x: y_range[0 ], lambda x: y_range[1 ])
integrate.dblquad関数を使用して2重積分を計算しています。dblquadは2変数関数の定積分を計算する関数で、第一引数に積分対象の関数integrand、次に$ [x] $の範囲、そしてその後に$ [y] $の範囲を指定します。 積分結果はresultに格納されます。
計算結果をコンソールに出力しています。
1 2 3 4 5 6 x_vals = np.linspace(x_range[0 ], x_range[1 ], 100 ) y_vals = np.linspace(y_range[0 ], y_range[1 ], 100 ) X, Y = np.meshgrid(x_vals, y_vals) Z = integrand(X, Y)
グラフを描画するために、$ [x] $と$ [y] $の値を生成しています。linspace関数を使用して、指定された範囲内に等間隔の点を生成しています。meshgrid関数を使用して、これらの点から座標行列$ [X, Y] $を作成し、それを用いて関数の値$ [Z] $を計算しています。
1 2 3 4 5 6 7 8 9 10 fig = plt.figure() ax = fig.add_subplot(111 , projection='3d' ) ax.plot_surface(X, Y, Z, cmap='viridis' , rstride=5 , cstride=5 , alpha=0.7 , linewidth=0.5 , edgecolors='w' ) ax.set_xlabel('X' ) ax.set_ylabel('Y' ) ax.set_zlabel('Z' ) ax.set_title('2D Integral Example' ) plt.show()
最後に、matplotlibを使用して3Dグラフを描画しています。plot_surfaceメソッドを使用して、$ [X, Y, Z] $の3次元座標で関数をプロットし、その他のオプションでグラフのスタイルを調整しています。
最終的にplt.show()でグラフを表示します。
結果解説
[実行結果]
積分の結果が$ 42.666666666666664 $と表示されました。
これは、関数$ [ f(x, y) = x^2 + y^2 ] $を範囲$ [x \in [-2, 2], y \in [-2, 2]] $で積分した値です。 この積分は、与えられた領域で関数の値を足し合わせる ことに相当します。
この場合、積分結果が数値で表示されるため、具体的な意味が直感的には理解しにくいかもしれません。 しかし、この数値は範囲内で関数が取る面積 や体積 に相当します。
積分が正の値であることから、関数$ [ f(x, y) = x^2 + y^2 ] $が指定された範囲で正の値を取り、範囲内の領域の面積が正 であることを示しています。
グラフは、積分対象の関数$ [ f(x, y) = x^2 + y^2 ] $の3Dプロットを示しています。 この関数は放物面 であり、中心が原点で、$ [ x ] $と$ [ y ] $の値が大きくなるほど関数の値が増加します。 したがって、グラフは中心から外側に向かって放物線が立体的に広がる形状をしています。
この例での積分とグラフは、数学的な計算と視覚的な理解を結びつけるものであり、積分が関数の形状 や領域に対する面積や体積 の計算にどのように寄与するかを示しています。