アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近微分方程式の数値解析について学びだした者です。

微分方程式の数値解法として差分法とオイラー法があると思うのですが、この2つの違いや互いの位置づけはどうなっているのでしょうか?

また、差分法には風上法などがありますが、これらとオイラー法の位置づけについても教えていただきたいです。

できればこれら近辺の全体的な体系について教えていただけるとうれしいです。よろしくお願いします。

A 回答 (2件)

 すいません、#1です。

#1では話を簡単にしようと思って、差分法の定式化を簡略にし過ぎました。もう気づいていると思いますが、

 オイラー法:
  y[i+1]=(1+h)*y[i]     (1)

に対して、差分法:
  y[i+1]-(1+h)*y[i]=0   (2)

としてしまっては、(1)と(2)は全く同じです。差分法で、

 (y[i+1]-y[i])/h=(y[i+1]+y[i])/2   (3)

くらいの事はしておかないと、領域型の性質を持ちません。領域型をめざすなら、これ以上は簡単にできないと思います。(3)と(1),(2)の違いですが、(1),(2)では(移行すれば)、

 (y[i+1]-y[i])/h=y[i]    (4)

で、(3)との違いは、右辺にy[i+1]を考慮するかどうかだけです。

 (3)では左辺の数値微分の結果を、x[i+1]とx[i]の間の中点における微分係数と解釈し、それを中点における関数値に等しいとしています。中点における関数値は、y[i+1]とy[i]の平均で、十分良く近似できるとも仮定しています。

 (1),(2),(4)では、y[i+1]を計算するために、y[i]の情報しか使いませんが、(3)では(今は一点だけですが)まわりの点の情報も使って、平均的に良好な解を得ようとします。ここが直接法と領域型の発想の違いだと言えます。

 式の上ではほんのわずかな違いですが、結果の違いはけっこうあります。添付図は、Excelで計算したものです(^^;)。

  ・黒線が、y=e^x
  ・青丸が、(3)
  ・赤線が、(1),(2),(4)

の結果です。
「差分法とオイラー法の違いについて」の回答画像2
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまい申し訳ございません。
大変詳しく教えていただきありがとうございます!!
直接法、領域型という言葉さえ知らなかったので、大変勉強になりました。
本当にありがとうございました。

お礼日時:2013/11/23 11:20

 単純な具体例でわかると思います。

