// オイラー法の計算開始 x1dot = x2; x2dot = -(g/l) * sin(x1); x1 = x1 + x1dot * dt; x2 = x2 + x2dot * dt; // オイラー法の計算終了 これはC言語です.オイラー法のプログラムを完成させてください.先の投稿が 削除できなくなってしまいました
適当な初期値を入れ,刻み幅 dt ずつ増やして for 文で回せばいいのではないでしょうか.
ぞごさん,もう少し聞き方を工夫すると良いかもしれません.たとえば
> はじめまして *** で *** をしている *** です. > オイラー法で「***」の計算をしたいのですが, > 行き詰まったので質問させていただきました. > // オイラー法の計算開始 > x1dot = x2; > x2dot = -(g/l) * sin(x1); >x1 = x1 + x1dot * dt; >x2 = x2 + x2dot * dt; >// オイラー法の計算終了 > までは何とか分かったのですが,C言語に不慣れなモノで > 実際に計算させるところまで持って行けません. > わらにもすがる思いです.ほんの少しでもいいので, > なにかヒントがありましたらよろしくお願い致します.
などいうのと,
> 完成させてください.
では意味あいが全然違ってきます.プログラミングは, 少しでも自分で考えればそれだけ力が付くそうですから :)
素早い返信ありがとうございます.これであっているのかさえわからない初心者でして・・・聞き方も以後,気をつけます. . 手元に,オイラー法の資料がほとんどないもので・・・オイラー法について解説された本て,売っていますかネ?
そうですね,僕も良く分かりませんでした. その時勉強させてもらったのが
のページです.オイラー法やルンゲ・クッタ法に ついて詳しく書いてありますので,参考にさせて頂いてはどうでしょう. 二次の常微分方程式についての例題は
の後半にあります.良く分からないときは, プログラムの動作を紙などに逐一書いて行けば理解の助けになりますよ.
恐れいりますが.「刻み幅dtをふやして」というのは,具体的にどういうことか教えてくだい.特に,プログラムでの書き方が分かりません
たとえば t を 0.0 から dt = 0.01 ずつ,t = 5.0 まで増やし, 一つ増やすたびに処理するには
double t, dt = 0.01;
for( t = 0.0; t <= 5.0; t += dt ){ 処理; 処理; }
などとなります.
---- 修正点
はじめは x を dt 増やすと書いていましたが, 感覚的に変なので,「t をdt ずつ増やす」に変更しました.