• 締切済み

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法はユーザー関数にします。 初心者なのにこんな難しい課題だされて本当に困っています。自分でもがんばってプログラムを作ったのですが、表示させるのがうまくいきませんでした。計算結果を表示させるプログラムはメイン関数に置くのですか?それともユーザー関数に置くのですか?どなたか教えてください!よろしくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

メインでいいんじゃないでしょうか

関連するQ&A

  • 方程式の計算を教えることになったのですが...

    y'=y+x^2 , y(0)=1 のときのy(3)の値をEuler法およびRunge-Kutta法により求める問題を教えることになったのですが、分かりやすくプログラムを教えるためにはどういう風に教えればいいのでしょうか? 皆さんの考えを教えてください。

  • runge kutta gill 法

    4次のrunge kutta gill法で、 d^2y/ dt^2 = d^3y/dt^3 + k + g の計算方法を教えて下さい。 k,g : 定数 FORTRAN77で、計算しようと思っているのですが、どのようなプログラムを作ればよいのでしょうか?

  • ルンゲクッタ法による数値計算の高速化(C言語)

    C言語にて4次のルンゲクッタ法で 次の非線形連立微分方程式を計算するプログラムを作りました。(添付画像) 出力される計算結果は、 ある時点で変数xが指数関数で立ち上がり、また指数関数で立ち下がるグラフです。 ファイル軽量化と高速化のため、必要なデータ(x > 1E-5)だけ抜粋しsaveしています。 下記リンクのサイトを元に、 逐次計算→CSVファイル出力するプログラムは作れたのですが、 計算に時間が掛かり過ぎて困っています。 http://hooktail.org/computer/index.php?Runge-Kutta%CB%A1 ネットで調べると高速化の手法として、 Adaptive Runge-Kutta法というものがあり、 変化量が小さい区間はステップを大きく取り、 変化量が大きくなるとステップを細かくするという手法があると知りました。 ただし英語文献はいくつか見つかりましたが、具体的なCでの実装方法がわかりません。 Adaptive Runge-KuttaのC言語での実装方法についてお教えください。

  • 矩形法プログラムの計算値と計算誤差の求め方

    下記の矩形法の計算値を求めるプログラムで、区間分割数nを10から100まで10ずつ増やして計算値を求めるプログラムを作成したいのですが、どのようにしたらいいのか分かりません。Java初心者なのでJavaプログラムが詳しい人は至急ご連絡をお願いします。 *ちなみにこの矩形法プログラムのの計算誤差も分かる人はお願いしたいのですが・・・・・・  計算誤差の求め方は    計算誤差=(計算値ー真値)/真値×100(%) (真値=0.68269とする) public class Kukei { static double f(double x) { // ここに任意の被積分関数を記述 double y = Math.exp(- x * x / 2) / Math.sqrt(2.0 * Math.PI); return y; } public static void main(String[] args) { double a = - 1.0, b = 1.0; // 積分範囲 int n = 100; // 区間分割数 double h = (b - a) / (double)n; // 分割幅 double s = 0.0; for (int i=0; i < n; i++) { s += f(a + i * h); } s *= h; System.out.println("区間分割数 =" + n); System.out.println("矩形法による計算値 =" + s); } }

    • ベストアンサー
    • Java
  • 近似計算するプログラム

    近似計算法である4次のRunge-Kutta法を用い、プロット点を一斉にdos画面に表示したい場合、全体的にどのようなプログラムにすれば良いのでしょうか?最終的にはその多数のプロット点をエクセルに出力し、グラフを作りたいと思っています。 何を近似するのかは気にしていないので、色々探したところ、あるサイトから4次のRunge-Kutta法の一部分のプログラムを見つけ、以下のを使用することにしたのです。プログラムは全くの無知なので、どのくらいの量になるのか想像出来ませんが、もし短い容易なプログラムになるのであれば載せて頂けると有難いです。コンパイラはVBC++です。 反復 { v1dt = v(x[j] ) * dt v2dt = v(x[j] + v1dt/2 ) * dt v3dt = v(x[j] + v2dt/2 ) * dt v4dt = v(x[j] + v3dt ) * dt x[j+1] = x[j] + (v1dt + 2*v2dt + 2*v3dt + v4dt)/6 }

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

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

  • 常微分方程式の数値解法: 陰解法のルンゲクッタ法の公式について

    陽的なRunge-Kutta法は, y(i+1)=y(i)+1/6*(k1+2*k2+2*k3+k4) ただし,k1=hf(xi,yi), k2=hf(xi+h/2, yi+k1/2) k3=hf(xi+h/2, yi+k2/2) k4=hf(xi+h,yi+k3) と表すことは x=[x0,xn]の範囲でルンゲ・クッタ法により数値的にy(x)を解きたいのですが, 解こうとしている問題の初期条件がx=xnの時,y=0となっており,陰的(xnからx0に向かって)に解かなければならないのだろう,と考えています. 上記の公式でhの代わりに-hを入れて,プログラムを走らせても求めたい結果に大きな差異が生じてしまい困っています. そこで,陰的なRunge-kutta法の公式には,陽的な解き方と比較してどのような修正をすればよいか,教えてください. ちなみに解きたい微分方程式は, d2y/dx2 = x と仮定します. よろしくお願いいたします!!

  • プログラミング

    C言語のプログラミングで困っています。 二つの微分方程式 y'=yの解をx=0~1の範囲 y'=-4yの解をx=0~4の範囲 を、Runge-Kutta法により求めるプログラムを作りたいのですが、全く分からず困ってます。 初期条件はx=0,y=1で、また、間隔Δxを変えたときの解の変化も調べたい。 回答よろしくお願いします。

  • C言語のプログラミング教えて!!

    C言語で次の二つの微分方程式 y'=yの解をx=0~1の範囲 y'=-4yの解をx=0~4の範囲 を、Heun法、Runge-Kutta法により求めるプログラムを作りたい。 初期条件はx=0,y=1で、また、間隔Δxを変えたときの解の変化も調べたい。全くわからずお手上げ状態です。 分かる方がいましたら、回答よろしくお願いします。

  • 関数電卓の計算結果が-

    大学で関数電卓を使うことになり、今使い方を説明書を見ながら確認していました。積分問題を試しに計算してみたのですが、どうも計算結果が合いません。どなたかその原因を教えていただけませんでしょうか。 例えば、 ∫[区間:0からπ]x^2sinxdx を計算すると、π^2-4(=5.8696・・・)になりますが、関数電卓で 説明書の手順通り ∫(X^2sinX, 0, π)= と入力すると0.424・・・ という計算結果が表示されます。 これは何故でしょうか。おわかりになる方、よろしくお願い致します。

専門家に質問してみよう