06/10/31 16:47:36
自己解決しました
if文を入れてi=70だけを飛ばしました。
982:デフォルトの名無しさん
06/10/31 20:54:05
スマソ、助けてください。
例えば、この連立一次方程式
3x1+2x2+7x3+x4=8
x1+5x2+x3-x4=5
4x1+x2+3x3-2x4=7
x1+6x2+4x3+3x4=13
これをガウスジョルダン法で解きたいんですが
open文でデータを開いて計算したいんです。
プログラムはどのようにすればよいでしょうか?
983:982
06/10/31 20:56:03
ちなみに77でお願いします。
984:デフォルトの名無しさん
06/10/31 22:30:19
>>982
program hoge
parameter (N=4)
real a(N,N+1)
open(11, file='data.txt', status='old')
read(11,*) ((a(i,j), j=1,N+1), i=1, N)
close(11)
do 101 i=1, N
piv = a(i,i)
do 201 j=i, N+1
a(i,j) = a(i,j) / piv
201 continue
do 202 j=1, N
if (j .ne. i) then
t = a(j, i)
do 301 k = i, N+1
a(j,k) = a(j,k) - t * a(i, k)
301 continue
end if
202 continue
101 continue
write(*,*) (a(i, N+1), i=1, N)
stop
end
エラーチェックは省いたので「不正なデータ」を読ますとランタイムエラーになるw
985:982
06/10/31 22:44:32
>>984
おー、こんなに短くなるもんなんですね。
後は自分でやってみます。
ありがとうございますた(`・ω・´)
986:982の1/2
06/10/31 23:55:25
再度質問ですが
PARAMETER (NN=10)
DIMENSION A(NN,NN),B(NN),X(NN)
WRITE(*,*)'何元の連立方程式か、元数を入れてください。'
READ (*,*) N
WRITE(*,*) 'N=',N
OPEN(10, FILE='TEXT1.TXT', STATUS='OLD')
DO 1 I=1,N
READ (10,*) (A(I,J), J=1,N),B(I)
WRITE(10,*) (A(I,J), J=1,N),B(I)
1 CONTINUE
CLOSE(10)
DO 100 K=1,N-1
P=A(K,K)
DO 2 J=K+1,N
A(K,J)=A(K,J)/P
2 CONTINUE
987:982の2/2
06/10/31 23:56:57
B(K)=B(K)/P
DO 3 I=K+1,N
Q=A(I,N)
DO 4 J=K+1,N
A(I,J)=A(I,J)-Q*A(K,J)
4 CONTINUE
B(I)=B(I)-Q*B(K)
3 CONTINUE
100 CONTINUE
X(N)=B(N)/A(N,N)
DO 200 K=N-1,1,-1
S=B(K)
DO 5 J=K+1,N
S=S-A(K,J)*X(J)
5 CONTINUE
X(K)=S
200 CONTINUE
WRITE(*,*) ' 解 X '
DO 6 I=1,N
WRITE(*,*) X(I)
6 CONTINUE
STOP
END
ここまでは自分でアレンジしましたが、プログラムが回りません。
どこが間違っていますか?
988:デフォルトの名無しさん
06/11/01 20:47:30
>>986
> DO 1 I=1,N
のループの中で
ファイルからデータを読み込んだすぐ後に
同じファイルに上書きしてる。
> DO 3 I=K+1,N
のすぐ下
Q=A(I,N) → Q=A(I,K)
こんなところかな。
989:デフォルトの名無しさん
06/11/02 14:34:42
>988
出力形式になってなかったですね。
激しく感謝です。
990:デフォルトの名無しさん
06/11/03 00:40:49
そろそろ次スレたのむ、
テンプレも進化させてw
991:デフォルトの名無しさん
06/11/03 12:47:20
Formula 1
992:デフォルトの名無しさん
06/11/04 13:00:21
2007年はFORTRAN50周年だ。
俺達も盛大に祝おうぜ!!
993:デフォルトの名無しさん
06/11/04 16:32:22
FORTRAN = FORmula TRANslation
994:フォートランを初めて3日目
06/11/04 19:37:05
今、ワードのようなテキストデータの中に1961年から2005年までの乱雑した年
数だけわかっていて、そこから連続した数を抽出し、発生頻度と見なしてその
発生確率からポアソン分布による乱数を行なえるようなプログラムを知りたい
のですが、よければ、教えてくれませんか?
995:デフォルトの名無しさん
06/11/04 20:44:32
>>994
そのようにファイルから読み出すのは初心者には難しいだろう。
発生確率にするまで教えてやろう。
データ例を出せ。
そこから先の後半は、カテゴリーが違うので後だ。
まずは作業を概念的に分割して小さい単位で作れ。
996:フォートランを初めて3日目
06/11/05 11:34:08
データ例と言われましても、初めてでよくわからないのですけど、’nenpow.txt'
というようなワードの文章の中に112行1列(要は縦に一つずつの年報が並んでいる)
になっています。ちょっと描いてみると
1行目:1961
2行目:1961
3行目:1962
…
112行目:2005
というようになっており、ここからそれぞれの年報をまとめて発生個数として
ポアソン分布を作成し、それによる確率的な乱数を発生させるようにしたいの
ですけど・・・。
初めてなので、こういう解釈になってしまうのですけど、わかりますか?
997:フォートランを初めて3日目
06/11/05 11:38:56
できれはFORTRAN77と、90の両方でお願いしたいのですけど
998:デフォルトの名無しさん
06/11/05 12:14:28
>>997
PARAMETER (NYMIN=1961, NYMAX=2005, NTOTL=112)
INTEGER NUM(NYMIN:NYMAX)
DO I=NYMIN, NYMAX
NUM(I) = 0
END DO
OPEN(11, FILE='nenpow.txt', STATUS='OLD')
DO I=1, NTOTL
READ(11,*) NY
IF ((NY .LT. NYMIN) .OR. (NY .GT. NYMAX)) THEN
WRITE(*,*) 'ERROR:', I, NY
ELSE
NUM(NY) = NUM(NY) + 1
END IF
END DO
CLOSE(11)
DO I=NYMIN, NYMAX
WRITE(*,*) I, NUM(I)
END DO
STOP
END
長くなりそうなので、
ファイルから年を読んで NUM(1961)~NUM(2005) に各年の出現数を格納する
所まで
残りは誰かが次スレでw
999:デフォルトの名無しさん
06/11/05 17:39:02
FORTRAN = FORmula TRANslation
1000:デフォルトの名無しさん
06/11/05 17:39:39
次スレ
FORTRAN III
スレリンク(tech板)l50
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。