• ベストアンサー

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

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

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

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

「数値的に」ということは,理論的な解析はやらなくても良いようですね. 直接的にやり方をお教えするのは禁止されていますので,簡単に手順の概要をしますから,あとは実際にやって考えてみて下さい. 1. 数値計算に頼らなくても,解が解析的に求まる微分方程式を用意する (調和振動子,バネとかが良いかもしれません) 2. 「刻み幅」を同じ値にし,オイラー法とルンゲクッタ法で解を求めていく 3. 解析解(微分方程式を実際に解いた式)と数値計算結果の差を比較する (グラフを描いてみると良いかもしれません.差の絶対値を取る方が良いと思います) 4. 「刻み幅」(ステップサイズ)の大きさを半分,もしくは2倍にして,上記1~3を再度試みる 5. 時間の許す限り,4. を繰り返す (刻み幅を10倍とかやってみても良いかもしれません) 参考URLの本に,この辺のことは全部書いていますので,御購入なさってはいかがでしょうか. 頑張って下さい.

参考URL:
http://tinyurl.com/65udeo
eleques
質問者

お礼

遅くなりましたが,ありがとうございました おかげで解くことができました

その他の回答 (1)

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

オイラー法やルンゲクッタ法くらいなら, 人に聞くまでもなく調べればわかるはずです.

関連するQ&A

  • オイラー法、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つです。 休んでいた自分が悪いのですが、ネットで調べてもよくわからなくて… わかる方、よろしくおねがいします…

  • Runge-Kutta,Runge-Kutta-Gillの二つの計算結果を比較して表示

    常微分方程式 dy/dx=1+y/x を下記の条件で解くというものです。 初期値x=1,y=1   計算区間(きざみ幅)h=0.05   計算区間[0,2]   真値 y=x(log|x|+1) Runge-Kutta法とRunge-Kutta-Gill法の2つの数値計算方法を用いて、計算結果を比較するプログラムを作るというものです。それぞれ表示させるのはxの値、yの値、真値、誤差です。Runge-Kutta法とRunge-Kutta-Gill法はユーザー関数にします。 初心者なのにこんな難しい課題だされて本当に困っています。自分でもがんばってプログラムを作ったのですが、表示させるのがうまくいきませんでした。計算結果を表示させるプログラムはメイン関数に置くのですか?それともユーザー関数に置くのですか?どなたか教えてください!よろしくお願いします。

  • 差分法のいい点・悪い点

    差分法のいい点と悪い点は何でしょうか? 悪い点はルンゲ・クッタ法に比べて精度が悪いってことをは知ってるのですが.他の悪い点と特に良い点について教えてください.

  • 常微分方程式の問題で。

    常微分方程式の問題で オイラー法、ルンゲ・クッタ法、ルンゲ・クッタ・ギル法、ミルン法、アダムス法より2つの方法を用いて解け。 y''+y'/x+y=0 初期条件y'/x=-1/2 0<=x<=4 h=0.4 という問題なのですが、基本的に解き方がわかりません。 二階微分なので連立ルンゲ・クッタで解くのかな?っと思ったのですが 結局それからどうすればいいのかわかりません。 2つの方法とありますが、これはどの方法でも解けるものなのでしょうか? 本当はC言語のプログラムを組まなければいけないのですが、 この理論がわからないのでおねがいします。

  • ルンゲ=クッタ法の間隔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のかける位置によって収束するしないが変わってしまうのでしょうか? 教えてください。

  • 数値解析の手法(差分法)について

    現在、とある2元の1階偏微分方程式(解はu,vでそれぞれ右と左に進行する波)を数値解析によって解こうと考えています。 数値解析の手段として、差分法がよく用いられると思いますが、 現在、私は、場所に関してはuは後退差分、vは前進差分を使い、 時間に関しては前進差分を使って解いています。 ネットでは場所に関しては中心差分、時間に関してはルンゲ=クッタやリープフロッグなどが 使われていることが多く、私もこの2つを用いて解いてみました。 偏微分方程式には線形項が含まれていたため、 線形問題に対する制約であるΔt/Δx << 1は最低満たすように刻み幅をいろいろ取り、 計算時間も辞さず計算機を動かしてみましたが、 ノイズが消えず、解析解に限りなく近づくには至りませんでした。。 Δt/Δx=0.0001なども試したのですが・・・ そこで、諦めて違う差分法を試し、 場所に関して、uは後退差分、vは前進差分を使い、 時間に関しては前進差分を使って見たところ、 Δt/Δx=0.01程度で解析解に近い、なかなか精度の良い数値解を得ることが出来ました。 2次の差分では上手くいかず、1次の差分だとわりかし上手くいく・・・ 精度的には中心差分やルンゲ=クッタなどの方がいいと思うのですが・・ 正直不思議でなりませんでした。。。 最初に試した差分法のコードミスかと思い、何回もコードを確認し直しましたが、 やはり解析解に近づくには至りませんでした。 こんなことってあるのでしょうか?? 差分法でも場合によって使い分ける必要があるということでしょうか・・? その場合分けするときの指標など、知っておられる方、教えて頂けると助かります。 問題によって

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

    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つの違いや互いの位置づけはどうなっているのでしょうか? また、差分法には風上法などがありますが、これらとオイラー法の位置づけについても教えていただきたいです。 できればこれら近辺の全体的な体系について教えていただけるとうれしいです。よろしくお願いします。

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

    初期値問題 d^2y/dx^2=dy/dx-(dy/dx)^2 (0<x<5) , y(0)=1+log(3/2) , y'(0)=1/3 を1階連立系に直し、コンピュータを用いて古典的ルンゲ・クッタ公式によって数値解を求め、真の解と比較せよ。但し、ステップ幅hは1/4 , 1/8 ,...のように二通り以上とることとし、数値解の誤差の振る舞いを吟味せよ。ルンゲ・クッタ公式のプログラムも添付し出来れば解の様子をx‐y平面に図示すること。 という問題があるのですが、全然手がつきません。誰か数学の偉い方、ご指導お願いします。お礼もいたします。

  • fortran77

    オイラー法とルンゲ・クッタ法 のプログラムを作るにあたっての質問です。 ネットで調べたら do i=0,N-1 x=x+h*f(x,y) t=t+h というのがでてきたのですが、 do文の中にiと言うものは一回も出てきていません。 どうしてこのようなものでまわるのでしょうか??? 初心者なので、わかりやすくお願いします。