

二階微分方程式をルンゲクッタで解くプログラムを作っているのですが、上手く合成関数が定義できず、上手く行きません。途中までプログラムを作ったので、見ていただけませんか??
問題
http://12lien.web.fc2.com/q.jpg
(PC環境Windows でX on windows 3 コンパイラはgcc )
プログラム⇒http://12lien.web.fc2.com/base.txt
プログラム中ではdx/dt = Y, x = X とおきました。
オネガイシマスm(_ _)m
No.1ベストアンサー
- 回答日時:
えっと, 2階微分方程式 d^2x /dt^2 = f(dx/dt, x) を Runge-Kutta で数値的に解くために dx/dt = y とおいて連立 1階微分方程式d(y, x)/dt = (f(y, x), y) を解きにいってるんですよね?
少なくとも, プログラム上で dy/dt を計算する関数 FUN に x を渡さないとダメですし, dx/dt を計算する関数は不要 (単に y を返すだけだし, それなら関数を呼ぶ必要はない) です.
でどうするかなんですが, まず dy/dt を計算する関数
double FUN(double t, double y, double x) {
ここで t, x, y を使って dy/dt を計算する
}
を作ります. そして, 実際に Runge-Kutta で解く関数では 1ステップずつ「これを呼出して y[i] を逐次計算⇒その情報を基にx[i] を計算」を繰り返すことになります. 挙げられたプログラムでは 2重ループになってるけど, これは無駄です. 大雑把には
for (i = 0; i < 1000; ++i) {
FUN を 4回呼出して t, x[i-1], y[i-1] から y[i] と x[i] を計算
}
という感じ. なお, FUN の 2回目以降の呼出しのときに x[i] もそれらしい値を使うよう注意する必要があります.
この回答への補足
一応、教えてくれた通り訂正しました。ですがまだ上手く行きません。tのおき方が悪いんでしょうか??
訂正プログラムhttp://12lien.web.fc2.com/base2.txt
No.4
- 回答日時:
どううまくいかないのか教えていただきたいところですが、少なくとも
x[i+1] = y[i+1] + 1.0 / 6.0 * ( j1 + 2.0 * j2 + 2.0 * j3 + j4);
は
y[i+1]じゃなくてx[i]では?
No.2
- 回答日時:
微分方程式を記述している関数で引数の受け取っているところが配列になっていないのは大丈夫なのでしょうか?
>double FUN(double t, double y,double x){
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
c言語で、繰り返し文の中で、0....
-
プログラミングでのテイラー展開
-
doubleの変数にintとintの割り...
-
atan2 オーバーロード関数の呼...
-
割り算ができない
-
C言語でdouble型の小数点の引き...
-
c言語 標準体重計算のプログラ...
-
たくさんの数の平均を求める方...
-
待ち行列シュミレーションのプ...
-
指数形式で入力するには
-
sin(x)の近似について
-
c言語のコンパイルエラー canno...
-
C言語(プログラミング)関連の質...
-
2次元配列 CXX0030とい...
-
128ビットの浮動小数点型
-
doubleは常に%lfとするべきなのか
-
C#イベント中の戻り値の設定の...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
C言語を実行すると-infが出てき...
-
C言語の型による処理速度の違い
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
doubleの変数にintとintの割り...
-
float型とdouble型の変数の違い...
-
-1.#IND00と出てしまうのですが...
-
c言語のプログラミングについて...
-
C言語で台形公式を使った二重積...
-
C言語でdouble型の小数点の引き...
-
C言語のプログラムで#include<m...
-
2次方程式の解を求めるプログ...
-
C言語の複素数についてです。
-
doubleは常に%lfとするべきなのか
-
関数におけるif文とreturn文に...
-
difftime()について
-
int とdoubleの比較
おすすめ情報