• 締切済み

1回の常微分方程式解法について

常微分方程式df/dt=g(t)で、関数fとtの数値的な関係を求める場合、ルンゲクッタ法が用いられることが多いと思います。特にtが時間の場合、g(t)は未来には影響しますが、過去には影響できないので解法としてもルンゲクッタ形式の解法になることはわかります。計算が一方向に進むというイメージです。 df/dx=g(x)でxが空間の関数だった場合、g(x)がxの±領域全体に影響を与えると考える場合、反復計算によって全体に影響しながら解を求めていくことは可能でしょうか。ただし、微分は1回しかありません。 2回微分だとSOR法のような反復計算が可能です。全体が影響を与え合いながら式を満たすfを求めていくことができますが、1回微分でもそのようにできるでしょうか。 独立変数がx(空間)に限定ですから時間という概念はありませんが、時間が含まれないということは時間的に変化しなくなった解と見ることもできます。 例えば、シューティングメソッドとか言うのだろうと思いますが、ルンゲクッタ法で一方向に向かって計算し、計算が領域の端部になったらその結果と境界条件を比較して収束が足りないならば少し変化させて再度ルンゲッタで計算する、すなわちルンゲクッタ法の収束計算というやり方もあるようです。 ルンゲクッタ法で計算するような問題を反復計算で計算領域がお互いに影響を与えながら計算する方法があったら教えて頂きたいのですが。境界条件が計算領域の両端にある場合、2点境界値問題というのでしょうか。これを解く方法ということにもなろうかと思います。手前の境界で与えられたものから出発し、もう片方の境界で計算結果と境界値を見合わせることになるのかもしれませんが。 よろしくお願いします。

みんなの回答

  • yammy-j
  • ベストアンサー率60% (6/10)
回答No.5

何か根本的な勘違いをしていませんか? > 特にtが時間の場合、g(t)は未来には影響しますが、過去には影響できない > 計算が一方向に進むというイメージです。 例えば放射性崩壊の計算には、現在から未来へ計算する場合(拡散した放射能が失われるのにかかる時間の計算)と現在から過去へ計算する場合(同位体年代測定)の両方がありますよ。 もしも、一方向にしか物理的に意味のある解が得られないのであれば、それは方程式の形や解法(ルンゲクッタ法など)の問題ではなく、モデル化しようとしている物理現象固有の問題ではないかと思います。

回答No.4

わたしの話は、2階微分方程式の話ですよ。 たとえば、  y'' + 3y' + 2y = g(t) で、y(a)とy(b)が与えられる境界値問題の場合です。 こういう問題ならば、境界値問題を初期値問題に直して、解くことができる場合がある、 ということ。 1階微分方程式の話ではありませんよ。 差分法についてご存知のようですから、 差分法によって離散化された連立方程式を解いた方がずっと賢明です。 そして、SORなどを使わず、ガウス消去法やTDMAで連立方程式を解く。 ただし、  y'' + 3yy' + 2y = g(t) のような非線形の微分方程式になりますと、反復計算をする必要がでてきます。 といいますか、 解かなければいけない微分方程式を教えてもらえませんか? こういう形ですという適当な微分方程式でも構いませんから。 そうすると、話が早いんですけれども。

回答No.3

あっ、NO2で変なことを書いている。 ~~~~~~~ fは(x,t)の関数なんでしょうね~。で、x = x(t)。 だったら、 面倒くさがらずに、  y = f(x,t) と書くものだぜ。 ~~~~~~~ この部分はなかったことにしてください。 無視してください。

回答No.2

