OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

微分方程式の数値解法

  • 暇なときにでも
  • 質問No.231395
  • 閲覧数223
  • ありがとう数4
  • 気になる数1
  • 回答数4
  • コメント数0

2階の微分方程式で、
例えば、初期条件が、y(0)=0、y(1)=0のような
「globalな」ものだった場合って、どのように数値的にとけばよいのでしょう?
普通、数値解法って、y(0)=0、y'(1)=0のような
局所的に折れ線をつなげていくじゃないですか・・・?
質問の場合には、その解法だと恐ろしく面倒ですよね。
通報する
  • 回答数4
  • 気になる1
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 43% (186/425)

このような場合には、
y(0)=0,y'(0)=k
と置いて、kをいろいろな値にとって
微分方程式を数値的に解きます。
そして、y(1)=0となる条件の元で、
kの値を決めてやります。そうして
求まったy(x)が解です。

プログラムでかくと、

定義
eps=10E-8
y10=-10 :y'(0)の初期値
step=1.E-2 :y'(0)を変化させる1ステップの大きさ

y00=0 :初期条件
y01=0 :初期条件

本体

While(k<10)

サブルーチン
(y00=0,y10=kを初期条件として微分方程式を解く。
解いた結果、y(1)をy0endとして返す。)

if(|y0end-y01|<eps)

Then End(プログラム終了)
else(k=k+step)

End while

みたいな感じで解きます。

アルゴリズム的には、「shooting method」といいます。
この言葉は、日本語の教科書には余り出ていませんが、
英語の数値計算の辞書のように厚い本には、
「shooting method」と出ています。

たとえば、こんな本には出ています。

Numerical Recipes in Fortran
William H. Press (編集), Saul A. Teukolsky (著), William T. Vetterling (著)
ハードカバー - 963 p / 2nd 版 (1992/01/15)
Cambridge University Press ; ISBN: 052143064X

読んでみてください。
お礼コメント
noname#108554

ありがとうございます。
やっぱりそういう方法しかないですよね。
なんか超絶技巧な技があるのかと思いましたが。
投稿日時 - 2002-03-09 12:03:48
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.2
レベル9

ベストアンサー率 75% (28/37)

 線形問題にしか適用できませんが、学生の頃、境界値問題 の解法の1つとして何かの本に載っていたのを見たことがあ ります。この方法は両端の境界条件でyやy'を組み合わせて 指定する場合にも応用できます。 ・y(0)=0となる解yaを1つ求めます。 ・y(1)=0となる解ybを1つ求めます。 ・y=a*ya+b*ybとして  境界条件を満たすようにa、bを決定します。 (実質的に ...続きを読む
 線形問題にしか適用できませんが、学生の頃、境界値問題
の解法の1つとして何かの本に載っていたのを見たことがあ
ります。この方法は両端の境界条件でyやy'を組み合わせて
指定する場合にも応用できます。

・y(0)=0となる解yaを1つ求めます。
・y(1)=0となる解ybを1つ求めます。
・y=a*ya+b*ybとして
 境界条件を満たすようにa、bを決定します。
(実質的にはそれぞれ反対側の境界条件を満たすよう係数を
 決定している)

 境界条件の値を0とする解を選ぶことにより、係数を決める
時片側だけに寄与するようにしたのがミソですが、質問のよう
な両端で0と言う条件に対してはうまく行かないようです。そ
れ以外ならすっきりした解法だと思いますがいかがでしょうか?
お礼コメント
noname#108554

なるほど!確かに線形なら可能ですね。
ありがとうございます。
投稿日時 - 2002-03-10 06:37:29


  • 回答No.3
レベル12

ベストアンサー率 43% (186/425)

>やっぱりそういう方法しかないですよね。 >なんか超絶技巧な技があるのかと思いましたが。 あとで、自分で回答を読んで、わかりにくかったかな、と思いましたが、 わかっていただけてよかったです。 というよりも、誰でも真っ先に思いつく方法ですよね。 英語で、「shooting method」とちゃんと名前がついていること自体 始めは驚きでした。 でも、周囲の数値計算の専門の仲 ...続きを読む
>やっぱりそういう方法しかないですよね。
>なんか超絶技巧な技があるのかと思いましたが。

あとで、自分で回答を読んで、わかりにくかったかな、と思いましたが、
わかっていただけてよかったです。
というよりも、誰でも真っ先に思いつく方法ですよね。
英語で、「shooting method」とちゃんと名前がついていること自体
始めは驚きでした。

でも、周囲の数値計算の専門の仲間に聞いても、これ以外の方法は
みんな知らないって言うので、私は論文(理論物理です)の
微分方程式の数値計算をこの方法でやって、英文専門誌に投稿して受理
されましたから、認められた方法だと今では思っています。

tgbさんのように、なるほど、両側から解いていって、間で継ぎ合わせる
という方法もありますよね。
収束の速さや、解の精度を挙げるには、いろいろと検討しなければ
ならないかもしれません。

私もいまだに、超絶技巧があるのでは?と調べたり、研究していますが、
新しい方法は、見つかりません。

このページに画期的な方法が現れるのを期待していますし、
ibm_111さんが、新しい方法を手に入れられたら、こちらが
教えていただきたいほどです。
  • 回答No.4
レベル10

ベストアンサー率 40% (54/135)

基本的に境界値問題のことをおっしゃっているのだとおもいますが 線形であれば 線型方程式を解く方法もあると思います。 Σa_n(x) (∂ /∂x)^n f(x) = C というようなものであれば、結局、各場所の値 f(x_j) (j=1,2,...,N)を未知数として、 方程式から境界条件を除いて適当な数の連立方程式がえられますよね(適切な問題であれば)。 たとえば、端の点の値が与えられているの ...続きを読む
基本的に境界値問題のことをおっしゃっているのだとおもいますが
線形であれば 線型方程式を解く方法もあると思います。
Σa_n(x) (∂ /∂x)^n f(x) = C
というようなものであれば、結局、各場所の値 f(x_j) (j=1,2,...,N)を未知数として、
方程式から境界条件を除いて適当な数の連立方程式がえられますよね(適切な問題であれば)。
たとえば、端の点の値が与えられているのであれば、1階の微分方程式であれば完全にきまって、
2個の境界条件と微分方程式を差分式になおしたN-2個の連立方程式が得られて
結局、線形連立方程式に帰着できることがわかります。

でも、線形じゃないばあいはやっぱり「いろいろやってみる」方式のようで、
Mathematica などでは(マニュアルによると)
非剛性アダムズ(Adams)法と剛性ギア(Gear)法とを交互に切り替えるのだそうです。
http://www.wolfram.com/products/calculationcenter/features/solvers.ja.html
ちなみに
線型境界値問題の場合はゲルファンド・ロクチェフスキー(Gel'fand-Lokutsiyevskii)追跡法
だそうです。
確認できなかったのですが、方程式には硬い軟らかいのがあるそうで
http://grape.c.u-tokyo.ac.jp/~makino/kougi/system_suuri4_1999/note8/node1.html
局所的にそれを切り替えて収束をはやくしているようです。
非線形数値計画法とかの(準)ニュートン法の微分方程式版みたいなものなのでしょうか?

あと、L(f(x) )=0を微分方程式として
発展方程式 (∂/∂t ) f(x) = L(f(x) )
+「境界では境界を満たすようにする」
を考えて、(良く収束するとして)、
発展方程式の時間を進めて
定常解 (∂/∂t ) f(x) =0を解とするという考え方もありますよね。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