1 名前:デフォルトの名無しさん [2006/01/24(火) 09:48:23 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済をお願いします。
331 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 15:48:54 ] >>330 申し訳ありません。 バブルソートでの解に関しましては、御礼申し上げます。 もし、気分を害されてないようでしたら、直接選択法の解をお願いできませんか?
332 名前:デフォルトの名無しさん [2006/05/24(水) 16:16:20 ] >>330 まぁそうなんだけどさ,ここは2chだし,いいんでないのw Fortran人口を増やすためにも甘い水で誘うべしw
333 名前:330 mailto:sage [2006/05/24(水) 16:34:51 ] >>331 オレじゃなくて、>>328 に 感謝して、非礼を詫びろ。 >>332 たしかにそうとも思うが、 そういう教育はだれかがしなければ、 会社に入って恥をかくまで治らないと思う。 社会人になっても治らないものもいるが。orz Fortran 人口を増やすには、説教より回答が一番だな。 328 えらい。オレばか。orz
334 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 18:18:04 ] >>331 ほれ、>>328 の真ん中のループの所を入れ替えれ。 do 22 i = 1, n-1 imax = i do 21 j = i+1, n if (dat(index(imax)) .lt. dat(index(j))) imax = j 21 continue ntmp = index(i) index(i) = index(imax) index(imax) = ntmp 22 continue 君の行動を称えて以下の文章を贈ろう。 コレをよく読んで今後も精進に励め。(どう励むかはお前次第だ) www.redout.net/data/osietekun.html >>333 まあそう気にしなさるな。 ここに宿題を丸投げして後で苦労するのも、社会に出てからちんぷんかんぷんな 質問をして恥をかくのも、全て本人の自己責任ってやつだ。
335 名前:デフォルトの名無しさん [2006/05/24(水) 23:01:32 ] WRITE(*,'(A5$)')name(i) のような書式で、表示位置を決める定数"5"の部分をREAD文で読み取って 任意の値に変更できるようにしたいのですが、 どうすればいいでしょうか? ちなみに num=5 1000 FORMAT(Anum$) WRITE(*,1000)name(i) と書いたのですがうまくいきませんでした。
336 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 23:58:55 ] >>335 1. 上の方でも出てきているが、<>の中に変数名(整数式)を書く(ただし、一部の処理系の拡張形式) write(*,'(A<num>$)') name(i) 2. 文字列の書式を書き込む character*10 str ・・・ write(str, '(''(A'',I3,''$)'')') num write(*,str) name(i)
337 名前:デフォルトの名無しさん [2006/05/25(木) 00:27:03 ] >>336 内部ファイルは便利なのに知られていないよう棚。もっと啓蒙が必要なようだ。 FAQにでも入れておきたいところだw >>335 ■必要な第1の知識 FORTMATは 1.FORMAT文で与える。 2.文字常数として与える。 3.文字変数として与える。 という、3通りの方法がある。 たとえば .....1.FORMAT(A13) .......WRITE(6, 1) 'WE ARE VIPPER' は .......WRITE(6, '(A13)') 'WE ARE VIPPER' と等価だし ......CHARACTER*10 fmt ......fmt = '(A13)' ......WRITE(6, fmt) 'WE ARE VIPPER' とも等価である。 ■必要な第2の知識 内部ファイルというものがある。これは文字列がファイルのように読み書きできるということを意味する。 WRITE(9, '(A)' ) ' chin chin man man ' ! これはファイルの9番に文字列を書き出している。 WRITE(fmt, '(A)') ' okki ' ! これは文字列fmtに文字列を書き出している。 ちなみにREAD文でも同様のことができる。 これを利用すれば、好みのfmt文を実行時に動的に生成できる。 文字列操作を使ってもいいが、この方が数値を文字列として書き込むのが楽勝でできる。
338 名前:デフォルトの名無しさん [2006/05/26(金) 02:28:39 ] 無料のWindows用のコンパイラはありませんか?
339 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 02:41:15 ] >>338 g77(gccに入ってる) Salford f77
340 名前:335 mailto:sage [2006/05/26(金) 02:56:34 ] できました!短時間に二人もありがとうございます! >337さんの WRITE(9, '(A)' ) ' chin chin man man ' が顔に見えてちょっとうれしいです。
341 名前:sage [2006/05/26(金) 12:39:43 ] >338 g95 ttp://www.g95.org/
342 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 15:17:28 ] >>334 ありがとうございます。 よい勉強になりました。
343 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 10:05:21 ] fortranの遺産があるんですが・・・ なぜか配列の出力が20行ごとw むかしの名残なんでしょうか? ってか計算だけfortranでやらせてGUI?はほかの言語でやるにはどうしたらいいの? オシエテ
344 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 10:12:01 ] あとゎぁ書式の指定で format(500i4) ここの500のところを定数とかで指定できないの?
345 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 11:37:12 ] >>344 最初から読めとまでは言わないけれど、 10前のレスくらい読もうよ。 >>335-336 答えそのものではないけれど、ほぼ回答。 >>337 少し難しいけれど、極めて有益な情報。
346 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:42:13 ] サンクスwww くそふるいマニュアル本みててもわからないわけだ・・・w
347 名前:デフォルトの名無しさん [2006/05/27(土) 15:25:28 ] >>343 大体はFORTRAN側をDLLにしてVBやDelphiなんかで処理しているみたいだな. まぁ,GUIもFORTRANでやってる連中もそれなりにいるようだ. Intelの質問掲示板に行けばうまくいかねーとウンウンうなっている人たちに出会えるw ttp://softwareforums.intel.com/ids/board?board.id=5
348 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 18:56:55 ] FTN95でコンパイルしたんですが, オブジェクトファイルができただけで, この後どうやって実行すればいいのか教えてください.
349 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 21:16:08 ] >>348 1. コンパイル時に「/LINK」オプションを付ける。 例: ftn95 hoge.f90 /link 2. コンパイルが正常終了したら、おもむろにプログラム名を入力してEnterを押す。 例: hoge 3. スプラッシュが消えるまで全裸正座で待機。 例: + + ∧_∧ + (0゚・∀・) ワクワクテカテカ (0゚∪ ∪ + と__)__) +
350 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 21:56:58 ] >>349 おお!できました.ありがとうございます。 ちょうど風呂からでたところなので助かりましたw
351 名前:デフォルトの名無しさん [2006/05/28(日) 00:27:25 ] (______________ J そ 君 (__ ┌―‐―┐ ) き ん ! (_ |`l TT了| } ゃ な (_ j .| .|:| .l | / あ か 待 (_ | | .|j .j | イ | . っ ち (,_ |.| .|l .|:| ,. -‐ /_. っ こ た ( |.|. |! |/ / ! う ま (` `ー /..:::::\≧,,,、:::7___ で え (―――――――――(:::::::>'´ == \::⌒l^⌒ _ (⌒ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ノ く彡/// ∪,ノ ;| .レ⌒Y^'⌒`\________ く:::::∧ '_,. -、 く/::::::::/ |:::| \xく _,,,...,_ \:::::l、ヽ ,ノ \,,∠,,__ \|:::| _,....!,,_ \ iれ__,.、ヽ lF〒`ヾ.\,,..イ |::::::::, `7´ _,,.ィ ヽ{|iュ ェッリ | || _,..-/7゙h _|::::::// \.{n|.ィァ it} ', _'_ j) r'"三¨7´\| |´.|::::// |:::トl、 rュj . ト ニ イl、 / ゚`.|n./ .イl ,∧ |::// |::,| 'ーケトr'TTlイ /_`ヾtっ r'l゙ /⌒`lくミV / ,r1´|`'六´ //` ̄´ `Y´ |└┬シj ./ 7ヽ〈 /ヾ)< ./ | ∨|::|∨ ! { r ,、 _,シ /゙丁〈 / } { { \ | ',|::|/ ! ,ゝ-< ( / .| |/ ∧ \| l .Y。 .| |` 〃 ̄ ̄⌒ / 〈 /! ', __,,....::-‐ .∧. |。 { ゙爪` ' ‐- 、..,,,...イ '、 / .| `|:::::::::::::::: \/ l |。./ ,l | l, .| . || `'ー' i | j::::::::::::::::: ヽ、`'::、L.∧/ / |.{ u 〈.| イ 〈 /::::/::::::::::: ::::::::`ヽ、 ∨ / ̄| | 、 / l:l. | j /::::/::::::::::::: :::::\::::.....  ̄`| l | 鬱鬱 .l:l// l| ∨:::/::::::::::::::::
352 名前:デフォルトの名無しさん [2006/05/28(日) 02:32:45 ] いいかお前らにためになるお言葉を言い渡しておこう。 「問題はレベルの高いプログラム言語を使うか、レベルの低いプログラム言語をつかうか といったことではない、そうではなくて、 レベルの高いプログラム言語を使うか、もしくはレベルの高いプログラム言語処理系を低レベル言語で作成するか、 ということだ。」 つまりフォートランなんかいまさら使っている時点で負け組み。 それで半ばコンピュータの専門か気取ってる痛いやつが多すぎなんだよw
353 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 02:59:53 ] 日本語でおk
354 名前:デフォルトの名無しさん [2006/05/31(水) 01:01:28 ] さて、諸君。次の問題を持ってきたまへ。
355 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 17:45:37 ] RoR じゃなくて FoR はありませんか
356 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 18:36:58 ] 駐車料金を計算するプログラム 料金は30分単位で切り上げて計算される 最初の一時間まで300円/30分 一時間を越えると200円/30分 入力は実数型 2,35(2時間35分) この実数を引数で関数の値が料金のFunctionをつくり使用する ↑のような宿題が出たのですがFortran77の型で誰かお願いします
357 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 19:49:52 ] >>356 program parking read(*,*) hour,fmin write(*,*) ifee(hour,fmin) stop end function ifee(hour,fmin) totalmin=hour*60.+fmin if(totalmin.le.60.) then ifee=300*int(totalmin/30) if(totalmin-30.*int(totalmin)/30.gt.0.) ifee=ifee+300 else ifee=600+200*int(totalmin-60.)/30 if(totalmin-30.*int(totalmin-60.)/30.gt.0.) ifee=ifee+200 endif return end
358 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 21:09:21 ] >>357 ありがとうございます
359 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 21:18:09 ] あ、忘れてたのですが最高課税額が4000円になるようにしてもらえませんか 本当に申し訳ない><
360 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 22:26:55 ] >>359 357 じゃないけど。 せっかくプログラムがあるんだから、 いろいろいじってみようよ。 ヒント:if 文 をどこかに一行いれる。
361 名前:357 mailto:sage [2006/06/01(木) 11:32:39 ] 慌てて作ったら間違っていたみたい。 それを修正するのも良い勉強になるでしょう。 あと、変数に7文字以上使っているのも問題かも。 実は厳密なFORTRAN77を知らない。
362 名前:デフォルトの名無しさん [2006/06/01(木) 17:35:24 ] >>361 それ以前に小文字を使っているぞいw
363 名前:357 mailto:sage [2006/06/01(木) 20:21:52 ] そういやそうだったねorz。字下げもしない方が良かったかな。
364 名前:デフォルトの名無しさん [2006/06/01(木) 23:33:12 ] 1/√π×exp(-x^2)は中央値0、偏差1の正規分布曲線を与える。 〔-1、1〕および〔-2、2〕の範囲に存在する確率はいくらか。台形法で求めよ。 学校の課題なのですがわかる方いたらお願いします。 先生いきなり難しいよ・・・
365 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 23:47:33 ] 小学生の算数じゃなかったか?>台形面積
366 名前:デフォルトの名無しさん [2006/06/02(金) 01:38:52 ] >>363 いや字下げは文法にかなっているからおk FORTRAN77までは大文字のみが文法で規定されていた。 小文字は見にくくてキモスw >>365 おまえは>>1 を読み返せ! このスレは糞既出FAQにも丁寧にマジレスし、宿題も文句も言わずに解いてやり、 FORTRAN依存症を作り出して初心者をFORTRAN Userに引き込む秘密結社の陰謀だ。 まぁ本スレの方ならなじった上で、こっちのスレに誘導してくれればおkwww
367 名前:1/2 mailto:sage [2006/06/02(金) 02:31:16 ] >>364 Fortran90で難しく書いてみた。が、少しイモくさいw MODULE mod_integ IMPLICIT NONE REAL :: pi CONTAINS REAL FUNCTION trapez(n, xmin, xmax) IMPLICIT NONE INTEGER, INTENT(IN) :: n REAL , INTENT(IN) :: xmin, xmax INTEGER :: i REAL :: h, x h = (xmax - xmin) / n trapez = 0.0 DO i = 1, n x = xmin + (i - 1) * h trapez = trapez + sub_trapez(x, h) END DO RETURN END FUNCTION trapez
368 名前:2/2 [2006/06/02(金) 02:32:02 ] REAL FUNCTION sub_trapez(x, h) IMPLICIT NONE REAL, INTENT(IN) :: x, h sub_trapez = 0.5 * h * ( func(x) + func(x + h) ) RETURN CONTAINS REAL FUNCTION func(x) IMPLICIT NONE REAL, INTENT(IN) :: x func = EXP( -x**2 ) / SQRT(pi) RETURN END FUNCTION func END FUNCTION sub_trapez END MODULE mod_integ ! PROGRAM oppai USE mod_integ IMPLICIT NONE INTEGER :: i REAL :: s, s1, s2 pi = 4.0 * ATAN(1.0) ! arctan(1.0) = pi / 4; tan(pi/4) = 1.0 ! [-1..1] s1 = trapez(100, -1.0, 0.0) ! [-2..2] s2 = trapez(200, -2.0, 2.0) ! [-inf..+inf] s = trapez(1000, -10.0, 10.0) PRINT *, s, s1, s2 STOP END PROGRAM oppai >>367-368
369 名前:367 [2006/06/02(金) 02:53:47 ] 実行結果 0.9999998 0.4213469 0.9953194 Press any key to continue 微妙に問題の偏差の定義などが一般的な統計の場合とずれているが、 ここでの定義を信じてゆくことにするw 正規分布の−∞〜+∞の積分は1になるように規格化してあるはず。 (√π)で割っている部分。それを確かめたのが変数s。 ただし積分範囲は−10〜+10までにしている。 無限大じゃないじゃんか!というかもしれないが、これでも有効数字の範囲では もう無限大と変わりない。というか、関数は0になっている。 誤差は台形公式の誤差だろう。分割数n(分割の間隔)を変えると調べられる。 -1..1の積分は約0.421、-2..2までの積分は約0.995になっている。 つまり、−∞から+∞まで積分すると1.0になるはずものだが、 −2〜+2までの範囲で約99.5%が尽くされることが分かる。 プログラムでは、メインルーチンは積分範囲を指定して積分ルーチンを呼んでいる。 サブルーチンはモジュールの中に入れてある。 台形(trapezoid)積分は、等間隔にx軸を切ってそれを台形の高さとし、それぞれの 小さな台形の面積の和を返している。小さな台形の面先はさらに台形面積を返す ルーチンを呼び出している。小さな台形の面積を返すルーチンは正規分布関数の 値を返すルーチンを呼んでいる。 ・プログラム ・積分ルーチン ・台形面積ルーチン ・正規関数ルーチン FORTRAN77で書いてほしければ、はじめから遠慮せずに言うようにw
370 名前:367 mailto:sage [2006/06/02(金) 02:55:02 ] なお、間違っていても謝罪も賠償もしないので4649!
371 名前:364 [2006/06/02(金) 03:07:46 ] ありがとうございます!77とか90とかよくわかりません。学校のパソコンはどっちだろう・・・ これをテラパッドに入力してシグインで実行するわけですな
372 名前:367 [2006/06/02(金) 11:19:01 ] >>371 ! [-1..1] s1 = trapez(100, -1.0, 0.0) これまちがいw ごめw でも賠償は(ry 正しくは、s1 = trapez(100, -1.0, 1.0) 面積は0.8426729 積分範囲がまちがって-1.0〜0.0になってたwwwwwww なんか値がおかしいと思ったのだがw 標準偏差の定義が標準と異なるので 表で値を確かめるときに換算を間違えておkと思ってしまったwww ま、宴会から帰ってきた夜中だったので許せw *やや無関係な話題w πの値はパラメータで与えてもいいが、ここでは4.0*ATAN(1.0)を使った。 これは昔からよく使われている定石だが、どこかで1回計算しておかないと いけない。それがめんどい。だがこうしておくと精度を機械任せにできる。 今のプログラムではやや不自然で、結果醜くなっている。 Fortran2003ならパラメータ文の中で関数が使えるようになるのだが・・・・ (パラメータは実行時ではなくコンパイル時に評価されるので、 今のところ四則演算とベキぐらいしか使えない) *正規分布の−∞から+∞への積分 ∫exp(-x^2)dxは√πになるのだが、不定積分があらわせないので、 必死に積分しようとしないようにw 多重積分のテクニックで直交座標を円座標にして出すのが伝統芸。 ∫exp(-x^2)dx∫exp(-y^2)dy=∬exp(-(x^2+y^2))dxdy=∬exp(-r^2)rdrdθ =-1/2[exp(-r^2)]^∞_0 * 2π = 1/2*2π = π つまり∫exp(-x^2)dx=√πだお。 数値積分では無限大の積分は、普通変数変換して有限範囲にしてから実行する。 ここでの-10~10の積分は、あくまで確認のためのお遊びということで。
373 名前:364 [2006/06/02(金) 19:35:00 ] >>372 ありがとう。使わせてもらいます。 DAIKEIHOU gakusekibangou NAME sekibun.f conded at 29 May DIMENSION NJUN(J) DATA NJUN/10,50,100/ A=-1,0 B=1,0 WRITE(6,100)A,B FORMAT(5x,'SEKIBUN FOR 1/SQR(PI)*EXP(-X*X) A' ,F5,2,3X,'B',F5,2) DO 10 K=1,3 N=NJUN(K) H=(B-A)/N S=FX(A)+FX(B)/2,0 DO 20 J* J=1,N-1 X=A+BJ S*S+FX(X) ちなみにこれが学校の先生が見本としてやってたのを急いで写したものですが(途中まで) あってますか?
374 名前:デフォルトの名無しさん [2006/06/02(金) 19:58:25 ] 微妙に写し間違えているw DIMENSION NJUN(3) ... S=( FX(A) + FX(B) ) / 2.0 DO 20 J = 1, N - 1 X = A + H * J S = S + FX(X) 20 CONTINUE S = S * H WRITE(6, *) 'BUNKATSU = ', NJUN(I), 'MENSEKI =', S 10 CONTINUE STOP END こんな感じになるのではないかな. 台形公式を>>364 の様に素直に小さな台形の和を足して求めると, 関数の値を2回同じ値に対して求めなければならない. そこを改良すると,ここでの例題のように,両端だけを半分にして, 残りを一回計算して足し上げてゆけば良いことになる. 絵を描いて考えればすぐ分かると思う. NJUNは分割数だろう.何個の台形に分けるかを指定している. 数学的には分割が細かいほど正確な値になるが(積分は分割→0の極限で定義 されている)現実には数値誤差や計算時間の関係からほどほどの分割数がいい. いくつがいいかは時と場合によるので一概には言えない.
375 名前:デフォルトの名無しさん [2006/06/02(金) 22:03:08 ] 台形公式の改良版としてロンバーグ加速ってのがある。 台形公式の幅を半分ずつにしていって結果がどのように変化するかを調べて、 幅無限小の時の値を補外するというもの。 関数の形にもよるけど、台形公式とほぼ同じ処理量で凄い精度が出る。
376 名前:デフォルトの名無しさん [2006/06/04(日) 04:09:37 ] >>50
377 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 04:22:25 ] ポインタが無いぶん最適化はしやすいと聞くが、 正直微々たる差だろうな。
378 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 08:49:02 ] GCCの場合、どちらも一旦中間コードに直されてから最適化されるので、同じ構造のプログラムを書いた場合 基本的に最適化に差はほとんどない。
379 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 09:27:59 ] >>378 GCCに限らず最近のコンパイラは、中間言語を出力する字句解析のフロントエンド部と、 機械語変換のバックエンド部に分離しているから、その理屈ではどんな言語でも 似たようなスピードになる。実際そういう傾向はある。 問題は今後のハードの発展が、CPUの並列化や、非連続な分散メモリー、 SSEのようなベクトル処理の方向に向かっていることで、言語自体が向いていないと 最適化がかかりにくくなってくる。 FORTRANの規格はハードウェアの進化のフィードバックを改定を受けているが、 C言語などは最近のネットセキュリティーの重視を受けてセキュアーさのフィードバックを 強く受けているようなので長期的にはどうなるか・・・ 最近のマルチコア・マルチスレッド・計算用専用プロセッサの利用など(GPU流用や CELLとか)を見ていると、コンパイラによる自動並列化というより、MPIのような API呼び出しで解決しようとしているようだし、どうなることかw
380 名前:デフォルトの名無しさん [2006/06/05(月) 01:24:19 ] すみませんフォートランの始め方からしてわかりません・・・ www.g.dendai.ac.jp/lecture/fortran/fort01.html このサイトにはFTN77 Personal Editionをダウンロードしろとあるのですが、 77でなく95しか置いてないみたいなんです。 Cpadが77向けなので95と77では合わずに不具合が生じてしまう気がするのですが・・・ どなたかご回答願います・・・
381 名前:デフォルトの名無しさん [2006/06/05(月) 01:50:28 ] >>380 FORTRAN III pc8.2ch.net/test/read.cgi/tech/1104724162/ 861 名前:デフォルトの名無しさん[] 投稿日:2006/05/27(土) 21:37:28 FTN77 Personal Edition ってもうダウンロードできないの? SalfordのHPやSilverfrostのHPからもリンクが消えてるんだけど… 862 名前:デフォルトの名無しさん[] 投稿日:2006/05/29(月) 01:52:14 >>861 FTN95がFreeになったから消したんでないのかな? 863 名前:デフォルトの名無しさん[] 投稿日:2006/06/03(土) 02:31:53 もうどこでもダウンロードできないんですかね? 864 名前:デフォルトの名無しさん[] 投稿日:2006/06/04(日) 00:35:52 >>863 ロシアか中国あたりにうpられていそうな気もするがw 漏れは使ったこと無いけど、FTN77はそんなにいいものなのかい? フリーのFTN95はバナーがでてウザかった気はするが使えたよ。 F77だったらOPEN WATFORやg77などがあるので代替手段が無いわけではない。 WATFORもDOS EXTENDER時代に本来の開発が止まったものなので、昔懐かしい 感じを保っているはずだが・・・w 865 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/04(日) 01:38:40 「FTN77PE.EXE」でぐぐるとそれらしきものがいくつか見つかるが どれもなんか怪しい雰囲気がw >>864 単体で使う分には取り立ててよいというほどではないと思うけど CPad for Salford FTN77と一緒に使うとお手軽にプログラムの 作成・実行が出来るので重宝しています。 このセットで紹介しているHPも結構あるみたいだし。
382 名前:380 [2006/06/05(月) 01:58:19 ] およよ・・・ありがとうございますです。 がんばってみます。 すでにめげそう;;
383 名前:デフォルトの名無しさん [2006/06/05(月) 02:00:48 ] >>380 文法的にはFTN95はFTN77を包括している。 (完全に規約に準拠していると、77の機能の一部が削られていることになるが) Cpadの設定を自分で書き直せば何とかなるだろう。 まぁ、そろそろ90、95に移行することをお勧めする。 といっても色々事情もあるだろうから、好きになさいwww 安易な方法としては、違法くさいのがうpされているので、具具ってそれを落としてくれば とりあえずは足りるべw いつまであるかはわからんがw
384 名前:380 [2006/06/05(月) 02:04:19 ] みなさまありがとうございます。 がんばりますです。
385 名前:デフォルトの名無しさん [2006/06/05(月) 02:06:54 ] 95と77の違いってどんなところ??
386 名前:デフォルトの名無しさん [2006/06/05(月) 02:18:54 ] >>385 95はモジュール言語の特徴を大きく取り入れた。 ほとんど温泉旅館の新館と旧館のようになかば違う言語がくっついた感じになっている。 Fortran90の時点ではFORTRAN77を完全に包括していた。 Fortran95はFortran90のBugFix的な位置づけだが、一部Fortran90で廃止勧告が 出ていた機能を削っている。ただし、ほとんどのベンダーは過去互換性を重視して そういう機能を残している。 古い人なら、FORTRAN77がpascalと合体したと思えばいい。
387 名前:デフォルトの名無しさん [2006/06/05(月) 02:27:30 ] どもっす
388 名前:デフォルトの名無しさん [2006/06/05(月) 15:54:04 ] 行列がわかんねーorz
389 名前:デフォルトの名無しさん mailto:sage [2006/06/05(月) 16:47:31 ] >>388 それは FORTRAN の問題じゃなくて数学の問題ではなかろうか。
390 名前:デフォルトの名無しさん [2006/06/05(月) 22:07:14 ] DAIKEIHOU gakusekibangou NAME sekibun.f conded at 29 May DIMENSION NJUN(J) DATA NJUN/10,50,100/ A=-1,0 B=1,0 WRITE(6,100)A,B FORMAT(5x,'SEKIBUN FOR 1/SQR(PI)*EXP(-X*X) A' ,F5,2,3X,'B',F5,2) DO 10 K=1,3 N=NJUN(K) H=(B-A)/N S=FX(A)+FX(B)/2,0 DO 20 J* J=1,N-1 X=A+BJ S*S+FX(X) DIMENSION NJUN(3) ... S=( FX(A) + FX(B) ) / 2.0 DO 20 J = 1, N - 1 X = A + H * J S = S + FX(X) 20 CONTINUE S = S * H WRITE(6, *) 'BUNKATSU = ', NJUN(I), 'MENSEKI =', S 10 CONTINUE STOP END これ実行できないです。どこか間違ってますか?
391 名前:デフォルトの名無しさん mailto:sage [2006/06/05(月) 22:26:40 ] >>390 コメントは行の先頭に"C"を付けろとか 小数点(".")とカンマ(",")を混同してるとか 文番号のないFORMATなんて何に使うんだとか 勝手に行を折り返すなとか 実行文の途中に配列宣言入れるなとか ツッコミどころ多数でどこもかしこも間違っている。
392 名前:デフォルトの名無しさん [2006/06/05(月) 23:39:37 ] >>390 もう少し自力でがんばれw PROGRAM DAIKEIHOU C gakusekibangou NAME C sekibun.f conded at 29 May DIMENSION NJUN(3) DATA NJUN/10,50,100/ A = -1.0 B = 1.0 WRITE(6,100) A,B 100 FORMAT(5X,'SEKIBUN FOR 1/SQR(PI)*EXP(-X*X) A', F5.2, 3X, 'B',F5.2) DO 10 K = 1, 3 N = NJUN(K) H = (B - A) / N S = ( FX(A) + FX(B) ) / 2.0 DO 20 J = 1, N - 1 X = A + H * J S = S + FX(X) 20 CONTINUE S = S * H WRITE(6, *) 'BUNKATSU = ', NJUN(K), 'MENSEKI =', S 10 CONTINUE STOP END C FUNCTION FX(X) PARAMETER (PI = 3.14159265) FX = EXP(- X * X) / SQRT(PI) RETURN END >>392
393 名前:392 [2006/06/05(月) 23:45:25 ] 小数点をカンマにするのは、ドイツ・フランス。中点にするのがイギリス。 あと日本の縦書きの新聞とかも中点にする。 しか〜しw FORTRANやアメリカ・日本では小数点はピリオドだwww FORMAT文はWRITE文の中に書き込んだほうがいいのだが、 学校教育では、まぁ文番号つきのFORMAT文でやっとけw 関数副プログラムを使ったが、今の場合FX(X)は文関数でも書ける。 質問があれば答えるから、まぁなんちゅーの、もう少し理解するようにしろwwww
394 名前:デフォルトの名無しさん [2006/06/05(月) 23:48:56 ] >>389 行列の表示の仕方がわからない・・・
395 名前:デフォルトの名無しさん mailto:sage [2006/06/06(火) 00:14:17 ] >>394 real A(2,3) data A/1.,2., 3.,4., 5., 6./ do i = 1, 2 write(*,*) (A(i,j), j=1,3) end do end とか program hoge implicit none real :: A(2,3) = reshape((/1.,2., 3.,4., 5.,6./), (/2,3/)) integer :: i do i = 1, 2 print *, A(i,:) end do end program hoge とか 関係ないがFortran 2003では (/.../) のかわりに [...] と書けるので 可読性が少し良くなる(のかな?)
396 名前:デフォルトの名無しさん [2006/06/06(火) 00:42:54 ] >>395 解決しました!ありがとうございます。
397 名前:デフォルトの名無しさん [2006/06/06(火) 00:42:56 ] >>394 もっと具体的に質問すれば、華麗なるFORMATを教えて進ぜようゾナw
398 名前:364 [2006/06/06(火) 17:02:03 ] >>392 ありがとうございます。家のパソコンにはシグインないので学校行ったらチャレンジしてみます。
399 名前:392 [2006/06/07(水) 12:36:56 ] >>398 シグインってcygwinのことかな?w 念のため言っておくけどw 変数のAとBが積分範囲の下限と上限なので、 −1,1というのを−2,2にすれば当初の課題が達成されるw
400 名前:デフォルトの名無しさん mailto:sage [2006/06/07(水) 13:10:18 ] シグインなんてDLすればいいジャンジャン
401 名前:デフォルトの名無しさん [2006/06/07(水) 15:16:53 ] Evca(Ω,x)を求めるプログラムを作りたいのですが教えてください。 Evca(Ω,x)=Ei(Ω,x)+E0(Ω,x)+E1(Ω,x)+E2(Ω,x) Ei(Ω,x)=-1.79186*Z**(5/3)/r E0(Ω,x)=Z(2.21/r**2-0.916/r+Ecorr) Ecorr=-(0.115-0.031logr) E1(Ω,x)=2πZe**2((1-X)Z**Cs*(Rm**Cs)**2(1+2/3*u**Cs)+xZ**K(Rm**k)**2(1+2/3u**K)) E2(Ω,x)=1/2(4πe**2/ΩG**2)**-1(V(G))**2*1/(1-f(G))*(1/ε(G)-1) 狽ヘG/=0 Gは逆格子ベクトルG(n1,n2,n3) V(q)=(1-x)V**Cs+xV**k(q) Vi(q)=-4πZe**2/Ωq**2((1+u)cos(qRm**i)-usin(qRm**i)/qRm) (i=Cs,K) u=qRmcos(qRm)/sin(qRm)-qRmcos(qRm) わからない値は後から自分で入れるので教えてください 状態方程式の計算をするらしいです
402 名前:デフォルトの名無しさん [2006/06/07(水) 15:24:39 ] E2(Ω,x)=1/2(4πε**2/ΩG**2)**-1(V(G))**2(1/(1-f(G)))(1/ε(G)-1) 狽ヘG/=0です Gは逆格子ベクトルです。G(n1,n2,n3) これを求めるプログラムはどうしたらいいか教えてください わからない値は自分でいれます。お願いします。
403 名前:デフォルトの名無しさん [2006/06/07(水) 17:42:42 ] >>401 質問が曖昧すぎるぞい!w もう少しうまく質問しないと助けたくとも助けられないw 見た感じ結晶の電子相関込みの凝集エネルギーかなんかを計算しているようだが, どの辺のなにがわからんのか,求めたいものは何なのか,もうちょっと他人が分かる 質問をしろwwww これだけで答えられる奴はいねーよw 丸投げしたいなら持ってる情報を全部出せ!w 誰かが回答するかどうかは別としてw
404 名前:デフォルトの名無しさん [2006/06/07(水) 17:50:46 ] >>401-402 セシウムとカリウムのアルカリ金属合金の凝集エネルギーを求めて なにかしたいようであることは分かった. まずは欲張らずに単体のアルカリ金属の凝集エネルギーは求めろよw そしたら,x=1.0または0.0の時の極限にも対応するので あとからチェックにも使える. 一体どの辺が,どのくらいわかんないのよw
405 名前:401 [2006/06/08(木) 11:05:05 ] すいません。あほなんで基本的には全然わかりません。 状態方程式のPを求めるためにやってると思うんですけど。 圧力Pは結晶エネルギーEvca(Ω,x)の体積Ωに関係する微係数で与えられるらしいのです。 a=5.225A A=10**-8 Ω=(a**3)/2 rs=(9π/4)**(1/3)/Kf Ef=h**2*Kf**2/2m c=2(1+0.0155π/Kf)**-1 f(q)=q**2/2(Q**2+cKf**2) ε(q)=1+(1-f(q))*(4πZe**2/Ωq**2)*(3/2Ef)*(1/2+((4Kf**2-q**2)/8Kfq)*log(2Kf+q/2Kf-q)) CsのH近似の場合Rmは4.610 uは-0.9605 KのH近似の場合Rmは3.019 uは-0.5682 せめて濡/=0 のGベクトルが0以外の時を全部足す方法が知りたいです。 お願いします。
406 名前:401 [2006/06/08(木) 13:57:06 ] k=5.225 a=k/(0.529177) o=a**3/2 z=1 rs=(3*o/z*4*3.14)**(1/3) Kf=(9*3.14/4)**(1/3)/rs Ef=Kf**2 c=2(1+(0.0155*3.14)/Kf)**-1 Ei=(1.79186*z**(5/3))/3*o*rs E0=z*(2.21/rs-0.916/rs+0.031/3*o) Rmk=3.019 uk=-0.5682 E1=-2*3.14*z*2/o*(z*(Rmk)**2*(1+2/3*uk)) k=5.225 a=k/(0.529177) o=a**3/2 z=1 rs=(3*o/z*4*3.14)**(1/3) Kf=(9*3.14/4)**(1/3)/rs Ef=Kf**2 c=2(1+(0.0155*3.14)/Kf)**-1 Ei=(1.79186*z**(5/3))/3*o*rs E0=z*(2.21/rs-0.916/rs+0.031/3*o) Rmk=3.019 uk=-0.5682 E1=-2*3.14*z*2/o*(z*(Rmk)**2*(1+2/3*uk))
407 名前:401 [2006/06/08(木) 13:58:08 ] あとはE2(Ω,x)=1/2(4πe**2/oG**2)**-1(V(G))**2*1/(1-f(G))*(1/ε(G)-1) 狽ヘG/=0 を数値微分して全部足すと出るんですけどここがわからないです。 G=2π/a(n1*n1+n2*n2+n3*n3) 収束すると思うのである程度までの結果を出していきたいです。 n1=n2=n3/=0の時以外を計算させる方法がわかりません。数値微分もわかりません。 V(G)=-4*Z*2/oG**2((1+uk)cos(G*Rmk)-uk*sin(G*Rm)/G*Rm) ε(G)=1+(1-f(G))*(4*3.14*z*2/o*G**2)*(3/2*Ef)*(1/2+(4*Kf**2-G**2)/(8*Kf*G)*log((2*Kf+G)/2*Kf-G) f(G)=G**2/4*(G**2+c*Kf**2)+G**2/4*c*Kf**2 です。
408 名前:デフォルトの名無しさん [2006/06/08(木) 15:28:18 ] >>405 OK エネルギーを体積で微分すれば圧力になるのは熱力学の帰結だ. しかしこれはFORTRANというより物理の質問だなw >せめて濡/=0 のGベクトルが0以外の時を全部足す方法が知りたいです。 FORTRANスレ的には,これは3次元逆格子ベクトルに関する和なので, もっとも素朴には3重のDO LOOPを回せばよいとい答えになる. DO n1 = -n, n DO n2 = -n, n DO n2 = -n, n IF(n1==0 .and. n2==0 .and. n3==0) CYCLE 云々 END DO END DO END DO 実際は結晶の対象性があるので,このループの1/8〜1/24位回せばいいはず. 実際の計算には逆格子ベクトルを求める必要がある.これは結晶構造に依存する. もし今アルカリ金属が対象ならbcc構造ということになるだろう. その逆格子ベクトルはfccと同じものになる. これは固体物理の教科書に載っているから,一般式をつくるか, 手で求めて表を配列に入れることになる. DO LOOPの中にn1,n2,n3の組み合わせが逆格子ベクトルにふさわしいかどうかを 判別する式を,G=0を飛ばすのと同じように,いれてやればいい.
409 名前:デフォルトの名無しさん [2006/06/08(木) 17:39:27 ] >>407 Gは逆格子ベクトルそのものではなくて、その長さだから(ルート忘れてるみたいだが) たんに逆格子点に相当するn1,n2,n3が分かっていればいい。 後は式の通りに書いて、逆格子点について足せばいい。 FORTRANの疑問ではないので、ここで聞く前に周囲の人に聞いた方が早いと思う。 数値微分は単に、格子間距離aを、特定のaとa+daに取ったときに計算して 差分をdaでわればいい。daは小さい数だ。
410 名前:デフォルトの名無しさん [2006/06/09(金) 00:56:50 ] fortran90で、数式が二行に渡るとエラーがでるのですが、 どうしたらいいですか?
411 名前:デフォルトの名無しさん [2006/06/09(金) 01:58:42 ] >>410 一行目のしりに&をつけろ。 C言語やPASCALと違って、FORTRANは終端文字(;)が不要なかわり行センシティブ。 ゆえに継続行の記号を明示する必要がある。 漏れはFortran方式が好き。
412 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 02:43:29 ] Ruby や Haskell のような方式もあるぞい
413 名前:401 [2006/06/09(金) 13:33:05 ] >>408 >>409 わざわざありがとうございます。物理の質問でしたねw CYCLEとはどういう意味ですか? 結果にNaNとでるのはどういうことですか? お願いします。
414 名前:デフォルトの名無しさん [2006/06/09(金) 14:08:18 ] >>413 CYCLEというのはFortran90で導入された命令で,DO文の中で使う. それ以降の文を実行すると無くDO行へ戻る. つまり,次のループ計算を実行する. これと類するものにEXIT命令があって,これはEND DOの次の行に飛んで DO LOOPを脱する. NaNとは数値に非ず.Not A Numberの略号だ.配列がはみ出してとんでもない値を 書いているか,オーバーフロー等を起こしている. SUBCHKなどのデバッグオプションをつけてみそ.
415 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 17:47:49 ] オーバーフローだと普通は ±inf じゃない? NaN は実数での負値の平方根とか、未定義の演算結果かな。
416 名前:414 [2006/06/09(金) 21:27:34 ] >オーバーフローだと普通は ±inf じゃない? おっしゃるとおり.漏れの間違いだ. 負の平方根とか関数の定義域外呼び出しでもでるね. 漏れが出会うNaNは,ゼロ割か,配列はみ出しでとんでもないメモリー領域の アクセスしたときが多いかな.個人的にはゼロ割で実行停止しなくなったのでとても助かる. NaNを厳密に追求したければ,IEEE745の浮動小数点の定義を調べればいいが気力那須ww
417 名前:初心者 [2006/06/09(金) 22:20:13 ] 最近、大学でFortranの授業が始まりました。 今日で授業が三回目だったのですが次のような課題がだされました。 おそらく基礎中の基礎だと思うのですが、授業はプリントに書かれた プログラムを説明もなくそのままうつして実行させるような授業ですので この課題を読んだ時日本語かどうかすら疑いました。 いろいろと調べているのですがなかなかよくわかりません。よろしければ どなたかこの課題について解答していただけませんか? あと、本当に自分勝手で申し訳ないのですが、少しでいいので解説もして いただけたらとても嬉しいです。よろしくお願いします。 (1)subroutineを呼ぶときの、変数の引き渡し方について説明せよ。 特に、配列変数を引き渡す方法についてプログラム名をあげて説明せよ。 (2)Fortranで文字列を取り扱うにはどうすればいいか調べて、プログ ラム例をあげて説明せよ。 (3)READ文やWRITE文のI,E,F,A形式について調べて 解説せよ。またプログラム例と印字例を示せ。
418 名前:初心者 [2006/06/09(金) 22:24:14 ] すいません。(1)のなかのプログラム名は間違いでプログラム例でした。
419 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 23:56:51 ] 調べてって書いてるんだから、調べれば? プリントか教科書あるんじゃないの?
420 名前:初心者 [2006/06/10(土) 00:12:18 ] プリントは説明がなくて・・・教科書もないんです・・・やっぱりちょっと 調べればわかることみたいですね。
421 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 00:20:38 ] FORTRAN で検索したら色々出てくるよ。
422 名前:初心者 [2006/06/10(土) 00:23:04 ] ありがとうございます!いろいろ調べて自分なりの解答作ってまた書き込み にくるんでよかったらみてください。
423 名前:デフォルトの名無しさん [2006/06/10(土) 00:29:05 ] 本物のプログラマって現存しますか?
424 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 00:34:05 ] あれは最初からジョークだからw 色々示唆には富んでるけどね。
425 名前:デフォルトの名無しさん [2006/06/10(土) 00:44:15 ] >>419 教えてやれよw (1)なんて、参照渡しと値渡しの説明を求められていたら初心者には大変だぜ! しかし、配列の先頭要素のアドレスしか渡していないことを知らないと77では 実戦的なプログラムは書けない。 (2)はFORTRAN77以降ならCHARACTERがあるが、FORTRAN66だと整数型に ENCODE/DECODE文で文字列突っ込んだりしてるし。 (3)FORMAT書式は初心者がつまづく、難所中の難所だろう。 と、>>417 をびびらせることを書いてみたりしてw うふw
426 名前:デフォルトの名無しさん [2006/06/10(土) 03:03:51 ] data init/'12345'X,'23456'X,'34567'X,'45678'X/ ↑ '整数'X が何を意味するのか分かりません。 よろしくお願いいたします。
427 名前:デフォルトの名無しさん [2006/06/10(土) 03:50:05 ] '整数'Xは16進数を表すものでした。 お手数をかけました。
428 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 10:51:20 ] >>417 大阪大学工学部応用理工学科二回生乙。
429 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 17:02:15 ] これが噂に聞いた「ソシャる」というやつか
430 名前:デフォルトの名無しさん [2006/06/10(土) 17:30:31 ] >>422 臆せずに書き込むように。 みんなの勉強になる。
431 名前:デフォルトの名無しさん [2006/06/11(日) 13:31:23 ] 次の宿題もってこいや!!