SSブログ

非線形の微分方程式だって解けるケロ(差分の基礎編) [数値解析]

非線形の微分方程式だって解けるケロ

 

 

差分法を用いた、次の非線形微分方程式の初期値問題について考える。

  

 

前進差分を用いて(1)を差分方程式に近似すると次のようになる。

  

これから、

  

という漸化式を得ることができ、x₀=0におけるyの値y₀を計算の出発点にし、前進的にの値を次々に求めることができる。

 

これに対して、後退差分を用いると、(1)の微分方程式に関する差分方程式は

  

となり、次の2次方程式を得ることができる。

  

この2次方程式を解くと、

  

という漸化式が得られ、(3)式を用いて前進的にの値を次々に求めることができる。

 

(1)の場合、後退差分は2次方程式を解く必要があるんだケロよ。2次方程式を解くというひと手間が加わるだけではなく、(2)と(3)を比較すればわかるように、漸化式が複雑になる。

 

  

だったら、3次方程式を解かないといけない。3次方程式ならば解の公式があるので代数的に解けないことはないけれど、n≧5のとき

  

この式から得られる

  

というn(≧5)次方程式を代数的に解くことは一般にできないので、ニュートン法などを用いてを解く必要がある。

ということで、後退差分(陰解法?)は前進差分(陽解法?)とは違って難しいんだケロよ。だから、常微分方程式の初期値問題で後退差分を用いた解法(陰解法?)は一般に使われない。

陰解法が威力を発揮するのは、

  

といった偏微分方程式の数値解法なんだケロよ。

 

ではありますが、Δx=0.1とし、(2)式と(3)式を使って、(1)の初期値問題を解いた結果は次のとおり。

 

微分方程式(1)の(厳密)解は簡単に求まりそうに見えるだろうが、これはリッカチ形の微分方程式で、この解は三角関数、指数関数、対数関数を用いて表すことができない、つまり、解けないんだケロ。

なので、比較参考のために、4次のルンゲ・クッタ法を用いてΔx=0.1で計算した値を厳密解のかわりにあわせて図示している。

この計算結果を見ると、陽解法による計算結果は厳密解よりも小さく、陰解法による数値計算結果は厳密解よりも大きいこと、そして、厳密解がこの間に位置していることがわかる。

ということで、陽解法による計算結果を陰解法による数値計算結果を足して2で割る、つまり、両者の平均をとると、厳密解とかなりよく一致することがわかる。

このことは、数値計算結果の絶対誤差を図示したグラフを見るとよくわかると思う。

 

 

前回に引き続き、陽解法と陰解法の計算結果を足して2で割ると、誤差のプラスマイナスが互いに消し合って、誤差が小さくなって、厳密解に近い値が出るようになるのであった。

Δx=0.1のときに、誤差がおよそ1/10になっており、また、陽解法、陰解法の誤差の程度がO((Δx)²)であるので、この解法の誤差はO((Δx)³)と推測される。だから、修正オイラー法、2次のルンゲ・クッタ法と誤差のオーダーと同じであるに違いない。

 

より進んだ解法は、

  

①と②の両辺を足しあわせて、両辺を2で割ると、

  

となるにゃ。

についての2次方程式(4)を解き、こうして新たに得られた漸化式を用いて計算してみるといい。

 

(4)を使った計算結果は、(2)と(3)を使って求めた値の平均値と同じ値になると思うかもしれないけれど、これが一致しないんだね〜。

(4)を使ったもののほうが精度はさらに向上するはずなんだよね〜。

嘘だと思うならば、の2次方程式(4)を解き、の漸化式を求め、その漸化式で計算してみな。

というか、お前ら、これくらいはやれよな。

 

何故、(4)式は、(2)や(3)より精度よく計算できるのかについては、尤もらしい説明をすることはできなくはない。

というのは、の中点をと表すことにし、それに対応するyの値をで表し、

  

③と④は、それぞれ、

  

となる。

⑤と⑥を足すと、が消えて、(4)式になる。

③は、Δxより小さいΔx/2という分割幅で仮想のの値を求めるいることを意味し、④式はこうして求められたを元にΔxよりも小さい分割幅でを求めることを意味している。

分割幅を小さくすると一般に計算精度が向上する。

また、仮想の点とそれに対応するyの値を考慮に入れると、(4)の左辺のにおける中心差分とみなすこともできる。

したがって、(4)は、(2)や(3)よりも高精度に計算できる・・・。

 

 

感覚的にこう理解すればいいのではないか。

これにテーラー展開の話を交え、「(2)や(3)の誤差の程度がO(h²)であるのに対し(4)式はO(h³)で修正オイラー法、2次のルンゲ・クッタと誤差の程度が同オーダーである」なんて尤もらしい説明もできるけれど、かなり胡散臭い話だから、ここではしないにゃ。

 

(2)、(3)、(4)式は、0≦φ≦1である重みφを使うと、

  

と、1つの式で表すことができる。

φ=0のときは陽解法、φ=1/2のときは半陰解法、φ=1のときは純陰解法と分類分けすることも可能。

 

そして、プログラムを作ってこの問題を解く場合、0φ≦1のすべてのφについて解けるものを作った方がいいにゃ。それが賢い方法だにゃ。

 

 


nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。