2017年12月10日日曜日

西川式微分方程式1章

問題提起

西川式微分方程式では、微分方程式の学習で生じる次の3つの疑問を考察します。
(疑問1)一般解というのはどういう理由で導入されるのか?
(疑問2)一般解以外の解は存在しないのか?
(疑問3)一般解をどのように選択すればよいのか?
これらの疑問を解消しない限り、解法を暗記するという学習法から脱却できません。きちんとした理解に達しない限り、シュレディンガーが水素原子の電子軌導の計算に球面調和関数やルジャンドル陪関数を用いた理由は永遠に理解できないでしょう。それは20世紀半ばの科学技術に僕たちは追いつけないというみじめな敗北を意味します。それでよいわけないですよね。

簡単な例からスタートし、僕らが微分方程式に対して抱いている漠然とした疑問を、具体的に検証したいと思います。このテキストの目的は、微分方程式の解法の意味を理解するものであって、微分方程式の解法をノウハウとして学ぶためのものではありません。僕たちが落ちこぼれた原因を解消するのが目的です。ですので、まずは、落ちこぼれた原因を整理し、問題点を共有したいと思います。そのために、普通は検討しないような別解を繰り返し紹介します。


例題1

\begin{equation}
\frac{d^2}{dx^2}  f(x)=-a^2 f(x)
\end{equation}

解法1-1(通常の教科書的な解法)

一般解 を$f(x)=C \sin⁡{\omega x}$として、代入すると、
\begin{equation}
\frac{d^2}{dx^2}  f(x)=C \frac{d^2}{dx^2} \sin{\omega x} =-C \omega^2  \sin{\omega⁡ x}=-a^2 C \sin{\omega⁡ x}
\end{equation}
$-\omega^2=-a^2$となり、
$\omega =\pm a$。よって、
\begin{equation}
f(x)=\pm C \sin{⁡ax}
\end{equation}

あとは境界条件によって係数$C$を決定します。係数$C$だけを残した形まで決定された解を基本解 と呼びます。$C$の前に$\pm$がありますが、$C$の符号の選択の問題ととらえれば、$\pm$は無視して構いません。
ま、これでも良いんですが、最初に$f(x)=C \sin{⁡\omega x}$と置く理由が全くわかりません。
例えば$f(x)=C \cos{⁡\omega x}$でも良いんじゃないか、と思うわけです。というわけで、次は、$f(x)=C \cos{⁡\omega x}$を一般解として採用してみましょう。

解法1-2(cosineを使った解法)

一般解を$f(x)=C \cos{⁡\omega x}$として、代入すると、
\begin{equation}
\frac{d^2}{dx^2} f(x)=C \frac{d^2}{dx^2} \cos{\omega ⁡x}=-C \omega^2  \cos{\omega ⁡x}=-a^2 C \cos{\omega ⁡x}
\end{equation}
$-\omega^2=-a^2$となり、
$\omega=\pm a$。よって、
\begin{equation}
f(x)=\pm C \cos{ax}
\end{equation}

で、同じように解けました。この解法は、普通の教科書でも紹介されているかもしれません。解法1-1とは、明らかに解が違います。どちらが解として正しいのでしょう?

結論を言えば、どちらも解である、ということです。通常は境界条件が設定されていて、Cを決めたり、sineかcosineかを選択します。例えば、境界条件として、$f(x)=0$というのがあれば、$f(x)=\pm C \cos{ax}$は解になることができず、$f(x)=\pm C \sin{ax}$と定まります。このような結果オーライ的な説明は、数学としては違和感があります。ただ、この2つの解で万事うまくゆくなら、それでよいのかもしれません。しかしながら、解法はこれだけではありません。

解法1-3

一般解を$f(x)=Ce^{i\omega x}$として、代入すると 、
\begin{equation}
\frac{d^2}{dx^2}  f(x)=C \frac{d^2}{dx^2} e^{i\omega x}=-\omega^2 C e^{i\omega x}=-a^2 C e^{i\omega x}
\end{equation}

$-\omega^2=-a^2$となり、
$\omega=\pm a$
よって、
\begin{equation}
f(x)=C e^{\pm iax}
\end{equation}

またまた別の解が出てきてしまいました。しかも今度は、$\pm$という記号があって、この$\pm$は係数の符号として片付けることができません。ですので、解が2つ出てきたことになります。先ほどと同様に$f(0)=1$が境界条件の場合を検討すると、$f(0)=C , C=1$となります。ただし、$f(x)=C e^{- iax}$か、$f(x)=C e^{ iax}$か決まりませんね。どちらも解として採用して良さそうですが、解法1-2の$f(x)=\cos{⁡ax}$とは違いますね。

解法1-1、1-2、1-3を総括すると、異なる一般解を用いて、同じ方程式を解くと、異なる解が得られるということになります。ですから、一般解はきちんと選択されなければならないし、天下り式に一般解を受け入れてうまく解けたとしても、他の一般解における別の解の存在を検討しなければ、ちゃんと解けたことにならない、ということがわかります。まさしく、(疑問2:般解以外の解は存在しないのか?)は当然であり、天下り式の一般解には納得いくはずもなく、他の解の可能性を排除できていないという気持ち悪さを感じないとおかしい、ということです。後でもう少し紹介しますが、この例題1に対して利用できる一般解はまだまだ存在します。その話をする前に、別パターンの例題を紹介します。

例題2

\begin{equation}
\frac{d^2}{dx^2}  f(x)=a^2 f(x)
\end{equation}


例題1と似ていますが、右辺のマイナスが取れています。それが故に、ちょっと解法が異なってきます。

解法2-1(教科書的な解法)

一般解を$f(x)=C e^{-\tau x}$として、代入すると、
\begin{equation}
\frac{d^2}{dx^2}  f(x)=C \frac{d^2}{dx^2}  e^{-\tau x}=\tau^2 C e^{-\tau x}=a^2 C e^{-\tau x}
\end{equation}
$\tau^2=a^2$となり、
$\tau=\pm a$なので、
\begin{equation}
f(x)=C e^{\pm ax}
\end{equation}

