- ベストアンサー
fortran77
オイラー法とルンゲ・クッタ法 のプログラムを作るにあたっての質問です。 ネットで調べたら do i=0,N-1 x=x+h*f(x,y) t=t+h というのがでてきたのですが、 do文の中にiと言うものは一回も出てきていません。 どうしてこのようなものでまわるのでしょうか??? 初心者なので、わかりやすくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#1,3,6です。 > do文でxが変数ならxの値が変わるのはわかるのですが、 > iが変数なので、 > iとxの関係が見つけたプログラムだと書かれていないので > 変わらないと思ったのですが、、、、 > どうでしょう??? xもiも変数です。(違う言い方をするとiは「ループ変数」です。) do i=0,N-1 x=x+h*f(x,y) t=t+h を順を追って説明すると、(この3行だけに絞ります。また、便宜上変数に番号をつけます。) i=0 x1=x0+h*f(x0,y) t1=t0+h ↓ i=1 x2=x1+h*f(x0+h*f(x0,y),y) t2=(t0+h)+h ↓ i=2 x3=x2+h*f(x1+h*f(x0+h*f(x0,y),y),y) t3=((t0+h)+h)+h … (以下n-1まで続く。) の様に変化しますよね? iとxの関係をプログラムを書かなければいけないなんて言う規則はありません。 iは純粋に回数だけ覚えていれば良い変数なんです。(カウンターなんですから。) どうでしょう?
その他の回答 (6)
- edomin7777
- ベストアンサー率40% (711/1750)
#1,3です。 > xが変わるわけでもhやf(x,y)の値が > 変わるわけでもないので意味がないと思うのですが?? xの値は変わりますよね? x=x+h*f(x,y) で、次のループは変更されたxを使ってますよね? また、 t=t+h この処理は、ループに入れないで「t=t+n*h」でも同じかも…。
お礼
do文でxが変数ならxの値が変わるのはわかるのですが、 iが変数なので、 iとxの関係が見つけたプログラムだと書かれていないので 変わらないと思ったのですが、、、、 どうでしょう???
- Tacosan
- ベストアンサー率23% (3656/15482)
あぁそうか, そういう意味ではむしろ 「なぜ t が出てくるのかなぞ」 と書いた方が適切だった.
お礼
すこしごっちゃになってきているので・・・
- Tacosan
- ベストアンサー率23% (3656/15482)
微分方程式 dx/dy=f(x,y)=1+y^2 とオイラー法による式 x=x+h*f(x,y) で, どの変数とどの変数が対応しているのか, 理解できていないように思えます.
お礼
そうです!!!! 自分でそこがよくわかっていなかったので 疑問を日本語にしていただきありがとうございます!!
- edomin7777
- ベストアンサー率40% (711/1750)
#1です。「お礼」拝見しました。 *** これがわからないのですが・・・・ ループの中に変数がないと どんなに変数が変わっていっても 値は変わっていかないと思うのですが?? *** もう少し言語仕様を読んだ方が良いですよ…。 *** do 変数=初期値,最終値[,刻み幅] 繰り返したい処理 end do *** これで、勝手に(刻み幅によりますが)インクリメントされてループが回ります。 「繰り返したい処理」の中でループ変数を変更する必要はありません。言語の仕様です。 (ま~、ループ変数を変更することは出来ますが、変更した後の処理の方がめんどくさいし…。)
お礼
再びありがとうございます。 う~ん。まだいまいちわかりません do 変数=初期値,最終値[,刻み幅] 繰り返したい処理 end do これ自体はわかるのですが、 dx/dy=f(x,y)=1+y^2 で do i=0,N-1 x=x+h*f(x,y) t=t+h end do にしたとき、繰り返したい処理の中にiがないので、 いくら変数のiが変わっても xが変わるわけでもhやf(x,y)の値が 変わるわけでもないので意味がないと思うのですが?? 再びすいません。
- Tacosan
- ベストアンサー率23% (3656/15482)
i 以前に y がなぜ出てくるのだろうか? そちらの方が疑問.
お礼
dy/dx=f(x,y)=1+y^2 という式でなので、yが出てきています。
- edomin7777
- ベストアンサー率40% (711/1750)
何を言っているのか理解できないんですが…。 どうしてループの中にループで使用している変数が出てこなければいけないのでしょう? do 変数=初期値,最終値[,刻み幅] 繰り返したい処理 end do で、勝手に回ってくれるんですよ? ※c言語とかなら、ループを回すとき自分で増減させますが、この場合は勝手に1ずつ増加されます。
お礼
>どうしてループの中にループで使用している変数が出てこなければいけないのでしょう? これがわからないのですが・・・・ ループの中に変数がないと どんなに変数が変わっていっても 値は変わっていかないと思うのですが?? 詳しくおしえてください。
お礼
すごい!!!!!!!!!!!!!!!! やっとわかった気がします。 だからi=n-1なんですね。 iが変化するとxも連動して変わるなんてすごいですね。 ありがとうございました。