Julia(SymPy)で重積分を計算する方法

どうも、木村(@kimu3_slime)です。

今回は、Julia(SymPy)で重積分を計算する方法を紹介します。

 



準備

SymPyを使うので、持っていなければインストールしておきましょう。

準備として、以下のコードを実行しておきます。

 

重積分を計算する方法

今回の記事において、記号として利用する変数を用意しておきます。

 

「integrate(関数,範囲1,範囲2)」で重積分(逐次積分)が計算できます。

\[ \begin{aligned}- x^{2} – y^{2} + 1\end{aligned} \]

\[ \begin{aligned}\frac{1}{3}\end{aligned} \]

 

関数\(f\)の\(x\)方向の重心は

\[ \begin{aligned}\bar{x}:= \frac{\int _D xf(x,y) dx dy}{\int _D f(x,y) dx dy}\end{aligned} \]

と定義されます。これを関数として定義し、計算してみましょう。

\[ \begin{aligned}\frac{1}{4}\end{aligned} \]

 

積分する領域は正方形でなくても、範囲を数式として指定できれば計算できます。三角形領域\(D=\{(x,y) \mid 0 \leq y \leq x, 0 \leq x \leq 1\}\)における重積分を試してみましょう。

\[ \begin{aligned}\frac{1}{6}\end{aligned} \]

変数\(x\)について先に積分しても、結果は同じです(フビニの定理)。積分範囲の指定に気をつけましょう。

\[ \begin{aligned}\frac{1}{6}\end{aligned} \]

 

半径\(R\)の円盤の面積を

\[ \begin{aligned}\int  _{D_R} 1 dx dy \end{aligned} \]

を計算することによって求めてみましょう。

\[ \begin{aligned}2 \sqrt{R^{2} – x^{2}}\end{aligned} \]

\[ \begin{aligned}\pi R^{2}\end{aligned} \]

きちんと円の面積が求められています。

 

ガウス積分の2乗を

\[ \begin{aligned}\int_{-\infty} ^\infty \int_{-\infty} ^\infty e^{-(x^2+y^2)}dxdy\end{aligned} \]

として求めてみましょう。積分範囲が無限(広義積分)であっても、2つのオー「oo」で無限大を指定できます。

\[ \begin{aligned}\pi\end{aligned} \]

 

円盤領域で直交座標によって計算すると、適切な結果を表示してくれません。

\[ \begin{aligned}\sqrt{\pi} \int_{- R}^{R} e^{- x^{2}} \operatorname{erf}{\left(\sqrt{R^{2} – x^{2}} \right)}\, dx\end{aligned} \]

\(\operatorname{erf}\)は誤差関数(ガウス積分の一部分)であり、積分の結果が単純になっていません。

これは極座標変換して計算することで解決します。

\[ \begin{aligned}\int_D f(x,y)dxdy = \int_I f(r\cos\theta, r \sin \theta) r dr d\theta\end{aligned} \]

被積分関数の変数を「数式.subs(代入する変数と値)」によって置き換えましょう。

\[ \begin{aligned}e^{- x^{2} – y^{2}}\end{aligned} \]

\[ \begin{aligned}e^{- r^{2}}\end{aligned} \]

そして積分すれば

\[ \begin{aligned}2 \pi \left(\frac{1}{2} – \frac{e^{- R^{2}}}{2}\right)\end{aligned} \]

で、\(R\to \infty\)の極限を取れば

\[ \begin{aligned}\pi \end{aligned} \]

さきほどと同じ結果が得られました。

ちなみに、ガウス積分の値自体は、1変数の広義積分としてそのまま計算できます。

参考:Julia(SymPy)で1変数関数を積分する方法(多項式、指数対数、三角関数)

 

以上、Julia(SymPy)で重積分を計算する方法を紹介してきました。

1変数関数だけでなく多変数の積分も、積分範囲に気をつければ、簡単に計算できますね。

木村すらいむ(@kimu3_slime)でした。ではでは。

 

1から始める Juliaプログラミング
進藤 裕之(著), 佐藤 建太(著)
コロナ社 (2020-03-26T00:00:01Z)
5つ星のうち4.5
¥7,353 (コレクター商品)

 

こちらもおすすめ

重積分とは? 逐次積分による計算法(フビニの定理)

極座標変換による重積分の計算 ガウス積分を例に

Julia(SymPy)で1変数関数の極限を求める方法

Julia(SymPy)で1変数関数を積分する方法(多項式、指数対数、三角関数)