今度は指数関数を代入することで、指数関数の解が得られました。よくある境界条件は、$f(0)=1$かつ$f(\infty)=0$で、$f(x)=e^{-ax}$と決定されます。
普通の教科書では、これで終わりですが、例によって、別の一般解を使ってみます。

解法2-2

一般解を$f(x)=Ce^{i \omega x}$として、代入すると、
\begin{equation}
\frac{d^2}{dx^2}  f(x)=C \frac{d^2}{dx^2}  e^{i\omega x}=-\omega ^2 Ce^{i\omega x}=a^2 Ce^{i\omega x}
\end{equation}
 $-\omega ^2=a^2$となり、
$\omega =\pm ia$なので、
\begin{equation}
f(x)=Ce^{\mp ax}
\end{equation}

解法1-3と同じ一般解を用いました。普通は、こんな一般解は使いませんが、それでもこのようにきちんと解けます。しかも今度は、解法2-1と同じ解が得られました。(疑問3:一般解をどのように選択すればよいのか?)は結構適当で良い、という可能性が出てきました。これができるなら、逆も可能かもしれません。ということで、解法1-1と同じ一般解でトライしてみます。

解法2-3

一般解を$f(x)=C \sin{\omega x}$として、代入すると、
\begin{equation}
\frac{d^2}{dx^2}   f(x)=C \frac{d^2}{dx^2}  \sin{\omega⁡ x}=-C\omega⁡^2  \sin⁡{\omega⁡ x}=a^2 C \sin{\omega⁡ x}
\end{equation}

$-\omega⁡ ^2=a^2$となり、
$\omega⁡ =\pm ia$。よって、
\begin{equation}
f(x)=\pm C \sin{⁡iax}
\end{equation}

sineの中に、虚数単位があるというわけのわからない関数が出てきました。この関数は計算できないことはないのですが、使っているのを見たことありません。ひらめきによって、$\cos{⁡iax}$を考えて、オイラーの公式を適用してみます。
\begin{equation}
\cos{⁡iax}+i \sin{⁡iax}=e^{ax}\label{Euler}
\end{equation}

となり、$\sin{⁡iax}$は通常の指数関数をオイラーの公式でむりやり展開したときの虚数成分であることがわかります 。さらに、$\cos{⁡iax}-i \sin{⁡iax}=e^{-ax}$なので、これとの差を考えると、$\sin{⁡iax}=\frac{1}{i}\frac{e^{ax}-e^{-1x}}{2}$であり、これはすなわち、$-i\sinh{ax}$であるとわかります。
($\ref{Euler}$)式の係数に純虚数を考えれば、解法2-1にあるような指数関数と整合していないことはない、ということです。

では逆に、解法2-1で用いた一般解で例題1を解いてみましょう。

解法1-4

一般解を$f(x)=Ce^{-\tau x}$として、代入すると、
\begin{equation}
\frac{d^2}{dx^2} f(x)=C \frac{d^2}{dx^2} e^{-\tau x}= C \tau^2 e^{-\tau x}=-a^2 Ce^{-\tau x}
\end{equation}
$\tau^2=-a^2$となり、
$\tau=\pm a$。
よって、
\begin{equation}
f(x)=Ce^{\pm ax}
\end{equation}

となり、解法1-3と同じ解がでてきました。

ここから、一般解というのは、かなり緩い制約しかない、ということがわかります。ただ、使用する一般解によって、解に違いが出てきていますので、どの一般解を使うのか、ということが問題になってきます。
次は、例題1についてこれまで出てきた解を統一的に理解するということを試みますが、その前に、もう一つだけ別の解法を考えます。

解法1-5

一般解を$f(x)=C \sinh⁡{bx}$とする。$\sinh{⁡bx}=\frac{e^{bx}-e^{-bx}}{2}$なので、
\begin{equation}
\frac{d^2}{dx^2} f(x)=C \frac{d^2}{dx^2} \frac{e^{bx}-e^{-bx}}{2}=b^2 C \frac{e^{bx}-e^{-bx}}{2}=-a^2 C \frac{e^{bx}-e^{-bx}}{2}
\end{equation}
$b^2=-a^2$となり、
$b=\pm ia$。
よって、
\begin{equation}
f(x)=C \frac{e^{\pm iax}-e^{\mp iax}}{2}=-Ci \sin{⁡\pm ax}
\end{equation}
最後は、オイラーの公式を使って、sineに書き直しました。Cに純虚数を考えれば、解法1-1と同じです。一般解として$f(x)=C \cosh{⁡bx}$から出発すると、$f(x)=C \cos{⁡ax}$が得られます。

こうしてみると、一般解にはいろんなものが使えるということがわかります。でも、どんなものでOKかというとそういうわけではありません。例えば、$C\tan{\omega x}$とか$ C\log{\tau x}$を一般解として使ってみましょう。

解法1-6

例題1において、一般解を$f(x)=C\tan{\omega x}$とする。
\begin{equation}
\frac{d}{dx}f(x)=C\frac{d}{dx}\tan{\omega x}=C\omega\frac{1}{\cos^2{\omega x}}
\end{equation}
\begin{equation}
\frac{d^2}{{dx}^2}f(x)=C\omega\frac{d}{dx}\frac{1}{\cos^2{\omega x}}=C\omega^2\frac{-2\sin{\omega x}}{\cos^3{\omega x}}=-a^2C\frac{\sin{\omega x}}{\cos{\omega x}}
\end{equation}
なので、$\omega^2\frac{2}{\cos^2{\omega x}}=a^2$。
左辺に$x$が残っているので、微分方程式を常に満たす関数は、$f(x)=C\tan{\omega x}$の形式では表せない。

解法1-7

