二階微分方程式をルンゲクッタで解くプログラムを作っているのですが、上手く合成関数が定義できず、上手く行きません。途中までプログラムを作ったので、見ていただけませんか??
問題
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 数学 dx/dt=x-2y +e^t dy/dt=-3x +2y+1 初期値[1,0] [x,y] この連 3 2023/05/15 18:23
- 物理学 量子力学 球面調和関数 導出 方位角成分 微分方程式の解 2 2022/07/02 13:40
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 数学 微分方程式 二階非線形 の問題で質問です。 ① y''-4y'+5y=e^(2x)/sinx ②y" 2 2022/11/07 23:57
- 数学 x=r・cosθの2回微分 θ=ωtとすると? 5 2022/05/10 23:53
- Windows 10 Windowsのタイムスケジューラーについての質問です。 先日、Webスクレイピング用のプログラムを 1 2022/09/28 05:51
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
至急です! マクロ定義で #defi...
-
C言語を実行すると-infが出てき...
-
C言語 関数プロトタイプ宣言の...
-
float型とdouble型の変数の違い...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
c言語で、繰り返し文の中で、0....
-
ax^2+bx+c=0の解を求めたいので...
-
2次方程式の解を求めるプログ...
-
doubleの変数にintとintの割り...
-
C言語で-23乗を取り扱うには
-
C言語の複素数についてです。
-
-1.#IND00と出てしまうのですが...
-
C 開放してるのにエラー(doubl...
-
c++について質問です
-
difftime()について
-
MQL4での条件文の書き方
-
たくさんの数の平均を求める方...
-
2次方程式の解
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
関数におけるif文とreturn文に...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
至急です! マクロ定義で #defi...
-
doubleは常に%lfとするべきなのか
-
Cで3乗根を求める方法
-
-1.#IND00と出てしまうのですが...
-
C言語で-23乗を取り扱うには
-
C++で外積
-
2次方程式の解を求めるプログ...
-
方程式を2分法を用いて解くプロ...
-
ニュートン法
-
c言語のコンパイルエラー canno...
-
difftime()について
おすすめ情報