- 締切済み
FORTRANのプログラムについて
program dat real x(100), y(100) s2=0 read(*,*) m,h open(7,file='test2.txt') do i=1,m read(7,*,end=200) x(i),y(i) s1=h/2*(y(1)+y(m)) s2=s2+h*(y(i)) s3=h*y(1) end do 200 close(7) sum=s1+s2-s3 write(*,*) 'sum=',sum end 台形公式を求めるプログラムを書いています。 テキスト形式でまずデータを取り込みます。 刻み幅はhです。ただしデータ数は未知数です。 上のようにプログラムを書いたのですが、うまく働きません。どうすればよろしいでしょうか? ご教授お願いします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- KanjistX
- ベストアンサー率55% (48/86)
補足ありがとうございます。 どのような意図でs1とs3を別々に置いたのかよくわからなかったので、一部改変したものを示します。 ・s1=h/2*(y(1)+y(m))をs1=h/2*(y(1)+y(i))に変更 ・s3=h*y(1)の行を削除 ・sum=s1+s2-s3をsum=s2-s1に変更 台形公式 Σ{i=1,n-1}{h/2*(y(i)+y(i+1))} =Σ{i=1,n}{h*y(i)} - h/2*(y(1)+y(n)) という式変形をもとに組み替えました。
- KanjistX
- ベストアンサー率55% (48/86)
「うまく働きません」の内容を教えていただけますでしょうか。 コンパイル・実行は確認しました。 計算結果が合わないというご質問でよろしいでしょうか。 たぶんですが、do文のi=1,mはi=1,m-1にすべきだと思います。 展開すればわかりますが、お示しのプログラムでは、h*y(m)だけ余計に加えています。
補足
御回答ありがとうございました。 失礼しました。 コンパイルは通るみたいですが、計算結果があいません。 よろしくお願いいたします