例題1において、一般解を$f(x)=\ C\log{\tau x}$とする。
\begin{equation}
\frac{d}{dx}f(x)=C\frac{d}{dx}\ \log{\tau x}=C\tau\frac{1}{\tau x}
\end{equation}
\begin{equation}
\frac{d^2}{{dx}^2}f(x)=C\tau\frac{d}{dx}\frac{1}{\tau x}=C\frac{-1}{x^2}=-a^2C\log{\tau x}
\end{equation}
なので、$\frac{1}{x^2\log{\tau x}}=a^2$。
左辺に$x$が残っているので、微分方程式を常に満たす関数は、$f(x)=\ C\log{\tau x}$の形式では表せない。

このように、多くの関数が一般解として使える一方、一般解に使えない関数があることが確認できました。一般解として使える関数にはどのような条件があるのでしょう。また、微分方程式の解として様々なものが得られました。実用上は与えられた境界条件を満たす解を選択するわけですが、結果オーライ・ご都合主義な感じがします。本当に解けているのか不安になります。

解をまとめる

さて、解法1-1~5において、$C \sin{⁡ax}$、$C \cos⁡{ax}$、$Ce^{\pm iax}$という解が得られました。さらに、$C \sin{⁡ax}=\frac{C}{i}  \frac{e^{iax}-e^{-iax}}{2}$であることがわかっています。つまり、例題1-5の解は例題1-3の解($Ce^{\pm iax}$)の和であって、係数Cが虚数であるということです。
同様にこれまでに得られたすべての解が$Ce^{±iax}$の和として表すことができることに気づくかもしません。これらから、係数Cとして複素数を許し、$C_1 e^{iax}+C_2 e^{-iax}$とすれば、これまで出てきた解をすべて包括するような気がします。しかしながら、$C_1 e^{iax}$と$C_2 e^{-iax}$の足し算が許されるかどうか、は自明ではないような気がします。また、係数$C$が複素数でも大丈夫かというのは確かめておかないといけない気がします。まず、簡単な後者からやっつけておきましょう。

$C=c+id$とすると、$Ce^iax=ce^iax+id e^iax$です。これを元々の微分方程式に代入します。
\begin{equation}
\frac{d^2}{dx^2}  f(x)=\frac{d^2}{dx^2}  \{ce^iax+id e^iax \}\\
=-ca^2 e^iax-ida^2 e^iax=-a^2 (ce^iax+id e^iax )=-a^2 f(x)
\end{equation}
となり、例題1の微分方程式を自動的に満たします。

次に、個別の解の和が解になれるかどうかを調べます。

$f(x)=C_1 e^iax+C_2 e^{-iax}$とすれば、
\begin{equation}
\frac{d^2}{dx^2}  f(x)=\frac{d^2}{dx^2} \{C_1 e^iax+C_2  e^{-iax} \}=-C_1 a^2 e^iax-C_2 a^2 e^(-iax)=-a^2 (C_1 e^iax+C_2  e^{-iax} )=-a^2 f(x)
\end{equation}
となり、例題1の微分方程式を自動的に満たします。ですから、$f(x)=C_1 e^{iax}+C_2 e^{-iax}$とすれば、これまで出てきた解をすべて包括することができます。だから一般解としては、$f(x)=C_1 e^{i\omega x}+C_2 e^{-i\omega x}$を使うべきかもしれないという予想がたちます。
ここに至り、(疑問2:一般解以外の解は存在しないのか?)はますます深刻です。調べれば調べるほど、似ているけれどちょっと違う解が見つかるということは、例題1を$f(x)=C \sin{\omega x}$として解くのでは不足であると結論されます。そして、すべての解を調べつくしているのかどうか疑わしくなります。さらに、(疑問3:一般解をどのように選択すればよいのか?)に対する演繹的な答えは絶望的に見えてきます。

一次結合と線形微分方程式の説明

例題1-3や例題1-4では、$f\left(x\right)Ce^{\pm i a x}$が解として得られており、$f\left(x\right)=C_1e^{iax}+C_2e^{-iax}$に近いですが、得られた二つの解の和が解として成立するかどうかについて、明示的な指針はありません。しかしながら、線形の微分方程式の場合、すべての基本解の一次結合も解として有効である、というのが常識とされています。

こういう言い方は因果関係がおかしくて、正しくは、基本解の一次結合が解として有効であるような微分方程式を線形微分方程式と呼ぶのです 。一次結合というのは、線形和とも呼ばれ、二つ以上の数式やベクトルに対して定義されます。例えば、数式$f_1\left(x\right)とf_2\left(x\right)$があったとして、一次結合というのは、係数$C_1$と$C_2$を使って、$C_1f_1\left(x\right)+C_2f_2\left(x\right)$のようにあらわされた数式のことを言います。

