微分方程式の対角化解法
1. 解く方程式と結果の概要
まず最初に結果の概要をまとめる
(A)解く微分方程式とその既知解
ここで解くのは次の基本的な微分方程式である。
そしてこの解は
であることが知られている。
(B)方程式の作用マトリックス表現
ではこの方程式が作用マトリックスではどう表現されるかであるが、それは次のような形になる。
つまり列ベクトルをx、作用マトリックスをA、初期値をx0として
で系の振る舞いを表現する場合、それぞれの内容は
となる。つまり列ベクトルの中身はxとその1階微分であり、
がこの微分方程式の作用マトリックス表現である。
(C) その対角化表現
そしてそれを対角化したものは次のようになる。(ただしΔの1次までの展開近似)
(D)対角化の実行による解の確認
そしてこれを実際に計算してΔ→0としたものが、
であり、一般に知られている解と一致していることがわかる。
(なお投稿をされる方は、結果の概要をこのような形式で最初の方にまとめて記していただきたい。)
2. 詳細な解説
(1)導入したアイデアの要点
まずここで最も中核となっている基本的なアイデアは、関数の値xとその1階の導関数x′を縦に並べて列ベクトルとしたことである。
つまりこの作用マトリックス表現の場合、作用マトリックスを1回かけるごとに関数とその導関数の双方について、それらの少し後の状態が示されていくことになる。
そのため例えばxnという状態からΔ時間だけ経過した状態xn+1は
ということになるが、それらの意味を見てみよう。
まず上段であるが、
(ただし Δ << 1)
は、x′がxの一階微分である以上、当然の関係式であり、逆に言えばこの上段の部分はxとx′が微分の関係になっていることを示している。
次に下段であるが、
(ただし)
の関係式は、微分方程式そのものである。
そのためこの二つを合わせると、この作用マトリックスAが先ほどの微分方程式と等価になっており、これによって微分方程式が表現されていることがわかる。
(2)計算の詳しい過程
では次に計算の詳細な過程を記述する。これらの記述は省いてしまうことも多いが、ここではあえて全部丁寧に記述することとする。(なおバリエーションの場合は、ここまで詳しく丁寧に書く必要はない。)
まず作用マトリックスの対角化の過程である。この行列の固有値ラムダは
より
である。つまりこれを対角線上に並べれば対角行列が求められるが、ただこれでは記述や計算が面倒であるため、Δについて一次までテイラー展開しておく。(どうせ後でΔの二次以上は要らなくなるので、一次までの展開で良い。)
そのため
であるから
である。
また両側につく行列Pを求めるためには、先ほどの二つの固有値に対する固有ベクトルをそれぞれ求めて、それらを横に並べればよい。つまり固有値
に対応する固有ベクトルが
固有値
に対応する固有ベクトルが
なので、それを横に並べると
である。こちらの方もΔの一次まで展開しておくと、
となる。
またPの逆行列も必要になるが、こちらは
で、やはりΔの一次まで展開すると
である。これで一応対角化はすべて終わった。つまりこれらを並べると、先ほどの
になるわけである。
(3)検算
ではこの結果に関していくつか検算を行なってみよう。ただし以上の場合、Δに関して近似を行なっているため、検算で出てきた結果についてもΔをゼロに近付けてΔの二次以上は捨てないと、ちゃんとした結果は出て来ない。
例えば先ほど求めたPとその逆行列に関しても、展開近似を行なった後のもの同士をかけると
となって単位行列になってくれないが、Δ2の部分をゼロと見なすことで
になる。
同じことは対角化の場合についても言えて、対角化
がちゃんと成立しているかを確認する場合も
となってしまうが、ここでもΔの二次以上の項をゼロとみなすことで
であり、やはりこうすることによって、対角化ができていることが確認できる。
(初学者への注意:なおこの場合、計算の途中でゼロと見なして消しても良いのはΔの2乗以上の項であって、もし途中でΔの一次の項を調子に乗って無視してしまうと結果がおかしくなる場合がある。Δの一次を消去する場合は、あくまでもすべての計算が完了した後で慎重に行なうことが必要である。)
では次に、解が現われているかを確認してみよう。この場合、列ベクトルの上段に関数
が、下段にその一階微分
が現われてくればよい。そこで
をそのまま計算して、そうなるかどうかを確かめてみよう。この場合
という一応の計算結果が得られる。 そしてここでも近似を行なってみよう。つまりこの場合、Δは非常に小さく、一方nは非常に大きいとして近似を行なうわけだが、まず列ベクトルの中を見てみると、双方の成分ともその第二項は、1より小さな量を何乗もしているわけだから、nを大きくすれば確実にゼロとなる。
またこの列ベクトルにかかっている
の量は、馬鹿正直に評価しても良いのだが、かける相手の項がどのみち似たような量のn乗のオーダーなので、こちらの1乗程度の量はほとんど大勢に影響せず1と見なしてもよい。
したがって
となるが、ここで
であることを思い出すと
であるから、最終的に
であり、対角化解法でほぼ完全に解けることが示されたことになる。
補遺・今後のヒント
ここでわかったことを元に、今後のヒントとなることをいくつか述べておこう。
積分と微分の表現
まずここからわかる極めて基本的なこととして、積分と微分が作用マトリックス上でどう表現されるかということがある。
すなわち作用マトリックスの中に
という部分が存在していれば、対応する列ベクトル上で、上段と下段にある変数は互いに積分あるいは微分の関係になっているということである。
つまり作用マトリックス上での積分Fを作りたい場合、作用マトリックスを一行分増やしてやって(無論その際は列ベクトルの成分も一個増えてその位置に積分Fが置かれることになる)、そこに
という部分を作り込んでしまえばそれで良いことになる。実際この作用マトリックスを何回も次々にかけていった時のFの値を数列として書いた場合、そのn番目の値Fnは、もとの関数がやはり数列形式で与えられていた場合
(F0はFの初期値だが、これは積分定数に相当)
であり、これは極限化すれば積分表現そのものである。
そしてさらにFをもう1回積分したい場合は、これと同じパターンのものを上にもう一段作り込めば良いことになる。
また微分を作る場合もほぼ同様であり、これは実は外見上は積分の場合とほとんど変わらない。つまりの一階微分、二階微分を作りたい場合、今度は下に向けて、先ほどと同じパターンのものを階段状にどんどん作り込んでいけばよい。
(まあこの場合、感覚としてはが先にあってそこから微分を作っていくというよりは、むしろ導関数が先にあってそれを積分していった結果としてが存在しているという捉え方になり、積分と微分の立場が従来とは逆になっている感がなくもないが、それは単に見方の問題である。)
それはともかく、このように微分と積分を容易に作り込んでいくことができるというのは、作用マトリックスの大きな特徴の一つである。
注)なお、このように微分や積分を何段も重ねて作る場合、実は非常に厳密に言うと、上の段の値は下の段にあるほんの僅かに過去のデータをもとに作られているので、本当は上の段へ行くにつれてほんの僅かづつだけ、時間的に遅れた値が表示されてしまっている。
まあこれはΔを非常に小さくとれば無視できる量なので(特異点の付近で議論を行なったり、ディラックのデルタ関数などの超関数が含まれるような非常に特殊な場合を除けば)、普通の関数を扱っている限りまずほとんど問題は発生しない。
ただし重箱の角をつっつく癖のある数学屋の中には、超関数レベルではこれではうまくいかないと文句を言う場合がある。そういう場合は大抵そこが問題にされており、そしてこちらとしては「たちの悪い超関数は扱わない」と宣言しておけば、そのクレームのほとんどはクリアできるので、記憶の隅に留め置いていただきたい。
加法の作り方
では次にもっと初歩的な問題として、加法の作り方に関してはどうだろうか。つまりとという量があって、+という量を作りたい場合、方法はいくつかあるだろうが、結局そのための行を一行追加してやるのが一番早いのではないかと思われる。
つまり
としてやればよい。
もっともやたらに行数を増やして作用マトリックスのサイズを大きくすることは(まあ増える成分の大半はゼロ成分だから実は省ける計算も多いとは言え)、パソコンを使わず手計算で対角化するのはだんだん手間が大変になってきてしまう。その意味では、どういう形式がベストかは、その手間との兼ね合いで決まっていくことだろう。
なおこの問題の発展系として、加法の微分公式
を作用マトリックス上でどういうルールでスマートに表現するかは、比較的簡単だが重要な課題と思われるので、是非チャレンジされたい。
さて以上のようなものが、とりあえずすぐにわかる作り込みのパターンである。今後の問題としては、計算の中に乗法が存在している場合にはスイッチ演算子を使わねばならなくなるので、そこでちょっとまとまった議論が必要になってくる。そのためとりあえず当面は、これだけを使ってできるバリエーションをいくつか片付けておくのが賢明であろう。
S. Naganuma. Reports of Path Finder
Physics, Vol.1, pp.1-10 (2002)