忘却の微分方程式(24) 導関数、微分、MathematicaとMaxima

Joseph Halfmoon

前回が極限であったので、今回は導関数、微分であります。ようやくシリーズタイトルに近づきつつ(まだ先は長いけど)ある感じがします。通例、「分かり易い」Mathmaticaと「知っているべきことが多い」Maximaという感じ(個人の感想です)なのですが、今回は逆。Maximaの方がストレートな印象。ホントか?

※「忘却の微分方程式」投稿順 index はこちら

進捗テーマは以下のWolfram社Mathematicaのチュートリアルに「準拠」させていただいとります。

数学を学ぶ学生のための入門チュートリアル 導関数

学生でもないのに参照させていただいていてどうもすみません。

導関数(微分)を求めるのと、ディーワイ・ディーエックス的表記

今回は、Maximaの方が分かり易く感じたので、Maxima先行で行きます。まずは、簡単な微分(とは言え、自分じゃ微分の公式などとっくに忘却の彼方)。

MaxDiff0Maximaの場合、微分を行ってくれるのは diff() 関数です。シングルクォートで、式の評価を止められるので、%i2のように頭にシングルクオートをつければ、ディーワイ・ディーエックス的な(何と呼ぶべきなのだろう?)表現のままで止めておけます。

一方、Mathematicaの場合、たった一文字の関数 D[] が微分です。Mathematicaは N[] とか一文字好きですな。

WolfDiff0Mathematicaでも、ディーワイ・ディーエックス的な表現に留めたいとおもったので、HoldForm[]関数や、TraditionalForm[]関数を使ってみたのですが、上のように、偏微分(やっていることは間違ってないですけど)の表記になっています。どこかに表現を変える方法が書いてあるのか否や?でもま、内部でやっているとおりの表記なんでしょう。

さてMathematicaでは、シングルクォートを使っても微分可能です。数学の授業でおなじみのf ‘(x)の形。

WolfDiff0Bただ、下の例のように後から ‘ つけても微分してくれないみたいです。挙動がまだ分かりませんなあ。

当然、どちらも、N階の微分にも対応しとります。Maximaはこんな感じ。

MaxDiff1Mathematicaの場合は、微分する変数名と微分の階数をリストにして与えるスタイルです。こんな感じ。

WolfDiff1

自分で定義した関数の微分

Maximaの場合、関数定義は := であることを知っていれば、以下のように普通のプログラミング言語風です。そして、それをdiff()関数に渡せば微分してくれます。

MaxDiff2上記の結果では、微分結果の形が「気に入らなかった」ので、通分のためにxthru()関数を通し、さらに分母、分子を展開して整理するためにratsimp()関数にもお願いしてみています。

さて、Mathematicaの場合、以前にやりましたが、f(x)ではなく、f[x_] と左辺の変数名にアンダースコアを付加するお約束です。例によって丸カッコでなく、角カッコです。そして、関数名の後に シングルクオートをつければ微分してくれます。

WolfDiff2やはり通分のためにTogether[]関数を呼び出し、その後、分母のみの展開のためにExpandDenominator[]関数で展開しています。式の変形に使っている関数類についてのドキュメントは以下に

WOLFRAM ドキュメントセンター 有理関数

関数のお名前的には、Mathematicaの方が分かり易いと思います(個人の感想です。)ほぼほぼ同等の関数はMaximaにもそろっている筈なのですが、お名前だけ見ても作用がよく分からん感じです。慣れるしかない。

上記例で、MathematicaのD関数使わなかったのはちょっとクセがあるためです。以下のようにxで微分しろ、と指定しないと素の式をそのまま返してきます。

WolfDiff2B実際には、D[f[x],x]のようにxで微分しろ、と指定すればやってくれるみたい。

微分した結果のプロット

Maximaの場合、リストは[ ] で囲うので、wxplot2dに渡す第1引数に、元の関数と、導関数をリストとして並べて渡せば、普通にプロットしてくれます。こんな感じ。MaxDiff3
これに対してMathematicaでは以下のようにしました。Mathematicaのリストは中カッコの {} なので、基本同じスタイルではあるのです。しかし、ワザワザ関数を定義して シングルクオートで微分してみました。

WolfDiff3そうした理由は、以下のようにD[]関数でやってみたら、なぜか以下のようにエラーがでました。元の2次関数はプロットされるのに、導関数がプロットされなかったです。何が悪いのかな~。D関数の挙動が良く分からんなあ。

WolfDiff3Bまあ、一応、微分には入れた。。。

忘却の微分方程式(23) 極限(limit)、MathematicaとMaxima へ戻る

忘却の微分方程式(25) 積分、MathematicaとMaxima へ進む