微分方程式
Mathematica の関数DSolveを使って常微分方程式および偏微分方程式の解をシンボル的に求めることが可能である.
微分方程式を解くということは,基本的に未知な関数の取る形を見出すことである.Mathematica では,未知の関数は
のような式で表される.また,導関数は
や
のように表される.
組込み関数DSolveは,関数規則として求まる解をリスト形式で返す.ここで,解が割り当てられる関数がどのように表されているかで,その先の解の応用が左右されることがある.DSolveに
について解くように指定すると,DSolveは確かに
についての規則を返す.問題によっては,この割付規則で十分事が足りる.ただし,そのままでは,
の値,さらには,
の値さえも生成できない.このため,DSolveでは,
についてではなく
自体について解くように指定した方が都合よくなる.そうすれば,DSolveからは
を純関数として与える規則が求まる.純関数に関しては「純関数」を参照のこと.
| Out[1]= |  |
この規則は

だけに限って適用可能である.

や

には適用できない.
| Out[2]= |  |
一方,
DSolveを使って

について解くと,関数

を純関数とする規則が求まる.
| Out[3]= |  |
今度の規則は,

が微分の形で現れても適用可能である.
| Out[4]= |  |
| Out[5]= |  |
| DSolve[eqn,y[x],x] | 微分方程式を について解く |
| DSolve[eqn,y,x] | 微分方程式を関数 y について解く |
微分方程式の解法と2つの解の形
標準的な数学表記法では,微分方程式の解を構成するとき,よく「ダミー変数」を導入し解に現れる関数の引数を表すようにする.解を表すための数式だけが必要なら,ダミー変数を導入することは確かに便利である.しかし,解をその他の計算に適用したい場合には,ダミー変数を使わずに純関数として解を得た方が有利だろう.ただし,純関数は Mathematica では簡単に表せるが,それに直接相当する数学の標準的な記述は存在しないことに注意されたい.
| DSolve[{eqn1,eqn2,...},{y1,y2,...},x] |
| リスト形式で与えられた連立微分方程式を解く |
連立微分方程式の解法
| Out[6]= |  |
この式では,

に関して2つの異なる解が求まる.
| Out[7]= |  |
のような式を特別に追加することで,微分方程式に初期条件や境界条件が付加できる.

の条件を満たす解を求める.
| Out[8]= |  |
制約条件や境界条件なしで連立微分方程式を解くと,Mathematica では一般解が求められる.一般解には未定な「積分定数」がいくつか含まれる.各方程式の持つ導関数の階数に応じて1つずつ新たな定数が導入される.
定数にはデフォルトでC[n]というように名前が付けられる.添数 n は開始値が
で,DSolveが使われるたびにリセットされる.これは,オプションGeneratedParametersを特別に設定することでオーバーライドすることができる.関数をオプションに割り当てると,DSolveが使われるたびにそれが n の取る各添数値に適用され各定数の添数が決定される.
四次方程式の一般解を求める.解には未定係数が4つ必要になる.
| Out[9]= |  |
独立した初期条件や境界条件を1つ与えると必要になる未定係数が1つ減る.
| Out[10]= |  |
微分方程式の解を厳密な数式として求めることは非常に難しい.事実,標準的な数学関数で構成できるような式が存在するのはごく限られた数の方程式しかない.
最もよく研究されてきた微分方程式は,解法の対象になる関数とその導関数が線形な系である線形方程式である.
| Out[11]= |  |
非斉次方程式にすると,途端に複雑な解になってしまう.
| Out[12]= |  |
単一の線形微分方程式を解くとき,解法の対象にする関数の一次導関数だけを方程式が持つとき,積分をするだけで必ず解が求まることが分かっている.
しかし,微分方程式が2つ以上になるか,二次以上の導関数を持つと,その限りではなくなる.それでも,単純な二次の線形微分方程式によっては,「特殊関数」に示した各種特殊関数を使い解くことが可能である.事実,特殊関数の多くはそもそもこの種の方程式を解くために導入された,という歴史的な経緯を持っている.
エアリー(Airy)方程式を解く.解法にはエアリー関数が使われる.
| Out[13]= |  |
| Out[14]= |  |
マシュー(Mathieu)関数が使われ解が求まる.
| Out[15]= |  |
ここではルジャンドル(Legendre)関数が使われる.
| Out[16]= |  |
二次の線形方程式の中には,初等関数だけで解けるものもある.
| Out[17]= |  |
二次より高次の線形微分方程式になると,ごく単純な形を持ったものでも解法に必要な関数は非常に難解になる.三次の場合,方程式によってはマイヤー(Meijer)のG関数MeijerGが使えるときがある.四次以上の高次方程式には,標準的な数学関数はごくまれなケースを除き全く使えない.
三次の線形微分方程式を解く.一般化された超幾何関数が使われ解が求まる.
| Out[18]= |  |
この方程式にはさらに一般化されたマイヤーのG関数が必要になる.
| Out[19]= |  |
非線形な微分方程式だと,限られた特殊ケースにおいてだけ標準的な数学関数を使って解くことが可能である.ただし,DSolveには汎用的な手続きが使われているので,標準公式集に解が載っているような非線形微分方程式であればほとんど解けるようになっている.
一次非線形微分方程式を解いてみる.

自体が式になければ割合簡単に解が求まる.
| Out[20]= |  |
リッカティ(Riccati)方程式になると,解法は非常に複雑なものになってしまう.
| Out[21]= |  |
それでも,このベルヌーイ(Bernoulli)の方程式は割合簡単に解ける.
| Out[22]= |  |

番目のベルヌーイの方程式は,一般に

個の明示的な解を持つ.
| Out[23]= |  |
このアーベル(Abel)方程式も解けるが,解は陰的な形でしか求まらない.
| Out[24]= |  |
実際に区分関数を使う微分方程式を用意すると便利である.そのような式に対してはDSolveを使い,記号的な解を得ることができる.
| Out[25]= |  |
| Out[26]= |  |
常微分方程式以上の場合は,微分方程式と代数方程式を混合したものを含む「微分代数方程式」と考えることができる.
| Out[27]= |  |
| DSolve[eqn,y[x1,x2,...],{x1,x2,...}] |
| 偏微分方程式を について解く |
| DSolve[eqn,y,{x1,x2,...}] | 偏微分方程式を関数 y について解く |
偏微分方程式を解く
DSolveは一変数の常微分方程式だけでなく,2個以上の変数が現れる偏微分方程式も扱えるようになっている.
| Out[28]= |  |
| Out[29]= |  |
偏微分方程式の数学理論は常微分のそれと比べてかなり複雑である.そのひとつの理由は,常微分方程式の一般解は単に定数しか含まないのに対し,偏微分方程式の一般解は,見付かったとしても任意関数を含んだ形となることである.実際
変数の偏微分方程式の一般解には
変数の任意関数が含まれる.DSolveはデフォルトでこのような関数をC[n]で表す.
| Out[30]= |  |
| Out[31]= |  |
| Out[32]= |  |
| Out[33]= |  |
常微分方程式には解の存在が保証されており,初期条件あるいは境界条件を与えることは,一般解に含まれる積分定数の値を決定することに過ぎない.しかし偏微分方程式に関してはそうではない.実際,線形偏微分方程式かその他のまれな特別の型の偏微分方程式しかそのような一般解を持たない.
他の偏微分方程式は初期条件あるいは境界条件が与えられたときのみ解くことができる.そしてほとんどの場合,解が標準的な数学関数で表せることはない.

とその微分が線形に現れるとき,一般解が存在する.
| Out[34]= |  |
| Out[35]= |  |
| Out[36]= |  |