2変数の定積分

2変数の定積分

例題として、2変数の定積分を考えてみましょう。

以下の関数を考えます:

$$
f(x, y) = x^2 + y^2
$$

そして、この関数を$ [x \in [-2, 2], y \in [-2, 2]] $の範囲で積分してみます。

Pythonで積分を計算し、結果をグラフ化するためには、SciPymatplotlibを使用します。

以下がそのコード例です:

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 np
from scipy import integrate
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 積分する関数
def 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 np
from scipy import integrate
import matplotlib.pyplot as plt
from 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
print("積分の結果:", 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 ] $の値が大きくなるほど関数の値が増加します。
したがって、グラフは中心から外側に向かって放物線が立体的に広がる形状をしています。

この例での積分とグラフは、数学的な計算と視覚的な理解を結びつけるものであり、積分が関数の形状や領域に対する面積や体積の計算にどのように寄与するかを示しています。