今、基本解として、$f_1\left(x\right)とf_2\left(x\right)$があったとして、例題1の微分方程式$\frac{d^2}{{dx}^2}f\left(x\right)=-a^2f\left(x\right)$をどちらも満たすとします。であるなら、
\begin{equation}
\frac{d^2}{{dx}^2}f_1\left(x\right)=-a^2f_1\left(x\right)かつ\frac{d^2}{{dx}^2}f_2\left(x\right)=-a^2f_2\left(x\right)
\end{equation}
が成立します。それぞれ係数$C_1$と$C_2$をかけてやって、
\begin{equation}\frac{d^2}{{dx}^2}C_1f_1\left(x\right)=-a^2C_1f_1\left(x\right)\end{equation}
\begin{equation}
\frac{d^2}{{dx}^2}C_2f_2\left(x\right)=-a^2{C_2f}_2\left(x\right)
\end{equation}
が成立するのは、当たり前だし、二つの式を足してやって、
\begin{equation}
\frac{d^2}{{dx}^2}C_1f_1\left(x\right)+\frac{d^2}{{dx}^2}C_2f_2\left(x\right)=-a^2C_1f_1\left(x\right)-a^2{C_2f}_2\left(x\right)
\end{equation}
が成立するのも当たり前です。少し式を整理すれば、
\begin{equation}
\frac{d^2}{{dx}^2}\left\{C_1f_1\left(x\right)+C_2f_2\left(x\right)\right\}=-a^2\left\{C_1f_1\left(x\right)+{C_2f}_2\left(x\right)\right\}
\end{equation}
つまり、$C_1 f_1\left(x\right)+C_2 f_2\left(x\right)が\frac{d^2}{{dx}^2}f\left(x\right)=-a^2f\left(x\right)$を満たしているという式になります。すべての微分方程式において、このように基本解の一次結合(線形和)が解となるわけではありません。線形和が解になるかどうかは、その性質は元の微分方程式の形で決まっており、基本解の一次結合が自動的に解となるような微分方程式を線形微分方程式と呼びます。
逆に、微分方程式が線形かどうかは、2つの基本解を仮定してやって、微分方程式に代入し、和を計算してやればわかります。例えば、$\frac{d}{dx}f\left(x\right)={f\left(x\right)}^2$を考えてやると、
\begin{equation}
\frac{d}{dx}f_1\left(x\right)={f_1\left(x\right)}^2
\end{equation}
\begin{equation}
\frac{d}{dx}f_2\left(x\right)={f_2\left(x\right)}^2
\end{equation}
が成り立っているとして、両辺の和を取ります。
\begin{equation}
\frac{d}{dx}f_1\left(x\right)+\frac{d}{dx}f_2\left(x\right)={f_1\left(x\right)}^2+{f_2\left(x\right)}^2
\end{equation}
となります。右辺はどうあがいても、$f_1\left(x\right)+f_2\left(x\right)$だけで表すことができません。ですので、$\frac{d}{dx}f\left(x\right)={f\left(x\right)}^2$は線形微分方程式ではない=非線形微分方程式である、と結論できます。ある微分方程式が線形か非線形かはパッと見ではわからないことがあります。つまり、式を見ただけで線形・非線形を判断するのは危険ということです。

非同次の線形微分方程式

線形微分方程式では、基本解が複数得られた場合、基本解の線形和がすべて解の候補になります。線形和の場合、それぞれの項に係数を付けることができるので、最終的な解を求めるときは、係数を決定する、という作業が必要になります。一般に、線形和の係数を決定するという作業は、境界条件を参考にしながら行います。

これまで議論してきた微分方程式において、$f(x)=0$は常に成り立つことはすぐにわかります。だから、$f(x)=0$は自明な解として問題にしませんでした。しかしながら、世の中には、$f(x)=0$が解になり得ない微分方程式も存在します。$f(x)=0$が解になるかどうかによって解法が少し違ってくるので、それぞれに名前を付けて区別します。$f(x)=0$が解になるタイプの微分方程式を「同次」と呼び、$f(x)=0$が解にならないタイプの微分方程式を「非同次」と呼びます。当然、「同次」より「非同次」の方が難しくなります。

前節で出てきた線形/非線形の定義によれば、ほとんどの「非同次」な微分方程式は「非線形」ということになってしまいますが、「線形」の定義をすこし拡張し、非同次の線形微分方程式の範囲をすこし増やすのが通常です。それは非同次微分方程式の解法に由来します。まず、次のような非同次な微分方程式を考えます。
\begin{equation}
\sum_{n=0}^{N} k_n \frac{d^n}{dx^n} f(x) =q(x)
\end{equation}
のように、$f(x)$に関する部分とそれ以外に式を分けます。左辺は十分に一般化されていませんが、通常はこの程度の一般化で十分なはずです。この微分方程式の解を複数考えて、足し合わせると、左辺が$2q(x)$になるので、元の方程式を満たさないことがわかります。つまり、前節の定義では「非線形」です。
しかしながら、右辺を0として、
\begin{equation}
\sum_{n=0}^{N} k_n \frac{d^n}{dx^n} f(x)=0
\end{equation}
と置くと、これは「線形」です。微分方程式において、$f(x)$に関する項とそうでない項をそれぞれ左右にまとめあげて、$f(x)$に関する項を0とした微分方程式が線形であるとき、特別に「非同次線形微分方程式」と呼びます。というのも、非同次線形微分方程式は線形微分方程式の応用で解くことができるからです。

非同次線形微分方程式を解く場合には、まず、無理やりにでも1個だけ解を見つけます。例えば、$q(x)$が多項式だとしめたものです。
微分の次数の上限は$N$であることを鑑み$f(x)=\sum_{n=0}^{N} a_n x^n$と置くと、ちょっとした計算で左辺が次のように変形できます。
\begin{equation}
\sum_{m=0}^{N} k_m \sum_{n=m}^{N} a_n \frac{n!}{(n-m)!} x^{n-m}
\end{equation}
これと$q(x)$とを比較すれば、$a_n$を決定できます。こうして得られた解を$f_0(x)$とします。この$f_0(x)$は言わば「割り算のあまり」のようなものです。
非同次線形微分方程式の線形部分の解は
\begin{equation}
\sum_{n=0}^{N} k_n \frac{d^n}{dx^n} f(x)=0\end{equation}
を満たすので、いくら足しても方程式は変わりません。だから、余分に$f_0(x)$を足してやると自動的に$\sum_{n=0}^{N} k_n \frac{d^n}{dx^n} f(x)=q(x)$を満たすようになります。すなわち、大部分の解は線形部分の解で、それらに「あまり」を足してあげるわけです。

例題3

具体的に非同次線形微分方程式を提示し、調べてみましょう。
\begin{equation}
\frac{d}{dx}f\left(x\right)-5f\left(x\right)+3x=0
\end{equation}
今までの例題に対して余計な3xがついている、というパターンです。これがなければ、これまでと同様、適当に一般解を選べば、問題なく解けます。

解法3-1