こんばんは。 まず、最初に、 質問の内容を誤解していたらごめんなさい、 と前置きをして、回答します。 ☆2階微分だとSOR法のような反復計算が可能です。 ◇2階微分方程式の境界値問題ならば、ええ、SORのような反復計算を用いて計算ができます。差分法などを使って得られた連立方程式を解くのに、SORなどを使います。 この場合、SORなどの反復計算法を使うのは、あくまで、連立方程式を解くため。 ですから、ガウス消去法などの直接法を用いてもいいです。 ───ガウス消去法を使って解くのが一般的。差分法を使うなら、TDMAという方法もある─── しかし、初期値問題は、ダメですよ。1階はもっとダメ!! 境界値問題:f(a)、f(b)が与えられている場合 初期値問題:f(a)とその1階微分のf'(a)が与えられているような場合 初期値問題を、f(b)の値を予想し境界値問題に直して解くことはできますけれども、そんなことは普通しませんよ。 ☆ルンゲクッタ法で計算するような問題を反復計算で計算領域がお互いに影響を与えながら計算する方法があったら教えて頂きたいのですが。境界条件が計算領域の両端にある場合、2点境界値問題というのでしょうか。これを解く方法ということにもなろうかと思います。手前の境界で与えられたものから出発し、もう片方の境界で計算結果と境界値を見合わせることになるのかもしれませんが。 ◇ええ、あります。 たとえば、こんな感じ。 計算領域の端をaとbとします(a<b)。 nは区間[a,b]の分割数   h = (b-a)/n   f'(a)の値を予想     ───f'(a) = (f(b) - f(a))/(b - a)とでも置いてください─── I f(a)とf'(a)を使い、bに向かってルンゲ=クッタで前進的に解く   計算結果のf(b)と実際のf(a)の値が収束条件を満たしていればOK!! II f'(a) = (f(a+h) - f(a))/h III Iに戻る みたいな感じ。 ───この計算には、各点でのf(x)の値が必要になるので、配列を使わないといけない─── これでうまくゆくかどうかは、実際に、問題を解いてみないとわかりません。 IIの予想式を、もっと良い予想式に変えないといけないかもわかりません。 fは(x,t)の関数なんでしょうね~。で、x = x(t)。 だったら、 面倒くさがらずに、  y = f(x,t) と書くものだぜ。

skmsk1941093
質問者

お礼

回答ありがとうございます。空間微分だけで時間が関係しない問題ですが、収束計算と考えると一種の時間発展問題と考えて時間的に変化しなくなるものが近似解であるとも言えそうです。 もう一度まとめてみました。 h=(b-a)/n !区間分割数n個、点は0~nなのでn+1点 f(0)=A ! f(a)=Aですが、配列番号は0(左端)これは必ず与える。A,Bは境界値(正解) ! f(b)=Bですが、配列番号はn(右端)これは終点の正解値 ! ルンゲクッタ法では収束計算をしないので第一推定値(前条件)が必要ない。 do i=1,n ! 点を更新していく f(i)=....! 1回微分の式でルンゲクッタなどで決める(計算システム)       f(0)→f(1)→f(2)→f(3)→...f(n)まで enddo err=f(n)-B ! 右端(f(n))ではBのはずなのにBではない。計算がBに向かっている保証がない。 このerrの値を用いて計算のシステムを更新しなければなりません。上記には更新するところがありません。 しかし、例えば、収束計算のための前条件(第一推定値:線形補間が順当)を与えて計算するシステムにしておけば、エラー(あるいは前条件との偏差)を評価してその値に応じて前条件を変化させていくという手法があるのではないかと思います。まるでSOR法の1回微分版です。 元の式df/dx=h(x)を離散化するとき、 (f(i+1)-f(i))/dx=(h(f(i+1),x(i+1))+h(f(i),x(i)))/2. 右辺を第一推定値で計算し、収束計算(すなわち更新が終了するまで計算)するというのはどうですかね。微分を区間の真ん中で取るというのは理屈には合っていますが。 どうせだめだろうと思うのでプログラミングする気力がわきませんが。だめもとでやってみますかね。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

1階の微分方程式 df/dt=g(t) の解は、 f(t)=∫g(t)dt + C なわけで、積分定数は一個しかありませんから、そもそも(任期に与えられる)境界条件は1個しかありません。

skmsk1941093
質問者

お礼

回答ありがとうございます。 なるほど、理論ではそうなりますかね。実現象のモデル化と関係がありますが、実現象⇔数式化⇔数値計算 の3者を比べると、現象を数式化するときにある種の簡単化や近似が入ります。そのため方程式の微分の回数が1つ減ります。本来は2回微分です。2回微分の方程式だったら2点境界値問題になり、式の微分の回数が上がることで反復計算のプログラムを作成することができます。SOR法などです。 ただ、物理現象面を考えると2回微分の項はかなり弱いのでそれを無視して1回微分の方程式のまま無理やり反復計算が構成できないかなあと思っているのです。

関連するQ&A