一番簡単に、dy/dx=yで考えてみますか(^^;)。


 最も単純なオイラー法は、微分の考えをそのまま用いるものです。x=0でy(0)=1が初期条件,hは非常に小さいとすれば、y(h)の値は、y(h)=y(0)+dy/dx(0)・h=y(0)+y(0)・h=1+hで近似できるはずだ(dy/dx=yだから)。y(h)がわかったなら、y(2h)は、y(2h)=y(h)+dy/dx(h)・h=y(h)+y(h)・h=で近似できるはずだ(dy/dx=yだから)・・・を、必要な回数だけ繰り返します。n回繰り返せば、x=0~nhの範囲の近似解が(それなりに)得られた事になります。

 最も単純なオイラー法のアルゴリズムは単純ですが、手順から明らかなように、初期値から離れるに従って誤差は、強烈に大きくなって行きます。そこで巧妙に誤差を相殺するようにオイラー法を拡張したのが、4次のルンゲ・クッタ法などの系列と言えます。

 4次のルンゲ・クッタ法といえどもオイラー法系列は、初期値から離れるほど誤差が蓄積する宿命は避けられません。いつかは解が発散するか、減衰して0になります。

 これらは直接積分法と呼んで良いと思います。


 差分法や有限要素法に代表される領域型解法では、まず解の欲しい領域x=0~Lを、細かい幅hで分割し、分割領域を(今の場合は区間を)要素と呼び、要素端点に「節点x[i]」を設けます。今の場合なら、x[i]=i*hです(i=0~n,h=L/n)。そしてy[i](x[i])を一挙に求めます。[i]は下付き添字と思って下さい。

 微分の差分近似から、 dy/dx=(y[i+1]-y[i])/hなので、dy/dx=yより、(y[i+1]-y[i])/h=y[i]すなわち、y[i+1]-(1+h)y[i]=0です。これをすべてのi=0~nで考えると、y[0],y[1],・・・,y[n](=y(L))に関する連立方程式になります。

 ただしこのままでは式の数が、未知数y[0],y[1],・・・,y[n]の数より一つ少なく、不定解です。これはある意味当然の事で、初期条件を投入してないのが理由です。

 初期条件からy[0]=1となり、一意の解を持つ連立(一次)方程式になりますが、今度の場合の解は発散したり減衰したりしません。平均的に(それなりに)正しい近似解が得られます。


 では差分法の方がオイラー法より(領域型解法の方が直接積分法より)、常に妥当なのでしょうか?。そんな事はないんですよ。領域型解法は領域全体で平均的に良好な解を求めようとする傾向になるので、局所的な近似度は直接法より甘いと言えます。対して直接法は微分方程式を局所的にもろに追跡するので、狭い解領域でなら現象挙動への追随度は、領域型より直接法の方が優れています。特に現象挙動の変化が激しい場合、直接法でないと手に負えない場合があります。

 もう一つは実用性です。こんな例でもわかると思いますが、直接法の方が領域型より遙かにアルゴリズムが簡単で、コンピューターに対するメモリ負担は小さいです。大規模問題になると、ここら辺りは無視できなくなってきます。

 ところが大規模問題に直接法を採用すると、計算精度を保守するためにステップ幅hをどんどん小さくしなければならない羽目に陥り、メモリ負担は減るものの、計算時間は飛躍的に増大します(機械にはどうでも良い事ですが(^^;))。今度は人間が我慢できるか?、そんなに時間は取れるぅ~?、・・・の世界になります(^^;)。

 これらは悩みどころで、両社はトレードオフの関係にあります。

 そしてこれも実用性と言って良いと思うのですが、4次のルンゲ・クッタ法などがあるのはあくまで1次元問題の範囲であって、2次元以上の(x,y)で定義される偏微分方程式を扱う場合、境界から領域内部へ直接法で攻めていったら、領域の真ん中あたりで不整合な値が百出するのは目に見えています。もしかすると2次元や3次元のルンゲ・クッタ法とかがあるのかも知れませんが、自分は知りません。そういう訳で、2次元問題以上では、領域型が主流です。


 最後に物理的側面です。(x,y)に対して時間tが加わった(x,y,t)の場合です。

 (x,y,t)に対しても領域型解法はもちろん可能です。でもやってみると、全ての(x[i],y[j],t[k])を一挙に解くはずの連立方程式の構造が、(x[i],y[j],t[k])以前のすべての(x[i],y[j],t[kk])の情報を必要とする事がわかります。ここでkk<kです。

 これは考えてみれば当たり前の事で、自然現象は因果律を満たすからです。(x[i],y[j],t[k])での解は、それ以前の全ての(x[i],y[j],t[kk])の影響下にあります。それらを全て考慮するとなったら、再び実用性の問題が持ち上がります。しかも今度は、メモリ負担と計算時間増大の両方です。

 しかし因果律は、こうも言っています。「現在の状態は、一瞬前の状態のみで決定されなければならない。それが因果律である」・・・とも(^^;)。

 これも考えてみれば当然の事で、時間を含む微分方程式の形はそうなっているし、その特性は微分方程式の解空間にも反映されます。これは、もぉ~「自然はそうなんだから、しょうがないじゃないか!」・・・としか言えません(^^;)。

 ここで再び注目されるのが直接積分法です。それは最も因果律に良く従っていますし、メモリ負担は確実に減らせます。

 そういう訳で、2次元以上では領域型が主流だと書いたのは、じつは「空間成分」に対してなのです。時間方向は、直接型が主流です。

 でも直接型は、やってられないくらいにすぐに精度が悪化します。それで考えられたのが「間接法」です。「間接法」は、t[k]からt[k+1]の間の解に対して、その間で最良な「平均解」を与えようという発想で、実用性と現象挙動への追随性を、からくもクリアしようとする発想です。これを領域解法と混同しないでください。間接法は、直接型の亜種です。


 いろいろ書きましたが結局は、ケースバイケースで判断するしかないんですよね・・・(^^;)。


 人間もコンピューターも数値計算も、万能ではありません。特にコンピューターと数値計算は、あなた以上の事は「出来ません」。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!