直感によっ$f(x)$が多項式であると考えて、せいぜい2次くらいだろうということで、$f\left(x\right)=ax^2+bx+c$とする。これを元の微分方程式に代入してみる。
\begin{equation}
\frac{d}{dx}f\left(x\right)-5f\left(x\right)+3x=2ax+b-5ax^2-5bx-5c+3x=0
\end{equation}
すべての$x$について成立しなければならないので、
$-5a=0,\ 2a-5b+3=0,\ b-5c=0$となる。すなわち、
$a=0,\ b=3/5,\ 5c=3/25$で、$f\left(x\right)=\frac{3}{5}x+\frac{3}{25}$は一つの解である。確かにこれは、例題3の微分方程式を満たす。これを特別解と呼ぶ。
一方、これまでの解法と同様に$\frac{d}{dx}f\left(x\right)-5f\left(x\right)=0$には他の解がある。もし、$\frac{d}{dx}f\left(x\right)-5f\left(x\right)=0$が成り立つ解があれば、これを先の特殊解に足したものも解として使える。なので、$\frac{d}{dx}f\left(x\right)-5f\left(x\right)=0$を解くことにしよう。
一般解を$f\left(x\right)=Ce^{\tau x}$として、代入すると、
\begin{equation}
\frac{d}{dx}f\left(x\right)-5f\left(x\right)=\tau Ce^{\tau x}-5Ce^{\tau x}=\left(\tau-5\right)\ Ce^{\tau x}=0
\end{equation}
$\tau=5$となり、
よって、
\begin{equation}f\left(x\right)=Ce^{5x}\end{equation}
このようにして求めた解は、同次解と呼ばれている。
同次解と特殊解の和が解となるので、最終的に、
\begin{equation}
f\left(x\right)=Ce^{5x}+\frac{3}{5}x+\frac{3}{25}
\end{equation}
が得られる。

この解法におけるポイントは、$\frac{d}{dx}f\left(x\right)-5f\left(x\right)+3x=0$を
\begin{equation}
\frac{d}{dx}f\left(x\right)-5f\left(x\right)=-3x
\end{equation}
\begin{equation}
\frac{d}{dx}f\left(x\right)-5f\left(x\right)=0
\end{equation}
の二つの方程式の和と考える点にあります。元々の方程式は線形なので、解をいくら足しても解として成立します。ただし、上側の式には$-3x$だけ余りがあります。なので、あまりの部分を別枠で計算することにします。それが$f\left(x\right)=\frac{3}{5}x+\frac{3}{25}$です。この解は絶対必要です。さらに下側の式から出てくる同次解をオプション的に付け足してもかまいません。オプションを付け足すかどうかは境界条件で決まります。
例題3のように「余り」のある場合、特殊解という「余り」の条件を満たす解を足してやることで、うまく解が表せる、というのは線形微分方程式の特性を利用しています。ただ、ここに至って特殊解の求め方に、「直感」が導入されており、またしても天下り的な要素が出てきてしまいました。この直感の部分はいかんともしがたいものです。さらに、直感で解かれた特殊解が唯一無二のものかどうかははっきりしません。また、特殊解と同次解の和以外のパターンの解は検討していませんから、得られた最終解がすべてのパターンを網羅しているかどうかは、不明なままです。つまり、本当に解けているのかどうかわからない、という状態です。


解法3-2

通常の教科書を見ると、同次解を求めるために特性方程式というものを使うことがあります。特性方程式とは微分方程式に含まれる任意の次数の微分を対応する対応する次数のn乗の記号に割り当てるテクニックです。
特別解の求め方は解法3-1と同じとする。
同次解$\frac{d}{dx}f\left(x\right)-5f\left(x\right)=0$については、対応する特性方程式を考える。すなわち、$\frac{d}{dx}f\left(x\right)$を$t$の1乗、$f\left(x\right)$を$t$の0乗で置き換える。すると、次式を得る。
\begin{equation}t-5=0\end{equation}
これを解いて、$t=5$から
\begin{equation}f\left(x\right)=Ce^{5x}\end{equation}
以下略


実は、特性方程式というのは、$f\left(x\right)$で割り算してから、$\frac{d}{dx}$を$t$、$\frac{d^2}{{dx}^2}$を$t^2$というように機械的に置き換えてやって、多項式を作成することで、半自動的に微分方程式を解くテクニックです。このテクニックの根底にあるのは、一般解が$f\left(x\right)=Ce^{tx}$であることが前提ということです。$f\left(x\right)=Ce^{tx}$であると考えれば、一次微分や二次微分で、$t$や$t^2$が出てきます。途中で$Ce^{tx}$を割り算するというのがわかっているので、最初から割り算しておこう、という手抜きです。先に手抜きを教わってしまうので、わけがわからなくなるという理屈です。特性方程式というのは労力を端折るためだけのものなので、特にこだわる必要はないと、僕は思います 。

特性方程式にも学ぶ点があります。微分方程式を機械的に特性方程式に変換してよいということは、一般解を$f\left(x\right)=Ce^{tx}$に決め打ちしてよい、ということに他なりません。これまで見てきたように、普段は$f\left(x\right)=C\ \sin{\omega x}$ を一般解に用いるような場合であっても、$f\left(x\right)=Ce^{tx}$を一般解にして解くことができます。なので、$f\left(x\right)=Ce^{tx}$を一般解にもちいることは、一般性を失わない、ということだと推測できます。

この章のまとめ

ということで、わかったことは、一般解は普通$f\left(x\right)=Ce^{tx}$を使うとよい、ということです。その他の一般解で解いたとしても結果は同じになるのです。$t$は複素数であってもかまいませんから、$f\left(x\right)=Ce^{i\omega x}$を一般解に使ってもOKです。ただし、この場合、特性方程式は虚数単位を含むことになり、解き方は変わりませんが、ちょっと違和感があります。ただ、答えは同じです。

