くだすれFORTRAN(超初心者用)その4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/01/24(土) 18:32:01もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。
●前スレ
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
●関連スレ
FORTRAN �W
http://pc11.2ch.net/test/read.cgi/tech/1163319215/
0367デフォルトの名無しさん
2009/06/24(水) 22:45:03まだ完全ではないようだが、ようやくF2003時代がやってきたw
0368デフォルトの名無しさん
2009/06/24(水) 22:49:38http://www.sic.shibaura-it.ac.jp/~i020201/programming_a/lecture_2005/lecture_09.pdf
ここのPDFをじっくり眺めてくれ
さすがに理解できるだろ
0369デフォルトの名無しさん
2009/06/24(水) 22:58:35今年はがんばれ。
質問でうまくおだてて解答ゲットしろw
0370デフォルトの名無しさん
2009/06/24(水) 23:05:27そして線形代数の本を買え
掃き出し法という名前で載っているかもしれないがとにかくそれだ
手で一回3×3程度の行列の逆行列を求めてみればおのずと
プログラムでやっている事も理解できる
0371デフォルトの名無しさん
2009/06/24(水) 23:08:37これとかな
いくらでもネット上にも情報はあるんだけどな
0372デフォルトの名無しさん
2009/06/24(水) 23:25:05ただプログラムできないです・・・ちなみにその去年の人じゃないよ
0373デフォルトの名無しさん
2009/06/24(水) 23:33:18おk。
疑問点を具体的に書いてくれれば、具体的に答えられるが、
漠然と聞かれると、漠然としか答えられない。
まぁがんばれw
0374デフォルトの名無しさん
2009/06/25(木) 04:52:56まあがんばれw
0375デフォルトの名無しさん
2009/06/25(木) 14:49:13というか、質問の仕方というものがあるだろう・・・。
いきなりソースコースばしばし貼りまくってから質問内容を言うのは、分かりにくいというか
それ以前のマナーの問題。せめて要点をまとめろよ。
0376デフォルトの名無しさん
2009/06/25(木) 15:24:15こっちも動くソースをばしばし貼って、それで終わりにして
質問は一切受け付けませんよという態度を取れば
0377デフォルトの名無しさん
2009/06/25(木) 15:52:01・ソース丸ごとではなく、最小限の部位に留める
・変数名を見やすい、もしくは一般的なものに変える
ぐらいはやってくれよと。こんなの常識じゃないかと思うんだが。
0378デフォルトの名無しさん
2009/06/25(木) 20:32:260379デフォルトの名無しさん
2009/06/25(木) 22:27:34ぐだぐだとプログラムを貼り付けてすいませんでした。。
あと、教えてくれた皆さんありがとうございます
0380デフォルトの名無しさん
2009/06/25(木) 23:03:19そうかそれはよかったな
君のした努力は決して無駄にならないと思うよ
これから線形代数・微積分学・複素関数論とかいろんな
数学をプログラミングする機会があると思うが、今した努力は
必ず生きてくる
特にFFTのプログラムなんか芸術的だぞ
バタフライ演算って言ってな
0381デフォルトの名無しさん
2009/06/25(木) 23:07:12ありがとうございます
読んでる内にどんどん楽しくなってきて、一気に今やってるところまで
読み進めれました。
これからもっとがんばります(`・ω・´)
0382デフォルトの名無しさん
2009/06/25(木) 23:20:350383デフォルトの名無しさん
2009/06/25(木) 23:44:58おまえの常識なんか初心者はしったこっちゃねーんだよw
0384デフォルトの名無しさん
2009/06/27(土) 15:04:27IMPLICIT REAL(A-H,O-Z)
REAL T(100),XZ(100,2)
DATA GRAV,V0,ANGLE/9.8,30.0,45.0/
DATA T0,VINT,TMAX/0.0,0.5,7.5/
PI=ATAN(1.0)*4.0
R=ANGLE*PI/180.0
C
DO 10 I=1,50,1
T(I)=REAL(I-1)*VINT
IF(T(I).GT.TMAX)THEN
STOP
END IF
XZ(I,1)=V0*COS(R)*T(I)
XZ(I,2)=-0.5*GRAV*T(I)**2+V0*SIN(R)*T(I)
10 CONTINUE
S=AREA(T,X,Z,T0,TMAX,R,GRAV)
CALL OUTPUT(T,X,Z,S)
STOP
END
0385デフォルトの名無しさん
2009/06/27(土) 15:06:47FUNCTION AREA (T,X,Z,T0,TMAX,R,GRAV)
IMPLICIT REAL(A-H,O-Z)
XMAX=V0*0.5*COS(R)*TMAX
X0=V0*0.5*COS(R)*T0
DO 20 I=1,16
AREA=0.0
DX=(XMAX-X0)/REAL(I)
T=REAL(I-1)*VINT
X1=V0*COS(R)*T
X2=X1+DX
Z1=TAN(R)*X1-0.5*(GRAV/(V0*(COS(R))**2))*X1**2
Z2=TAN(R)*X2-0.5*(GRAV/(V0*(COS(R))**2))*X2**2
AREA=AREA+(Z1+Z2)*DX*0.5
20 CONTINUE
RETURN
END
0386デフォルトの名無しさん
2009/06/27(土) 15:09:07SUBROUTINE OUTPUT(T,X,Z,S)
IMPLICIT REAL(A-H,O-Z)
INTEGER NO(100)
REAL T(100),XZ(100,2)
C
OPEN(16,FILE='menseki2.res')
WRITE(16,'(A)')' TIME CX CZ SPACE'
DO 30 I=1,16
WRITE(16,'(F5.1,2F10.2)') T(I),(XZ(I,J),J=1,2)
WRITE(16,'(F10.2)') S
30 CONTINUE
CLOSE(16,STATUS='KEEP')
RETURN
END
物体の投げあげの時間、X座標とZ座標、台形積分の計算をファイルに出力したいのですが、コンパイルしてもファイルが作られません。
ファイルは時間が1次元配列、X座標とZ座標が2次元配列です。
どう改善すればよいのでしょうか
0387デフォルトの名無しさん
2009/06/27(土) 15:45:54T(I) が TMAX (=7.5) を超えたところでSTOPするようになってるから。
てゆーかぱっと見、変数の使われ方が変だ。
XZ は宣言されてるが X とか Z が突然出てきてるぞ。
IMPLICIT NONEで動くところまで書き直せ。
0388デフォルトの名無しさん
2009/06/27(土) 17:50:39あんた>>352-354か?
ソースを貼るなとは言わんが、まず「○○で困っています。××はどうすればいいでしょうか?ソースは以下の通りです」とか書いてから貼れよ
0389デフォルトの名無しさん
2009/06/27(土) 17:57:120390デフォルトの名無しさん
2009/06/27(土) 22:05:47それ以前に、コンパイルが通らないんだろ。
AREAの引数のTが、スカラー定義なのに配列を渡している。
書き方は古いが、非常にオーソドックスで正当な書き方をしている。
しかし、実際の論理というか中身はかなり??
簡単には直らんw
03911/2
2009/06/27(土) 22:59:57IMPLICIT REAL(A-H,O-Z)
REAL T(100),XZ(100,2)
DATA GRAV,V0,ANGLE/9.8,30.0,45.0/
DATA T0,TINT,TMAX/0.0,0.5,7.5/
PI=ATAN(1.0)*4.0
R=ANGLE*PI/180.0
C
C ! IMAX <= 100 no check www
IMAX = INT((TMAX - T0) / TINT) + 1
DO 10 I=1,IMAX
T(I)=T0 + REAL(I-1)*TINT
XZ(I,1)=V0*COS(R)*T(I)
XZ(I,2)=-0.5*GRAV*T(I)**2+V0*SIN(R)*T(I)
10 CONTINUE
S=AREA(IMAX, XZ)
CALL OUTPUT(IMAX, T,XZ,S)
STOP
END
C
FUNCTION AREA(IMAX, XZ)
IMPLICIT REAL(A-H,O-Z)
REAL XZ(100, 2)
AREA=0.0
DO 20 I=1, IMAX - 1
AREA=AREA+( XZ(I,2)+XZ(I+1,2) )*( XZ(I+1,1)-XZ(I,1) )*0.5
20 CONTINUE
RETURN
END
03922/2
2009/06/27(土) 23:02:17SUBROUTINE OUTPUT(IMAX,T,XZ,S)
IMPLICIT REAL(A-H,O-Z)
INTEGER NO(100)
REAL T(100), XZ(100,2)
C
OPEN(16,FILE='menseki2.res')
WRITE(16,'(A)')' TIME CX CZ SPACE'
DO 30 I=1,IMAX
WRITE(16,'(F5.1,2F10.2)') T(I),(XZ(I,J),J=1,2)
30 CONTINUE
WRITE(16,'(A, F10.2)') 'AREA=', S
CLOSE(16,STATUS='KEEP')
RETURN
END
イマイチよく分からんが、こうかな?
とりあえず放物線のようなものは描く。
しかし、地面をつきぬけていくので全積分面積は負になる。
この辺は適宜修正してくれ。
0393名無し
2009/07/01(水) 17:03:04あるデータを読みこんで画面に表示させるプログラムなのですがうまくいきません。よろしくお願いします。
implicit none
integer MM,K,X,Y
parameter (MM=500,K=100)
integer year(MM),month(MM),day(MM),sl(K,MM)
character cdummy,CFNAME
X=0
CFNAME='/home/maekawa/numeric/kure.txt/'
open(1,file=CFNAME,status='old')
1010 X=X+1
read(1,10,END=1020)cdummy,year(MM),cdummy,month(MM),
@ cdummy,day(MM),(sl(Y,MM),Y=1,24)
10 format(A5,I2,A1,I2,A1,I2,24(a1,I3))
write(6,*)year(MM),month(MM),day(MM),sl(Y,MM)
goto 1010
1020 close(1)
X=X-1
end
0394名無し
2009/07/01(水) 17:03:54コンパイルはできるのですが実行すると
forrtl: Is a directory
forrtl: severe (30): open failure, unit 1, file /
Image PC Routine Line Source
a.out 0809916D Unknown Unknown Unknown
a.out 080986E5 Unknown Unknown Unknown
a.out 0806B758 Unknown Unknown Unknown
a.out 0804C153 Unknown Unknown Unknown
a.out 0804BAB0 Unknown Unknown Unknown
a.out 08052838 Unknown Unknown Unknown
a.out 08049D6C Unknown Unknown Unknown
a.out 08049CC1 Unknown Unknown Unknown
libc.so.6 B7E7A3B0 Unknown Unknown Unknown
a.out 08049C01 Unknown Unknown Unknown
というエラーになります。
質問の仕方も上手ではないので分かりにくい点があるようでしたら申し訳ないのですがその点もご指摘いただけたらと思います。
よろしくお願いします。
0395デフォルトの名無しさん
2009/07/01(水) 17:04:57最後の / が余計なのでは?
CFNAME='/home/maekawa/numeric/kure.txt'
0396名無し
2009/07/01(水) 17:10:56しかし直して見ましたがエラーは直りませんでした。
どうすればよろしいのでしょうか?
0397デフォルトの名無しさん
2009/07/01(水) 17:24:49character cdummy,CFNAME
を
character cdummy,CFNAME*80
にしてみて。
0398名無し
2009/07/01(水) 17:33:100399デフォルトの名無しさん
2009/07/01(水) 17:40:46forrtl: severe (30): open failure, unit 1, file /
このメッセージは、open(1,file=CFNAME,status='old')の行で出力されていると思います。
メッセージの最後が "file /" となっていることから、
CFNAMEに格納されているファイル名が、"/" 一文字だけであると判断できます。
メッセージの"Is a Directory" は、 ファイル名として渡された "/"が、
ディレクトリなのでオープンできないことを意味します。
0400名無し
2009/07/01(水) 17:49:00write(6,*)year(MM),month(MM),day(MM),sl(Y,MM) の「sl(Y,MM)」の部分がずっとゼロで表示されます。
3けたの数字が24個よこに表示されるはずなのですが…
0401デフォルトの名無しさん
2009/07/01(水) 17:56:17を
write(6,*)year(MM),month(MM),day(MM),(sl(Y,MM),Y=1,24)
に変えたらどうなりますか?
0402名無し
2009/07/01(水) 18:11:57自分でも調べてみたのですがそのような数字はデータに見当りませんでした。
作った私がいうのもなんですが配列の型宣言あたりでKやYや使っているのが間違いではないかと思うのですが…ここは大丈夫なのでしょうか?
0403デフォルトの名無しさん
2009/07/01(水) 18:17:02@ cdummy,day(MM),(sl(Y,MM),Y=1,24)
を
@ cdummy,day(MM),(cdummy,sl(Y,MM),Y=1,24)
に変えます。
0404名無し
2009/07/01(水) 18:36:59表示する量が多すぎて最初の方のデータが表示されないのですが、すべて表示するにはどうすればよいでしょうか?
細かいところまで大変お手数お掛けします…本当に助かります。
0405デフォルトの名無しさん
2009/07/01(水) 18:38:52まったくわかりません。
少ない行数でできるらしいのですが、どうか教えてくれませんか?
fortran77を学校では使ってます。
0406デフォルトの名無しさん
2009/07/02(木) 01:35:33まず、ちみが用いようとしている行列式の公式ないしアルゴリズムを指定してくれ。
いろいろやり方はある。
0407デフォルトの名無しさん
2009/07/03(金) 21:13:100408デフォルトの名無しさん
2009/07/03(金) 22:25:02131 'Ashikaga' 65 31 54
101 'Miyoshi' 64 43 62
156 'Chousokabe' 82 58 48
86 'Imagawa' 55 60 72
53 'Houjou' 88 64 73
といったようなデータを読み込んで、
番号 名前 国語 理科 数学 合計 平均
〜何らかの値〜
国語平均 理科平均 数学平均 標準偏差
〜何らかの値〜
といった、表を出力したいのですが
おそらく、最後のprint文がミソだと思うのですがどうしたらいいかわかりません。
以下のプログラムに何を付け加えればいいのでしょうか?
また、どこか間違っている箇所があればご指摘ください。
fortran90を使っています。
0409デフォルトの名無しさん
2009/07/03(金) 22:26:38integer::n,ten(1:3)
real(8)::sum(1:3),sum2(1:3)
real(4)::mean(1:3),sd(1:3),heikin
integer::io
integer::bango,gokei
character*14::kamoku(1:3),namae
!
kamoku(1)='国語'
kamoku(2)='数学'
kamoku(3)='理科'
n=0
do i=1,3
sum(i)=0.0D0
sum2(i)=0.0D0
end do
!
0410デフォルトの名無しさん
2009/07/03(金) 22:29:07read(5,*,iostat=io)bango,namae,(kamoku(i),i=1,3)
if(io/=0)then
exit
end if
n=n+1
do i=1,3
sum(i)=sum(i)+ten(i)
sum2(i)=sum2(i)+ten(i)**2
end do
end do
gokei=ten(1)+ten(2)+ten(3)
heikin=gokei/3.0
do i=1,3
mean(i)=sum(i)/n
sd(i)=sqrt((sum2(i)-(sum(i)**2)/n)/n)
end do
print *,'人数=',n
do i=1,3
print *,'科目',kamoku(i),mean(i),sd(i)
end do
stop
end program ex8_1a
よろしくお願いします。
0411デフォルトの名無しさん
2009/07/03(金) 23:36:09足りない分は、ゴミが入る。
倍精度に定数を与えるときなども注意しなければならない。
0412デフォルトの名無しさん
2009/07/03(金) 23:38:29thx
0413デフォルトの名無しさん
2009/07/04(土) 10:00:10ゴミが入るのは、
real(8) a
a=1.0
みたいに倍精度で定義したのに倍精度で代入しなかった場合だね。
宣言の精度が違う場合には407のいう「足りない桁」の部分は
そもそもメモリ上に存在しない。仮にあるとして説明すると、
足りない桁の直前の桁がランダムに切り上げられたり切り下げられたりする、といったところか。
>>408
三好君はもっと出来る子・・・・。
read文でkamoku(1:3)に点数が入ってるけどそのあと使われてないね。
おそらく、
sum(i) = sum(i)+kamoku(i) に変更。
sum2(i) = .... も同様。
goukei=sum(1)+sum(2)+sum(3) に変更。
配列 ten(1:3) はいらなくね?
0414408
2009/07/04(土) 11:58:35ありがとうございます。プログラムがすっきりしました。
ところで、>>408に書いたように、表みたいに出力したいのですが
以下のプログラムでは読み込んだデータの最後のものが繰り返されてしまいます。
どこがおかしいのでしょうか?
0415デフォルトの名無しさん
2009/07/04(土) 11:59:42integer(8)::n,kamoku(1:3)
real(8)::sum(1:3),sum2(1:3)
real(4)::mean(1:3),sd(1:3),heikin
integer::io
integer::bango,gokei
character*14::namae
!
n=0
do i=1,3
sum(i)=0.0D0
sum2(i)=0.0D0
end do
0416デフォルトの名無しさん
2009/07/04(土) 12:01:37read(5,*,iostat=io)bango,namae,(kamoku(i),i=1,3)
if(io/=0)then
exit
end if
n=n+1
do i=1,3
sum(i)=sum(i)+kamoku(i)
sum2(i)=sum2(i)+kamoku(i)**2
end do
end do
gokei=kamoku(1)+kamoku(2)+kamoku(3)
heikin=gokei/3.0
do i=1,3
mean(i)=sum(i)/n
sd(i)=sqrt((sum2(i)-(sum(i)**2)/n)/n)
end do
print *,'人数=',n
do i=1,n
print *,'名前',namae,'国語',kamoku(1),'数学',kamoku(2),'理科',kamoku(3),'平均',heikin,'合計',gokei
enddo
do i=1,3
print *,'科目平均',mean(i),'標準偏差',sd(i)
enddo
stop
end program
0417デフォルトの名無しさん
2009/07/04(土) 12:29:05データを読み込む時に毎回kamoku(1)〜(3)を上書きしてるから
0418デフォルトの名無しさん
2009/07/04(土) 12:34:33namae, kamoku(1),kamoku(2),kamoku(3),heikin,gokeiの出力は
最初のDOループの内側でやらないとだめでしょ。
0419デフォルトの名無しさん
2009/07/04(土) 12:57:31character*6::kamokumei(1:3)=(/'国語','数学','理科'/)
データを1行読むごとに、すぐに出力してしまう。
gokei=kamoku(1)+kamoku(2)+kamoku(3)
heikin=gokei/3.0
print *,'名前',namae,(kamokumei(i),kamoku(i),i=1,3),'平均',heikin,'合計',gokei
最後に、科目ごとの平均と標準偏差を出力する。
print *,'人数=',n
do i=1,3
mean(i)=sum(i)/n
sd(i)=sqrt((sum2(i)-(sum(i)**2)/n)/n)
print *,kamokumei(i)//'平均',mean(i),'標準偏差',sd(i)
end do
0420414
2009/07/04(土) 15:51:27アドバイス、ありがとうございました。
>>418さん
なるほど、do文の中にprint文を入れるんですね!
おかげさまでうまくいきました。
>>419さん
別にprint文は最後にまとめなくて良いんですね!
細やかなご指摘、ありがとうございました。
みなさん、本当にありがとうございました!
0421デフォルトの名無しさん
2009/07/04(土) 16:43:36FORTRAN使いの方の中にはCとの連携をしている人も
多いと思うのでアドバイス下さい。
FORTRANで作成したサブルーチンを活用し、C++からコール
する形でコードを再利用しようと考えています。
C++からFORTRANを呼び出すのはすぐに出来たのですが、
データの引渡しで困っています。
FORTRAN側ではグローバルな変数を多数(100個以上)宣言
しており、引数としては渡せないのでC++側でも同名の
変数を宣言して共用し、データのアクセスをしようと
目論んでいます。
しかし、FORTRANでexternに相当する宣言の仕方が分からず、
うまく同じ領域を共用できるようになっていません。
具体的にどんなことをすれば良いのかご存知の方がいらっ
しゃいましたら、ぜひご教授願います。
環境は、WindowsでVisualC++とVisual FORTRANを使って
います。
宜しくお願いします。
0422デフォルトの名無しさん
2009/07/04(土) 16:47:57subroutine foo(nn,letter)
character(len=nn) letter
return
end
とかって出来ないの?
コンパイルでエラーでるんだけど
0423デフォルトの名無しさん
2009/07/04(土) 16:58:14名前付き COMMON を使います。
0424デフォルトの名無しさん
2009/07/04(土) 17:03:03gfortran では、エラーなくコンパイルできました。
エラーメッセージを貼ってみたら?
0425デフォルトの名無しさん
2009/07/04(土) 17:57:35マニュアルにグダグダ書いてあるから読むがよろしい。
いくつか方法がある。
結構めんどい。
Fortran2003のCとの連携ルーチンを使うという手もある。
0426デフォルトの名無しさん
2009/07/04(土) 18:00:54>>422 ではないけど、g77 でやってみた。
% g77 -c lett.F
lett.F: In subroutine `foo':
lett.F:1:
subroutine foo(nn,letter)
1
lett.F:2: (continued):
character(len=nn) letter
2
Invalid declaration of or reference to symbol `nn' at (2) [initially seen at (1)]
gfortran は問題なかった。そもそも FORTRAN77 の規格ではこんな書き方を許していなかったはず。
0427デフォルトの名無しさん
2009/07/04(土) 18:22:42前に質問したことは解決したんですが、
今度は書式制御でつまずいてしまいました。
変数等は
integer(8)::n,kamoku(1:3)
real(8)::sum(1:3),sum2(1:3)
real(4)::mean(1:3),sd(1:3),heikin
integer::io
integer::bango,gokei
character*14::namae
character*6::kamokumei(1:3)=(/'国語','数学','理科'/)
で、定義しています。
print "(a2,a14,a2,i7,a2,f7.2,$)",'名前',namae,(kamokumei(i),kamoku(i),i=1,3),'平均',heikin
と
print "(a2,a2,f7.2,a4,f7.2,$)",kamokumei(i)//'平均',mean(i),'標準偏差',sd(i)
は、どこがおかしいんでしょうか?
書式をこのように書いた場合、エラーが出てうまくいきません。
0428デフォルトの名無しさん
2009/07/04(土) 18:34:32FORTRAN77しばらく書いてないから忘れちゃったけど、
CHARACTER*(NN) または CHARACTER*(*)でなかったかい?
g77なんてウンココンパイラ使うなよw
0429名無し
2009/07/09(木) 16:58:58implicit none
integer MM,KK,M,K
parameter (MM=100,KK=100)
integer year(MM),month(MM),day(MM),sl(KK,MM)
character cdummy,CFNAME*80
M=0
CFNAME='/home/maekawa/numeric/kure.txt'
open(1,file=CFNAME,status='old')
1010 M=M+1
read(1,10,END=1020)cdummy,year(M),cdummy,month(M),
@ cdummy,day(M),(cdummy,sl(k,M),k=1,24)
10 format(A5,I2,A1,I2,A1,I2,24(a1,I3))
write(6,*)year(M),month(M),day(M),(sl(k,M),k=1,24)
goto 1010
1020 close(1)
M=M-1
end
SLの24の値を平均して一個のデータにして新しい配列を作って代入する、という事をしたいのですがどのようなことを付け加えればよろしいでしょうか。
おかしい質問かもしれませんがよろしくお願いします。
0430デフォルトの名無しさん
2009/07/10(金) 09:09:38なぜこういうことが起きるのか教えてください。
A=X+1 (←XとYは未定義)
B=Y+1
Z=1 (暗黙の型宣言)
C=A+B
というような場面でZ=1を入れるかどうかでCの値が変わるんですが。
XとYが未定義なのでどこかめちゃめちゃなアドレスを参照していて、
Zの宣言によって参照するアドレスが変わるとかそんな感じでしょうか?
でも未定義とはいえ既に代入してあるんで結果が変わるのは不思議な気がします…
0431デフォルトの名無しさん
2009/07/11(土) 00:57:16試してみましたけど、ifort 11.0とgfortran 4.3.2では再現されないですね。
処理系、教えてもらえますか?
0432デフォルトの名無しさん
2009/07/11(土) 05:27:22アドレス参照して値取り出して・・・は最近のCPUではある程度まとめて出来るだろうけど、
定数の代入とかI/Oみたいに、まとめてしなくても良い or まとめて出来ない処理が
混じるとそこで一度仕切るというかなんか処理が変わるんだろうな・・・と適当な事を書いてみる。
>>430 の Z=1 の代入文を
(なにもしない)continue文に変えてみたらどうなるのだろう?
0433デフォルトの名無しさん
2009/07/11(土) 15:27:140434デフォルトの名無しさん
2009/07/11(土) 17:24:15誰かの本にそういう話があったな。誰のだったっけ?
0435デフォルトの名無しさん
2009/07/11(土) 18:15:44Fortran2003でOOP対応が一通りそろった。
0436デフォルトの名無しさん
2009/07/13(月) 20:15:36Fortranが使われるような数値計算の分野で、どういう場面で有用なのか
いまいちイメージ沸きません
0437デフォルトの名無しさん
2009/07/13(月) 20:24:340438デフォルトの名無しさん
2009/07/13(月) 23:01:28MPIのルーチンとかがC++で書かれていて、引数の型がpolymorphism的に任意に
なっていたりすると、F90のPASCAL的な厳格な型判定では、インターフェースも
書けない。型判定を緩くしようというような消極的な事情もあるようだよ。
0439デフォルトの名無しさん
2009/07/14(火) 01:06:44遅くなってすいません。OSはXP、intel fortranの11.0+visual studioです。
多分そちらと同じですよね?上のは少し単純化してありますけど、
AとBの右辺がもう少し複雑になってて既知の数で割ったり足したりしてるだけなんで
おかしなことに変わりはないと思いますが…
>>432
continueに変えても値が変わりました…ちなみに
write文のときは何が原因でしたか?
0440デフォルトの名無しさん
2009/07/14(火) 01:17:31C++はよ消えてなくなれ、ということか。
あれはFortranやCとはあまり親和性が無いから嫌いだ。使うけど。
>>439 後半
原因不明のまま放置w 432でかいたけど
I/O の直前まで、I/O の行、I/O よりうしろ、
でコンパイラが作業を区切るからではないかと推定したw。
自分の時には write文でなくても read文でも同じだったから。
コンパイラにもよるのかもなあ。
同じ経験はDEC Fortranのころからあった気がする。というかIntelのはDECの系譜だろうし。
0441デフォルトの名無しさん
2009/07/17(金) 02:00:58化学プロセスの設計のときとか
撹拌槽やら蒸留塔やらいろんなクラスを作っておいて
後で自由に組み合わせたりできそうだな。
問題は、うちのボスがオブジェクト指向を理解できない、ということだな…
0442デフォルトの名無しさん
2009/07/17(金) 02:17:340443デフォルトの名無しさん
2009/07/18(土) 17:26:27普通の数値計算は、方程式をいかに早く効率良く解くか、というのが主眼だから
オブジェクトなんてものを持ち出す必要性も少ないってことじゃないかと。
計算資源の観点からはむしろマイナスだし>OO
0444デフォルトの名無しさん
2009/07/18(土) 22:46:24成績順に並び替えるっていうプログラムを作りたいんだけど、
SUBROUTINEを、
・平均を求めるもの
・偏差値を求めるもの
・成績に並び替えるもの
の3つを作ればいいってこと?
それぞれのサブルーチンの作り方がよく分からないので教えてもらえませんか?
最後の成績はSWAP・・・?
77使ってます
0445デフォルトの名無しさん
2009/07/18(土) 23:43:20> ・平均を求めるもの
> ・偏差値を求めるもの
> ・成績に並び替えるもの
> の3つを作ればいいってこと?
> それぞれのサブルーチンの作り方がよく分からないので教えてもらえませんか?
> 最後の成績はSWAP・・・?
つまり
・平均値の求め方を知らない
・偏差値の求め方を知らない
・数の大小関係を知らない
ということですね?
FORTRAN 以前の問題なので、中学校あたりの数学からやり直すべきでは?
0446デフォルトの名無しさん
2009/07/18(土) 23:50:380447デフォルトの名無しさん
2009/07/19(日) 00:30:56ここはノンケ大歓迎で宿題有りのスレなんだぜ。
0448デフォルトの名無しさん
2009/07/19(日) 00:50:34並べ替えのf77参考
http://www.geocities.jp/eyeofeconomyandhealth/homepage/mondai/kotae1-5.html#1
F90の参考プログラム
あまり変更なしでf77になる。
平均値と偏差値
http://ns1.shudo-u.ac.jp/~kadoya/fort/sec5.html#ex5_4
並べ替え
http://ns1.shudo-u.ac.jp/~kadoya/fort/sec6.html#ex6_1
0449デフォルトの名無しさん
2009/07/19(日) 01:13:52同一かなぁ、、。
こちらの質問より大分低次元な質問だけど、、。
0450デフォルトの名無しさん
2009/07/19(日) 01:20:00やらんのかいw
0451デフォルトの名無しさん
2009/07/19(日) 08:14:24まぁ宿題代行スレなら丸投げもいいのかもしれないけど。
0452デフォルトの名無しさん
2009/07/19(日) 19:02:54宿題厨はカエレ
0453デフォルトの名無しさん
2009/07/21(火) 16:57:39このご時世、Fortran の講義があるだけ、ありがたいと思わなければ。
我ら先達が、後進達を引っ張ってあげるのだよ。
0454デフォルトの名無しさん
2009/07/21(火) 23:08:22ん?
このスレはFORTRAN IVの本スレで宿題厨を排除したので立った初心者スレだぞ。
0455デフォルトの名無しさん
2009/07/21(火) 23:11:23新参者なので位置付けを分かってません。
0456デフォルトの名無しさん
2009/07/21(火) 23:22:23代行するもよし、ヒント出しもよし、生暖かく見守るもよし。
0457デフォルトの名無しさん
2009/07/21(火) 23:43:14>>456の言うとおり。
スレタイにあるように超初心者用なのでネットマナー違反も大目に見る。
麻薬の売人と同じで、最初は無料で甘い汁を吸わせて甘やかして気持ちよくさせて
初心者をFortran依存症にするスレだ。依存症にした後は骨まで搾り取る。
0458デフォルトの名無しさん
2009/07/21(火) 23:44:240459デフォルトの名無しさん
2009/07/21(火) 23:49:16Windowsプログラムを作ろうとは思わないが、
計算に使うのには理想的だと思う。
頼むから、もういじらないでくれ・・・
0460デフォルトの名無しさん
2009/07/22(水) 00:55:31流行らないけど、廃れないから、一生役に立つ。
0461デフォルトの名無しさん
2009/07/22(水) 11:30:52100 個の変数の組: a1 = 1, a2 = 2, ..., a100 = 100
を作りたいのですが、どうすればよろしいのでしょうか?
(新しい変数名における数字は、配列の添え字 k に対応
させたいです。)
素人質問ですみませんが、どうぞよろしくお願いします。
0462デフォルトの名無しさん
2009/07/22(水) 12:44:32それ無理!
強いて言えばポインターをつかうか。
しかし考え方を変えた方がいい。
0463デフォルトの名無しさん
2009/07/22(水) 13:50:31>依存症にした後は骨まで搾り取る
ドカタ量産ですね^^
0464デフォルトの名無しさん
2009/07/22(水) 13:53:02無理ですか・・・。今、A x = b (行列 A は複素三重対角行列) の
固有値問題を解こうと思っているのですが、手元のライブラリ
(NEC 製科学技術計算ライブラリ ASL)は、行列 A やベクトル b が
多次元の場合には対応していないようなのです。
ですので、面倒ですが一旦行列 A(k) を A1, A2, ..., Ak に変換し、
その後に
call subroutine(A1, b1, ...)
call subroutine(A2, b2, ...)
call subroutine(A3, b3, ...)
...
call subroutine(Ak, bk, ...)
と全ての k の場合について毎回サブルーチンを呼ぼうと考えていました。
たとえこのようなことが原理的に可能であったとしても、k が大きい場合には
現実的ではなさそうですね。
多次元の三重対角行列を高速に解くようなライブラリ(非商用含む)が
あればいいのですが、何かありますでしょうか?
0465デフォルトの名無しさん
2009/07/22(水) 14:25:40> >> 462 さん
> 無理ですか・・・。今、A x = b (行列 A は複素三重対角行列) の
> 固有値問題を解こうと思っているのですが、
一瞬、連立方程式に見えた。A の固有値問題を解きたいということで、以下。
> 手元のライブラリ
> (NEC 製科学技術計算ライブラリ ASL)は、行列 A やベクトル b が
> 多次元の場合には対応していないようなのです。
対応していないのが信じられん。そんなもんワシなら金を出したくない。
http://www.nec.co.jp/APSOFT/SX/asl/BBGMSL.html
の連立1次方程式の例ではそんなことないようだが?
https://www.jss.jaxa.jp/sss/nqsII-web/img/man-r141/ASL/ASL/pdf/1aslsxpj.htm
から適当に探せ。ちょっと見る限りでも普通に使えそうなんだけど。
一般複素行列で考えた方が楽かも?
> 多次元の三重対角行列を高速に解くようなライブラリ(非商用含む)が
> あればいいのですが、何かありますでしょうか?
自分でインストールできるなら、LAPACK か ATLAS という選択肢もある。
既に入ってるかもしれないけどね。速度については知らん。
0466465
2009/07/22(水) 14:29:55だったら、どうして良いか分かりません。外部ファイルにデータで置いておいて、1つ
ずつ処理するとか?
■ このスレッドは過去ログ倉庫に格納されています