• 締切済み

ルンゲ-クッタ法について

ルンゲクッタ法にはたくさんのバリエーションがあるようですが、4次のルンゲクッタ法意外でどのようなものがあるのですか。 また、4次のルンゲクッタ法との違いを簡単に教えてもらいたいです。

みんなの回答

  • tomtom_
  • ベストアンサー率39% (43/110)
回答No.3

Runge-Kutta法の中でも,古典的Runge-Kutta法(4次の陽的な解法)の他に,半陰的な解法,陰的な解法があります. Runge-Kutta法の他にも陰的な解法がありますが,陰的な解法の法が安定性が優れていることが安定性解析によって知られていました. 最近になって,「なぜ安定的なのか」という不思議な疑問について,物理学的な保存量を持つからだ,ということが分かってきました.保存量とは,力学的なエネルギーや時間反転性,角運動量などです. 特にRunge-Kutta法については,Sanz-Serna博士らが研究し尽くしており,参考URLの本で紹介されています. これらの保存量を持つ数値計算法は,幾何学的数値計算法(岩波数学辞典第4版による)と呼ばれています. 「シンプレクティック数値積分法」などで検索すると,いろいろ引っかかると思います.

参考URL:
http://www.amazon.co.jp/Geometric-Numerical-Integration-Structure-Preserving-Computational/dp/3540306633
回答No.2

基本的には、次数の違いだけじゃないですか。 4次なら、刻み幅の4乗のオーダーで(厳密解との)誤差が 減少します。 4次以外でよく使用されるのは、2次(別名Heun法)です。 あとは、計算時間との兼ね合いでしょうか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

原理的には何次であっても構成できるんだけど, 教科書などで説明されるのは 4段4次の RUnge-Kutta法 (いわゆる「古典」Runge-Kutta法) ですね. 4次までは段数と次数を一致させることができるんだけど 5次を越えると不可能で, 例えば 5次にするためには 6段, 6次にするためには 8段必要だったはず. で, このまま次数を上げていくとえらい段数が必要なんですが, 「大きなきざみ幅を使うためにすごい次数にする」って例を聞いたことがあります. ちなみにきざみ幅を (それなりに) 自動的に調節する Runge-Kutta-Fehlberg なんてのもあるみたい.

関連するQ&A

  • オイラー法とルンゲ・クッタ法

    「オイラー法とルンゲ・クッタ法の計算精度を数値的に比較しなさい」と課題を出されましたがさっぱりわからないのです. 最低でもオイラー法と2次のルンゲ・クッタ法を比較しないといけないのですがどのような方法でどのような結果になるのでしょうか? お願いします

  • ルンゲクッタ フェールベルグ法

    ルンゲクッタ 法とルンゲクッタ フェールベルグ法の違いについて、教えてください。 また、株価変動を予測する場合、どちらの方法が最適ですか。

  • オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法のC言語プログラムに

    オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法のC言語プログラムについて教えてください! 課題なのですが、まったくわからず困ってます>< 1 常微分方程式 dy/dx=f(x,y),y(0)=1 の数値解をオイラー法を用いて計算するプログラムを作為せよ。ただし、f(x,y)=3-6x^2-4x+2xyとする。 2 α=1,β=1,γ=1/2,σ=1/2 の場合の2次ルンゲクッタ法を考える。1と同じ常微分方程式(f(x,y)も同じ)を考え、その数値解を求めるプログラムを作成せよ。また、オイラー法と2次ルンゲクッタ法の実行結果を示して、2つの近似精度を比較せよ。 3 1と同じ常微分方程式(f(x,y)も同じ)を考え、その数値解を4次ルンゲクッタ法を使って求めるプログラムを作成せよ。また、オイラー法、2次ルンゲクッタ法、4次ルンゲクッタ法の実行結果を示して、3つの近似精度を比較せよ。 以上の3つです。 休んでいた自分が悪いのですが、ネットで調べてもよくわからなくて… わかる方、よろしくおねがいします…

  • ルンゲクッタ法について

    ルンゲクッタ法についての問題なのですがよくわかりません。 常微分方程式 du/dt=u について、ルンゲクッタ法(3次.4次)による誤差分析を行えという問題です。

  • ルンゲ=クッタ法の間隔hの位置

    dy / dy = -2xy を、ルンゲ=クッタ法で解こうとしています。 http://ja.wikipedia.org/wiki/%E3%83%AB%E3%83%B3%E3%82%B2%EF%BC%9D%E3%82%AF%E3%83%83%E3%82%BF%E6%B3%95 の式を参考にExcelでマクロを組んでみたのですが、 なぜか違う答え(正答は0に収束なのに、+に発散してしまう)が出ます。 y n+1を求めるときに第2項にかけているhを、 k1~k4を求めるときにk1 = h * f(t,y)などとすると、 上手く収束するのですが… なぜhのかける位置によって収束するしないが変わってしまうのでしょうか? 教えてください。

  • 数値解析なんですが

    オイラー法とルンゲクッタ法の特徴や違いについて教えてください。 例えば,ルンゲクッタ法はオイラー法よりも精度がいいけど・・・なんで?

  • 微分方程式(ルンゲ=クッタ)がうまくいきません

    C言語で物体の自由落下運動(空気抵抗を考慮する)を微分方程式を用いて解かなければならないのですが、どうしてもグラフの形が曲線になりません。どこが間違っているのか指摘お願いします。 空気抵抗を考慮しているので、落下速度はどんどんある一定の値に近づいていくはずなのですが、グラフは直線になってしまいます。いろいろと方法を試しましたがどれも外れました。 写真は赤が今の状態(間違っています)、黒が理想形です。 ここではルンゲ=クッタ法を使用しています。 #include <stdio.h> #include <math.h> double yd(double t,double y){ double m = 50.0; 質量 double g = 9.8; 重力加速度 double k = 0.01; 空気抵抗の定数係数 double a= g - ((k *y)/m); 運動方程式 return(a); } double runge(double t,double y,double h){ double k1,k2,k3,k4,r; double h2 = h / 2.0; k1 = yd(t,y); k2 = yd(t+h2,y+(h2*k1)); k3 = yd(t+h2,y+(h2*k2)); k4 = yd(t+h,y+(h*k3)); a = y + (h/6.0) * ((k1 + (2.0 * k2) + (2.0 * k3) + k4)); return(a); } void main(){ double y = 0.0; double h = 0.001; double t = 0.0; int i; for(i = 0; i < 1000; i++){ t += h; y = runge(t,y,h); printf("%f %f\n",t,y); } }

  • ルンゲクッタ法について

    ルンゲクッタ法は刻み幅固定のためプログラムで計算途中で誤差を減らせないと思うのですが、計算途中で誤差を減らせるような手法はどのようなものがあるでしょうか。

  • 微分方程式をルンゲクッタ法を用いて解くプログラム

    2*(y''(x))+0.5(y'(x))+2.5y=1 Y(0)=0.1,y'(0)=0.1 この微分方程式をルンゲクッタ法を用いて、 x軸が0から50位(0.01刻み)までのyの値を算出するプログラムを作りたいのですが、どうすればいいのかさっぱり分かりません。 ネットで色々と調べてみたのですが、ルンゲクッタ法をどうやってプログラムで表せば良いのかが分かりません。 どうか、回答をよろしくお願いします。

  • ルンゲクッタ法の中でも,もっとも精度の良い方法を教えてください.

    ルンゲクッタ法の中でも,もっとも精度の良い方法を教えてください. よろしくお願いします. 名称だけでいいのでお願いします. できるだけ、早急な回答をよろしくお願いいたします。