• 締切済み

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

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

みんなの回答

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

では, あなたのいう「Heun法」やあなたのいう「RUnge-Kutta法」のアルゴリズムを書いてください. 調べたということですから, なぜこんなことを言うかはあえて書くまでもありませんよね.

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.3

>もちろん質問する前に色々と調べたりそれなりの努力 この調べた内容、努力した内容を示しましょう。 何がわからないかが私たちはわかりません。 補足を要求します。 1,Heun法の理解度を書いてください(解までの過程はわかるか) 2,Runge-Kutta法の理解度を書いてください(解までの過程はわかるか) 3,C言語の理解度を書いてください

回答No.2

googleで「Heun法」・「Runge-Kutta法」で検索すると、それらしいソースコードが一発で出てくるのですが、参考にはならないのか。。。

sheva1234
質問者

補足

確かに検索するとソースコードは出てくるのですが、それをこの問題に適用するとなると難しくて、わけがわからなくて...困ってます。

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

「わからない」っていうだけでは分かるはずもなかろうに. 「調べる」努力をするつもりはないの?

参考URL:
http://oshiete1.goo.ne.jp/qa5403113.html
sheva1234
質問者

補足

もちろん質問する前に色々と調べたりそれなりの努力はしましたが、それでも分からない(理解できない)から質問しているのですが...

関連するQ&A

  • プログラミング

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

  • プログラムについて

    2つの微分方程式をEuler法、Heun法、Runge-Kutta法により求める。また、間隔Δxを変えたときの解の変化を調べたい。ただし、初期条件はx=0,y=1とする。分かる方がいましたら、回答よろしくお願いします。

  • ルンゲクッタ法による数値計算の高速化(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言語での実装方法についてお教えください。

  • C言語のプログラム

    C言語で2つの微分方程式をEuler法、Heun法、Runge-Kutta法により求めるプログラムを作りたい。ただし、初期条件はx=0,y=1とする。また、間隔Δxを変えたときの解の変化を調べたい。 Euler法のプログラムはどうにか分かったのですが、Heun法、Runge-Kutta法のプログラムがわかりません。 Euler法のプログラム #include_<stdio.h> #include_<math.h> int_main(){ __double__a=0; __double__b; __int_____m=10; __int_____n; __double__h; __double__x,y; __double__dydx; __int_____k; __double__e; __double__f; __printf("オイラー法計算例:y=e^x,_y=1/e^4x\n\n"); __//_y_=_e^x __b_=_1; __for(n=100;n<=10000;n*=100){ ____h_=_(b-a)/n; ____printf("y'_=_y:_h(=dx)_=_%.1e_(y=e^x)\n",h); ____x_=_a;_y_=_1; ____for(k=0;k<=n;k++)_{ ______x_=_k*h; ______if(k%(n/m)==0)_{ ________f_=_exp(x); ________e_=_fabs(y-f); ________printf("x=%.2f,_y=%f,_e^x=%f_er=%.0e\n", ________x,y,f,e); ______} ______dydx_=_y; ______y_=_y_+_dydx*h; ____} __} __printf("\n"); __//_y_=_1/e^4x __b_=_4; __for(n=100;n<=10000;n*=100){ ____h_=_(b-a)/n; ____printf("y'_=_-4y:_h(=dx)_=_%.1e_(y=1/e^4x)\n",h); ____x_=_a;_y_=_1; ____for(k=0;k<=n;k++)_{ ______x_=_k*h; ______if(k%(n/m)==0)_{ ________f_=_exp(-4*x); ________e_=_fabs(y-f); ________printf("x=%.2f,_y=%f,_1/e^4x=%f_er=%.0e\n", ________x,y,f,e); ______} ______dydx_=_-4*y; ______y_=_y_+_dydx*h; ____} __} __return_0; } 分かる方がいましたら、回答よろしくお願いします。

  • 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言語のプログラムを組まなければいけないのですが、 この理論がわからないのでおねがいします。

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

    陽的な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 と仮定します. よろしくお願いいたします!!

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

  • C言語のプログラムの問題で質問です。

    C言語のプログラムの問題で質問です。 問題は、 与えられた実数(a,b,c,d)に対して、次の連立非線形方程式の解 を「ニュートン法」を用いて解く。 f1(x,y)=y+ax^2-b=0 f2(x,y)=y^2+cx^2-d=0 ただし初期値(a,b,c,d)を入力でき、上記の方程式の解が画面表示されること。 という問題です。 普通の連立方程式を解くプログラムならできるのですが、ニュートン法 で解くというのが分かりません。 プログラムを教えてください。参考にしたいです。

  • C言語プログラミングで困っています。助けて下さい。

    C言語プログラミングで困っています。助けて下さい。 課題1-1: 実数 a と実数 b を入力すると、一次方程式ax + b = 0 の解を求めるプログラムを作る 課題1-2: 1-1 で作成したプログラムについて、さらにa として1が入力されたとき、方程式の表示       部分が1x + 3 = 0ではなくx + 3 = 0となるようにせよ 課題1-3: 1-2 で作成したプログラムについて、さらにb として0 や負の数が入力されたとき、方程式     の表示部分が2x = 0 や2x – 3 = 0となるようにせよ 課題1-4: 1-3 で作ったプログラムについて、さらにa の値として0が入力された場合、「解けません」     と表示するようにせよ 課題1-5: 係数 a, b, c を入力すると、 2次方程式ax2 + bx + c =0の解を表示するプログラムを作     れ ※ 1-2 ~ 1-4 のような機能を盛り込む ※ a が0の場合には、先に作った1次方程式のプログラムが動く という問題です。最終的にこれらを一つのプログラムにしてください。判別式や解の公式、ルート√などを使ってよろしくお願いします。C言語でお願いします