特性方程式に見られるように、実のところ、一般解を天下り式に受け入れると、基本解はほとんど自動的に求まります。ですので、微分方程式を解くという作業の大半は、境界条件を満たすように、基本解の係数を決定する、という作業が占めます。また、解法2-3や解法1-4で示したように、一般解が少々雑でも、基本解をちゃんと求めることができます。だから、少々強引でも天下り式に一般解を導入しても結果に影響はないんだ、ということで、一般解に関する議論を避けているような気がします。
それでもやっぱり、解法1-1と解法1-2は排他的な解であり、片方だけしか検討しないなら、すべての可能性を考慮したことにはなりません。そういうことが実際にあるのだから、複数の解法をいくら示しても、別の解がある可能性を払しょくできません。やっぱり解けていないんじゃないか、という気持ち悪さが残ります。

まずは、一般解をこのように決め打ちしてよい理由を説明したいと思いますが、そのためには、線形微分方程式の解き方の「フルバージョン」を示す必要があります。フルバージョンの説明には、実はフーリエ級数などの級数展開の話をしなくてはいけません。

2017年12月2日土曜日

アルゴリズムを数式に接続する

きっかけ

最近、「素数の音楽」という本を読んで、その中で「すべての素数を生み出す数式」というのが紹介されていたのに強いインスピレーションを受けた。普通の数式ではないが、明らかに多項式で、不思議な数式だ。この数式がどのようにして得られたのかにも興味をそそられるが、たぶん、僕の知力では追いつかないだろう。それよりも、素数を生み出すというようなアルゴリズム的な機能を数式に落とし込んでいるという点に感銘を受けた。そして、僕はどのような課題をクリアすれば、アルゴリズムを数式に落とし込めるだろうかと考え始めた。すぐにアイデアが浮かび、詳細を詰めた。全てではないが、単純なアルゴリズムであれば、比較的容易に落とし込みが可能だと今は思っている。

素数公式

今や電子暗号技術の根幹を成す素数は、数学のみならず全ての人類にとって重要な問題となっている。特に数学では、ギリシア時代から延々と議論が続いている。例えば、「ある数N以下の素数はいくつあるか」という素数の数え上げ問題などだ。
素数の数え上げ問題に最初に肉薄したのは、カール・フリードリヒ・ガウスだ。$N$以下の素数の数を$\pi$とおくと
\begin{equation}\pi\left(N\right)\propto \log{N}\end{equation}
という大まかな分布にたどり着いた。実際には、もう少し詳しいところまで到達しているが、驚くべきはその成果が若干15歳で達成されたことだ。ガウスの天才が規格外であることを示すエピソードとして有名だ。
以来、多くの数学者が素数の数え上げ問題にかかわったが、転機となったのはゲオルク・フリードリヒ・ベルンハルト・リーマンだ。リーマンは素数の数え上げに言及し、おそらく完全に素数の数え上げに対応する関数を示した。
リーマンの示した方法で素数の数え上げを行うには、ゼータ関数の非自明な0点がある特徴的な直線に並んでいる必要があることがわかっており、「リーマン予想」と呼ばれている。人類が調査可能な範囲において、リーマン予想は正しいことがわかっているが、リーマン予想が「完全に」正しいという証明は存在していない。このリーマン予想を証明することは数学における大問題となっている。ま、僕にはよくわからない世界だ。

リーマン予想は証明されない方が人類にとって良いかもしれないという意見もある。リーマン予想が正しいとなると、我々は素数を見つけるためのもう一つのアルゴリズムを手にすることになる。現在の暗号技術は素数を見つけるのが困難だという数学的経験則に基づいて成立しているのだが、リーマン予想によって別の素数探索法が現れる可能性がでてくる。すると、これまでの経験則が崩れて暗号技術全体が崩壊する可能性が出てくる、というのだ。

素数の探索

素数の探索は、プログラミングの格好の教材で、プログラマなら何度かつくったことがあるだろう。もっとも単純なものは次のようなものだ

ある数Nが素数かどうかを調べるために、Nを2~N‐1までの整数で割り算し、割り切れるかどうかを調べる。もし、一度も割り切れなければNは素数である。

JavaScriptで書けば次のようになるだろう。
function IsPrime(N) {
    var i
    for(i=2; i<N; i++) {
    if( (N % i)==0) return 0;
    }
    return 1;
}

話の都合上、$IsPrime$関数は$N$が素数の時に1を返し、素数でない時は0を返す関数として設計してある。
これは最も単純なので、計算に無駄が多い。計算の無駄を少なくすることでプログラムを高速化する手段はいくつも存在するので、素数の探索プログラムは、アルゴリズムの性能アップを学ぶ格好の題材なのだ。僕の目的はアルゴリズムを数式に変換することなので、もとになるアルゴリズムは効率よりも単純さが重要だ。だから、これでよい。

素数判定アルゴリズムを使うと素数の数え上げが簡単に作成できる。すなわち、
\begin{equation} \pi\left(x\right)=\sum_{N=2}^{x} IsPrime(N) \label{algopi} \end{equation}
一方リーマンの素数公式はもっと複雑で、
\begin{equation}
{\displaystyle \pi (x)=\sum _{m\leqq \log _{2}x}{\frac {\mu (m)}{m}}\left({\rm {li}}(x^{\frac {1}{m}})-\sum _{\rho }{\rm {li}}(x^{\frac {\rho }{m}})-\log 2+\int _{x^{\frac {1}{m}}}^{\infty }{\frac {dt}{t(t^{2}-1)\log t}}\right)}
\label{Riemann}
\end{equation}

になるらしい(Wikipediaより)。


アルゴリズムを数式にする

