Julia(SymPy)で偏微分、勾配、発散、回転、合成関数の微分を計算する方法

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

今回は、Julia(SymPy)で偏微分、勾配、発散、回転、合成関数の微分を計算する方法を紹介します。

 

準備

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

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

 

偏微分、勾配

まず、記号として使う変数を用意しておきます。

 

\(f_1 (x,y)=x^2+y^2\)のような2変数関数を偏微分してみましょう。

「diff(関数,x)」で\(x\)に関する偏微分、「diff(関数,y)」で\(y\)に関する偏微分です。

\[x^{2} + y^{2}\]

\[2x\]

\[2y\]

さらに文字を増やすことで、2階微分や高階の微分を増やせます。

\[2\]

\[0\]

同じ変数に関する微分は、「diff(f1, x,2)」といったように表せます。

 

2変数関数の勾配は

\[\nabla f:=\mathrm{grad} f:=(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y})\]

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

\[\left[ \begin{array}{r}2 x\\2 y\end{array} \right]\]

 

2変数関数\(f\)の点\((a,b)\)における接平面は

\[g(x,y)=f_x(a,b)(x-a)+f_y(a,b)(y-b)+f(a,b)\]

と表されます。これを計算する関数を作ってみましょう。

関数の特定の値を得る、代入するには、「数式.subs([(x,a),(y,b)])」といったようにします。

\[2 x + 2 y – 2\]

 

 

ラプラシアン

\[\Delta u =\frac{\partial^2 u }{\partial x^2}+\frac{\partial^2 u }{\partial y^2}\]

も同様に定義できますね。

対数ポテンシャル\(\log{\left(\sqrt{x^{2} + y^{2}} \right)}\)のラプラシアンが0である(ラプラス方程式の解である)ことを確かめてみましょう。

\[\log{\left(\sqrt{x^{2} + y^{2}} \right)}\]

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

\[0\]

 

発散、回転

ベクトル値関数(ベクトル場)についても、その値の各成分について同様の偏微分計算ができます。

参考:Julia(SymPy)でベクトルの計算をする方法(内積・ノルム・距離・角度、外積)

\[\left[ \begin{array}{r}y\\x\end{array} \right]\]

\[0\]

\[1\]

 

平面のベクトル場を\(F(x,y)= (F_1(x,y) ,F_2(x,y))\)と表すことにします。その発散

\[\mathrm{div }F:=\frac{\partial F_1}{\partial x}+\frac{\partial F_2}{\partial y}\]

と回転

\[\mathrm {rot}F =-\frac{\partial F_1}{\partial y}+\frac{\partial F_2}{\partial x}\]

を計算する関数を作ってみましょう。

 

\[\left[ \begin{array}{r}- x\\- y\end{array} \right]\]

\[-2\]

\[0\]

吸い込みがあり、回転のないベクトル場です。

 

\[\left[ \begin{array}{r}y\\- x\end{array} \right]\]

\[0\]

\[-2\]

湧き出しや吸い込みがなく、回転があるベクトル場です。

 

合成関数の微分

\(g\)を2回微分可能な(一般的な)関数として、

\[u(x,t):= g(x+ct)\]

とするとき、\(u\)は波動方程式

\[\frac{\partial^2 u }{\partial t^2} = c^2 \frac{\partial^2 u }{\partial x^2}\]

を満たすことを確かめてみましょう。\(x,t \in \mathbb{R}\)で、\(c\)は定数です。

 

SymPyにおいて記号として扱える一般的な関数は、「sympy.Function(“g”)(x)」とします。

\[g(x)\]

\[g{\left(c t + x \right)}\]

 

\(u\)を\(t,x\)の関数と見て、2回偏微分をそれぞれ計算してみましょう。

\[c^{2} \left. \frac{d^{2}}{d \xi_{1}^{2}} g{\left(\xi_{1} \right)} \right|_{\substack{ \xi_{1}=c t + x }}\]

\[\left. \frac{d^{2}}{d \xi_{1}^{2}} g{\left(\xi_{1} \right)} \right|_{\substack{ \xi_{1}=c t + x }}\]

表示に出てくる\(\xi\)(クシー)は、\(g\)の変数です。\(\left. \frac{d^{2}}{d \xi_{1}^{2}} g{\left(\xi_{1} \right)} \right|_{\substack{ \xi_{1}=c t + x }}\)は、\(g\)を変数で2回(常)微分したあと、変数に\(ct+x\)を代入した値を意味しています。これはしばしば\(g^{\prime \prime}(ct+x)\)と略記されるものです。確かに、合成関数の微分がきちんと計算できていますね。

波動方程式を満たすかどうかチェックすると、

きちんと満たしていることがわかります。

 

以上、Julia(SymPy)で偏微分、勾配、発散、回転、合成関数の微分を計算する方法を紹介してきました。

偏微分の具体的な計算は、高階になってくると複雑なので、コンピュータで計算できると嬉しいですね。

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

 

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

 

こちらもおすすめ

2変数関数と偏微分、勾配:グラフ、接平面を描いてみよう

Julia(Plotly)でグリグリ動かせる3Dグラフを作る方法

円環領域におけるポテンシャル:2次元ラプラス方程式の解き方

Julia(SymPy)でベクトルの計算をする方法(内積・ノルム・距離・角度、外積)

ガウスの発散定理とは? 計算例、証明、電磁気学への応用

グリーンの定理の例による理解と証明、応用

Julia(PyPlot)で2次元のベクトル場・流線を描く方法

合成関数の偏微分、チェインルールとは:波動方程式を例に