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

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

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

 

準備

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

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

 

重積分を計算する方法

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

 

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

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

\[\frac{1}{3}\]

 

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

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

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

\[\frac{1}{4}\]

 

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

\[\frac{1}{6}\]

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

\[\frac{1}{6}\]

 

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

\[\int  _{D_R} 1 dx dy \]

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

\[2 \sqrt{R^{2} – x^{2}}\]

\[\pi R^{2}\]

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

 

ガウス積分の2乗を

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

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

\[\pi\]

 

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

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

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

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

\[\int_D f(x,y)dxdy = \int_I f(r\cos\theta, r \sin \theta) r dr d\theta\]

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

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

\[e^{- r^{2}}\]

そして積分すれば

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

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

\[\pi \]

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

ちなみに、ガウス積分の値自体は、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変数関数を積分する方法(多項式、指数対数、三角関数)