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

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

今回は、Julia(SymPy)で1変数関数を微分する方法を紹介します。数値微分ではなく、数式処理として記号的に微分できます。

 

準備

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

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

 

1変数関数の微分

まず、\(x\)を数式処理用の変数、記号として用意しましょう。

 

多項式

2次関数

\[f(x)=3x^2+2x+1\]

を微分してみます。「数式.diff(変数)」で微分できます。

\[6 x + 2\]

きちんと微分できていますね。「数式.diff(変数,微分回数)」で2階微分、3階微分を計算できます。

\[6\]

\[0\]

 

平方根、べき乗関数

同じ方法で微分できるので、どんどん微分していきましょう。

\[\sqrt{x}\]

\[\frac{1}{2\sqrt{x}}\]

 

\[x^{\frac{2}{3}}\]

分数のべき乗をそのまま書くと、

\[x^{0.666666666666667}\]

\[\frac{0.666666666666667}{x^{0.333333333333333}}\]

と数値として扱われてしまい、微分の計算自体は正確であるものの、きれいではありません。分数を数式処理的に扱うために、「Rational(分子,分母)」を使いましょう。

\[x^{\frac{2}{3}}\]

\[\frac{2}{3 \sqrt[3]{x}}\]

うまく計算できました。

 

負のべき乗、有理関数

負のべき乗も、\(x=0\)で定義されていないことを除いて、きちんと微分してくれます。

\[\frac{1}{x}\]

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

\[\frac{2}{x^{3}}\]

 

有理関数(多項式の分数関数)も、問題なく微分できます。

\[\frac{2 x + 1}{\left(x – 2\right) \left(x – 1\right) \left(x + 1\right)}\]

\[\frac{2}{\left(x – 2\right) \left(x – 1\right) \left(x + 1\right)} – \frac{2 x + 1}{\left(x – 2\right) \left(x – 1\right) \left(x + 1\right)^{2}}\\ – \frac{2 x + 1}{\left(x – 2\right) \left(x – 1\right)^{2} \left(x + 1\right)} – \frac{2 x + 1}{\left(x – 2\right)^{2} \left(x – 1\right) \left(x + 1\right)}\]

 

「solve」によって微分が0となる点を求めると、

\[\left[ \begin{array}{r}\frac{1}{12} + \left(- \frac{1}{2} – \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{935}}{48} + \frac{1153}{1728}} + \frac{49}{144 \left(- \frac{1}{2} – \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{935}}{48} + \frac{1153}{1728}}}\\\frac{1}{12} + \frac{49}{144 \left(- \frac{1}{2} + \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{935}}{48} + \frac{1153}{1728}}} + \left(- \frac{1}{2} + \frac{\sqrt{3} i}{2}\right) \sqrt[3]{\frac{\sqrt{935}}{48} + \frac{1153}{1728}}\\\frac{1}{12} + \frac{49}{144 \sqrt[3]{\frac{\sqrt{935}}{48} + \frac{1153}{1728}}} + \sqrt[3]{\frac{\sqrt{935}}{48} + \frac{1153}{1728}}\end{array} \right]\]

と、複雑ですが、2つの虚数解と1つの実数解が得られます。

関数のグラフを描く方法と合わせると、

確かに微分が0となる点が求められていることがわかります。

 

絶対値

絶対値関数\(|x|\)は、そのまま計算すると少し複雑な形が出てきます。

\[\frac{\left(\operatorname{re}{\left(x\right)} \frac{d}{d x} \operatorname{re}{\left(x\right)} + \operatorname{im}{\left(x\right)} \frac{d}{d x} \operatorname{im}{\left(x\right)}\right) \operatorname{sign}{\left(x \right)}}{x}\]

これは変数\(x\)が、デフォルトでは複素数として扱われているからです。変数が実数であると宣言すれば、

\[\operatorname{sign}{\left(x \right)}\]

と符号関数が返ってきます。\(x\)が正なら\(1\)、負ならば\(-1\)を返します。

この式は、\(x=0\)では正しくない結果を返していることに注意しましょう。\(x=0\)で\(|x|\)は微分不可能です。SymPyは、\(x \neq 0\)で成り立つ微分を計算しています。

 

指数関数、対数関数

オイラー数\(e\)を底とする指数関数は「exp(x)」、(自然)対数関数は「log(x)」です。

\[e^{x}\]

\[e^{x}\]

\[\log{\left(x \right)}\]

\[\frac{1}{x}\]

 

底を変えても、きちんと微分は計算されます。

\[10^{x}\]

\[10^{x} \log{\left(10 \right)}\]

\[\frac{\log{\left(x \right)}}{\log{\left(10 \right)}}\]

\[\frac{1}{x \log{\left(10 \right)}}\]

何も底が書かれていない\(\log\)は、ここでは\(\log_e\)であることに注意しましょう。

参考:指数関数の微分の公式の覚え方、導出:指数関数の定義

 

三角関数、逆三角関数

三角関数、逆三角関数の微分もきちんとできます。

\[\cos{\left(x \right)}\]

\[- \sin{\left(x \right)}\]

\[\tan^{2}{\left(x \right)} + 1\]

\[\frac{1}{\sqrt{1 – x^{2}}}\]

\[- \frac{1}{\sqrt{1 – x^{2}}}\]

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

 

双曲線関数、逆双曲線関数

双曲線関数、逆双曲線関数についても同様です。

\[\cosh{\left(x \right)}\]

\[\sinh{\left(x \right)}\]

\[1 – \tanh^{2}{\left(x \right)}\]

\[\frac{1}{\sqrt{x^{2} + 1}}\]

\[\frac{1}{\sqrt{x^{2} – 1}}\]

\[\frac{1}{1 – x^{2}}\]

 

以上、Julia(SymPy)で1変数関数を微分する方法を紹介してきました。

数値計算ではなく記号的に微分してくれるので、関数電卓の代わりに気楽に使えて便利ですね。

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

 

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

 

こちらもおすすめ

.Julia(SymPy)で有理関数を部分分数分解、通分する方法

Julia(SymPy)で多項式の展開・因数分解、方程式を解く方法

Juliaで1変数関数のグラフを描く方法(多項式、指数対数、三角関数)