アルゴリズムによる素数の数え上げ式($\ref{algopi}$)とリーマンの素数公式($\ref{Riemann}$)は、複雑さが段違いということにすぐ気づく。リーマン予想が正しいとすると両者は同じ値を与える関数であるはずだ。ということは、両者の複雑さの違いは$IsPrime$関数に由来する。もし、$IsPrime$関数を普通の式で書き下せば、リーマンの素数公式に一致(あるいは類似)するのだろうか?という疑問を僕は持った。
ということで、$IsPrime$関数を数式に変換することを考えよう。Javascriptで例示したプログラムでは、for構文とif構文が1回ずつ使われている。これらを数式に置き換えることができるだろうか?
for構文の部分は$\sum_{i=2}^{N-1}$に極めて近い。$\sum$は和をとるが、プログラムでは、実は論理積がとられている。なので、積をとる$\prod$の方が近い。つまり、
\begin{equation}
\prod_{i=2}^{N-1} if\left(mod(N,i)\ne 0\right)
\end{equation}
ただし、$mod(N,i)$は$N$を$i$で割った時の余りを値とする関数とする。また、$if$関数は
\begin{equation}
if(x)=\left\{\begin{matrix}0&{if\ x\ is\ false}\\1&{if\ x\ is\ true}\end{matrix}\right.
\end{equation}
となっていると都合がよい。
ここで定義した$if$関数はプログラミングテクニックとして比較的なじみ深いもので、いくつかの言語では条件分岐に関してこのような実装を行っている。
さて問題は、このような$if$関数が通常の演算で実現できるだろうか?ということだ。リーマンの素数公式で使われている数学要素は、足し算、引き算、掛け算、割り算、積分、複素数、無限といったところだ。だから、僕たちは$IsPrime$関数をこれらの要素で構成しなければならないだろう。$if$関数に極めて近い関数に、$sgn$関数がある。
\begin{equation} sgn\ x =\left\{ \begin{matrix}-1&{if\ x\lt 0}\\0&{if\ x=0}\\1&{if\ x\gt 0}\end{matrix}\right. \end{equation}
$sgn$関数は別名を符号関数という。極めて便利だけど、残念ながら人工的すぎて、上述の数学要素で直接構成できるわけではない。この$sgn$関数に似た関数の一つにHilbert変換のインパルス応答関数$H(q)$がある。
\begin{equation} H(q) =\left\{\begin{matrix}-i&{if\ q\lt 0}\\0&{if\ x=0}\\i&{if\ q\gt 0}\end{matrix}\right. \end{equation}
これはインパルス応答関数なので、実空間のタイプがあって、
\begin{equation} H(q) =\int_{-\infty}^{\infty} \frac{1}{x}e^{-iqx}dx
\end{equation}
であれば、if関数に類似のものを次のように定義できる。
\begin{equation} if^\prime (x)=\frac{1}{2}+\frac{1}{2i}H(x)
\end{equation}
ただし、0のところだけ、違っている。引数が整数に限定される場合には、
\begin{equation} if (x) \sim if^\prime (x+\delta)\ where\ -1\lt \delta\lt 1
\label{iffunc}
\end{equation}
数学における4つの不等号$\lt,\le,\gt,\ge$に応じて$\delta$が選択される。
数学的な美しさというものが存在するなら、$\delta = \frac{1}{2}$とするのが良いかもしれない。
もし$\delta$関数が使えるなら、$if^\prime$関数は次のようにしてもよい。
\begin{equation}
if^\prime\left(x\right)=\int_{-\infty}^{x}{\delta\left(x\right)dx}
\end{equation}
これは、ヘビサイド関数として知られている。要は、$if^\prime$関数というのは、極めて人工的だけれど、通常の数学の概念と親和性があるということだ。

余りを計算する

プログラムに見られる構文は2つだけだが、実は余りの計算がもう一つの関門になっている。あまりの計算は通常の演算では作り出せない。そこで、$N$を$M$で割ったときの余りを返す$mod(N,M)$という関数を$if$関数を使って構成することを考える。
当たり前のことだけど、$N=pM+r$を満たす$0\le r\lt M$なる$r$を見つけることがミッションになる。いろんな方法が考えられるが先に$p$を見つけることを考えた方が実は近道かもしれない。すなわち、$r=N-pM$というわけだ。$p$を見つける最もシンプルな方法の一つが次の数式だ。
\begin{equation}
p=\sum_{m=0}^{\infty}if(N-mM)
\end{equation}
これを使うと$mod$関数は簡単で、
\begin{equation}
mod(N,M)=N-M\sum_{m=0}^{\infty}if(N-mM)
\end{equation}
以上をまとめると、
\begin{equation}
IsPrime(N)=1-if\left(\prod_{M=2}^{N-1}mod(N,M)\right)
\end{equation}
となる。
めだたく、新しい素数公式が次のように得られる。
\begin{equation}
\pi(N)=\sum_{n=2}^{N}\left\{1-if\left(\prod_{M=2}^{N-1}\left[n-M\sum_{m=0}^{\infty}if(n-mM)\right]\right)\right\}
\label{final}
\end{equation}

これは素数公式か?

アルゴリズムから出発したので、上式は素数公式であることが確実だ。ただし、$if$関数にフーリエ変換があり、精密な数値計算には向かない。また、途中に∞個の総和があり、計算量の見通しが難しい。また、アルゴリズムが有する計算量を完全に反映する。もっとも愚直なアルゴリズムから出発しているため、効率の面では最低だ。
この式の計算を進め、欠点を補えれば、使い物になるかもしれないが、僕は悲観的だ。重要なのは実用面ではなく、アルゴリズムを普通の解析関数に落とし込んだ点だと僕は思っている。ここまで落とし込めば、アルゴリズムという散文的な概念を数式という伝統的な数学で議論することが可能になるからだ。
リーマンの素数公式の驚くべき点は、素数という典型的な数論の概念を解析関数という別の数学概念に接続している点だ。ここで議論した$mod$関数は数論の世界を解析接続するための基本ツールの一つだ。もう一つのツールは$if$関数だ。ここでは$if$関数を使って$mod$関数を構成したが、その逆も可能だ。そこから、$if$関数と$mod$関数はある種の「同値」関係にあることがうかがえる。

ここに至り、僕は一つの仮説を持っている。リーマンの素数公式というのは、ある種のアルゴリズムを解析接続したものだというものだ。リーマン予想を証明する代わりに、素数探索アルゴリズムの解析接続をいろいろ試すというアプローチがあるんじゃないだろうか。僕は$if$関数を梃子にしたが、それはプログラマとしてはとても自然な発想だ。でも、$mod$関数が$if$関数で構成できるように、梃子として用いることができる数学的ツールはほかにもあるだろうことがうかがえる。

僕がここであらたに導入したのは本質的に$if$関数だけなのだけど、$if$関数だけですべてのアルゴリズムを伝統的な解析関数に変換できるかは不明だ。というのも、プログラミングの世界ではプログラミング言語として万能性を持つために必須な要素というのはもう少し多いからだ。ただ、最小チューリングマシンが極めてシンプルに構成できるという事実は僕たちにとって朗報だ。論理的には最小チューリングマシンの要素をすべてカバーする変換ツールを用意できれば、すべてのアルゴリズムが解析接続できることになるのだから!それは新しいパラダイムを提供するはずだ。

リーマン予想についてのコメント

式($\ref{final}$)とリーマンの素数公式が同じものだと考えると、$if$関数とゼータ関数が何らかの対応を持つことになる。そう思うとリーマン予想についていくつかの推測が得られる。式($\ref{iffunc}$)にあるように、$if^\prime$関数の引数が0になることを避けるために、不自然なオフセットが付け加える必要がある。そのオフセットはある範囲で自由であり、それを$1/2$とするのは自然に思える。逆に言うと、$1/2$でなくてもい。リーマン予想はゼータ関数の0点の実部が$1/2$であるというものであるが、それが$if^\prime$関数に付け加えるオフセットと対応するかもしれない。
例えば、式($\ref{final}$)に半整数を入力してみると、計算が破たんする。そうした破たんは半整数の場合にだけ顕著に生じる。つまり、特異点だ。ただし、入力が素数-1/2の時は、$if^\prime$関数が0になることがない。リーマン予想の$1/2$が式($\ref{iffunc}$)で付け足した$1/2$と対応しそうな感じがするでしょ?
そうすると、ゼータ関数の0点が$1/2$である必然性はないことになる。つまり、$if^\prime$のオフセットと同様に1以下の一定値であればよい、という話かもしれない。であれば、なぜ$1/2$なのかを説明するのは極めて難しいということが推測される。まずは、一定値だということを示すべきなんだろう。
$if^\prime$関数が0になるとは、約数を持つ=素数でないということだから、ゼータ関数の0点も素数でないことを示しているのかもしれない。0点という特別な性質なんだから、特別な性質をもつ素数と何らかの対応を持つだろう、と勝手に思い込んでしまっていないだろうか。式($\ref{iffunc}$)は、そういう先入観とは真逆の可能性を強く示唆していると思う。であれば、ゼータ関数の0点がほぼ等間隔である理由も思い当たる。ゼータ関数の0点はエラトステネスのふるいであるかもしれないということだ。ふるいの目(穴)は等間隔に開いているものだ。
すでに指摘したがリーマンの素数公式は数論の問題を解析接続してしまうという驚きの成果であり、どうしてもそれに目を奪われてしまう。つまり、意味がきちんとしているのは整数の入力だけなのに、複素数の入力が許されてしまうためのにそこに惑わされるのだ。$if$関数を定義するためにどうしても複素数の計算が出てきてしまうわけだが、それがゆえに式($\ref{final}$)も複素数の入力を許してしまう。意味がないとは知りつつ、複素数を入力を試してしまい、その不思議な光景に目を奪われるのだ。

マイルストーン

現時点では、$if$関数以外のツールを僕たちは手にしていないが、どのようなツールが可能かについてちょっとしたアイデアがある。NHKの白熱教室のエドワードフレンケル教授の回でラングランズプログラムの例として、ある方程式の解の数を多項式の係数として得るという奇妙な数式が紹介された。その時は全く理解不能だったが、それはアルゴリズムを数式に変換する全く別の形態であるという気がしている。
プログラマの視点からすると、$if$関数と不自由なループしか使えないというのでは、万能性からは程遠いと言わざるをえない。プログラミング言語が万能性を持つには、複数の変数を取り扱う手段がほしいところだ。なので、アルゴリズムを数式に変換するツールとして、複数の数値を交差計算するツールがほしいということになる。その一つの方法として、代数式の係数が使える。つまり、因数分解された多項式の括弧を外す際に各多項式の複数の係数の積和が実施される。どの係数とどの係数をかけ合わせるかは、変数の次数が制御する。それはある種のアルゴリズムを構成する。
このアイデアを一般化するために、テンソルが応用できる。例えば、2階のテンソルは、2次の多項式と対応させることができるが、それは一つの行列で特徴づけることができる。同様にn階のテンソルは、n階の行列で特徴づけることができる。すなわち、変数に対応するベクトルに対し、n階のテンソルの和を考えることで、あらゆる代数式を構成できるだろう。
これまで僕たちはアルゴリズムを一つの値を出力する一つの関数に表現するとしてきたが、そのようなスタイルに適合するアルゴリズムは極めて限定的だ。例えば、ワードプロセッサはそのようなフォーマットにはそぐわないのは明らかだ。別の表現形式として、多項式の係数を利用するということも悪くない。すなわちそれが、NHKの白熱教室で紹介された奇妙な多項式の背後にある数学だと直感している。もしかすると、その方が簡単かもしれない。そのようなテンソル形式で$if$関数を構成するには無限階のテンソルが必要になる。予想としてはそのようなテンソルを使えば、ワードプロセッサのような複雑なソフトウェアを含むあらゆるアルゴリズムを一つの数式として得ることができるだろう、ということだ。