1 名前:デフォルトの名無しさん [2006/11/22(水) 00:00:36 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。 ●注意事項 ・質問する前にGoogle等の検索サイトで検索しましょう。 ・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。 ・エラーの場合は起きた状況、環境(OS・コンパイラ)、エラーメッセージも詳しく書きましょう。 ●前スレ くだすれFORTRAN(超初心者用) pc8.2ch.net/test/read.cgi/tech/1138063703/ ●関連スレ FORTRAN W pc8.2ch.net/test/read.cgi/tech/1163319215/
282 名前:254 [2007/02/13(火) 22:01:02 ] >>281 つまり、work(1)〜(10)までを定義してやる必要があるということですよね? (1)〜(10)を「どのように求めるつもりなのか」を明記するってことですか? この場合だと、x-yでいいのかな?
283 名前:デフォルトの名無しさん [2007/02/13(火) 22:15:46 ] 彼が何をしたいかわからない俺は馬鹿
284 名前:254 [2007/02/13(火) 22:36:55 ] >>283 バカですんません。 とりあえず、やりたいことというのは、 @定められた仕事回数の分の仕事(x-y)をdo loopで行う。 Ax-yを実行する度に、仕事回数zの数を増やす ※x-yがマイナスに達した時、xの値を初期設定の値に戻す。仕事回数zに+1する代わりに、 その後、missの項目に+1する。 B仕事回数が規定に達したらそこでプログラム終了。 何故、こんな意味のわからないプログラムを組むのかというと高校の卒業課題で使うためです。 これによってある計算をしなければならないので…(詳細はここでは書けませんが) とりあえず、x-yの計算結果と、missの回数すら出力できてないので、僕は非常に混乱しています… バカでほんとうにすいませんorz
285 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:50:05 ] >>284 卒業課題って今年度の? 今の状態で行き当たりばったりにプログラム書くより、教科書なり参考書なりをよく読んで もう一度基本的な文法を覚えなおした方がいいよ。 それからパソコン持ってるなら家でも予習復習できるように処理系の1つも入れておけ。 Windowsで学校の課題程度ならこれくらいで十分 ttp://www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran.htm 他は本スレ参照のこと pc10.2ch.net/test/read.cgi/tech/1163319215/2
286 名前:デフォルトの名無しさん [2007/02/14(水) 21:38:36 ] 構造格子上の3次元の温度データから等数値面をつくり、 その面に沿って面積分を行いたいのですが、うまくいきません。 そもそも曲面の求め方が悪いのか(勾配から法線ベクトルを出し格子内 で面を張っているだけ)チェック用に完全な球を作り、 面積分を行っても球の表面積と桁が違うような結果になってしまいます。 曲面の作成と面積分のやり方、あるいはfortranのサンプルプログラム等 に関してご存知でしたら教えてもらえませんか?
287 名前:デフォルトの名無しさん [2007/02/15(木) 21:46:19 ] 倍精度複素数型 cKappa には, 純虚数 か 実数 かの何れかが格納されています. つまり,cKappaを2乗すると必ず実数になるのですが, この値を倍精度実数型 dE に代入したいときは, dE = cKappa * cKappa で問題ないのでしょうか?
288 名前:デフォルトの名無しさん [2007/02/17(土) 01:12:06 ] 初心者でもぅさっぱり分かりません。 VS2005を入れてSilverfrostのftn95をインストールしてVSでftn95を選択。 一番簡単な PROGRAM MainProgram write(*,*) 'TEST' END を打ちデバッガ実行するとLINKエラーになります。このLINKエラーって何でしょうか?
289 名前:デフォルトの名無しさん [2007/02/17(土) 01:21:03 ] 288です。失礼 ------ Build started: Project: FortranApplication2, Configuration: Debug .NET ------ Building project FortranApplication2... Updating References... Linking... LINK : error - File not found: C:\Documents and Settings\.dbk こんなエラーです。
290 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:50:41 ] >>288 VS2002だが、うまく行っている。 エラーメッセージを見る限り、ファイルそのものが見つかっていないような。 まず単独でビルドしてみたら? Building project FortranApplication1... Updating References... Compiling file: FreeFormat1.f95 Linking... Assembly file Debug\NET\FortranApplication1.exe for .NET 1.1 produced Build log saved at: "file://C:\Documents and Settings\All Users\Documents\FORTRAN\FortranApplication1\Debug\NET\buildlog.txt" FortranApplication1 build succeeded.
291 名前:デフォルトの名無しさん [2007/02/18(日) 01:07:44 ] >>まず単独でビルドしてみたら? 時間がなく、余り調べていないのですが、自分はVSが初心者です。 コマンドプロンプトからはexeを生成し、実行まで出来るのですが、VSだと・・・orz 上記の「単独でビルド」とは何の作業をさすのでしょうか?
292 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:19:54 ] >>291 エラーメッセージから見ると、ソースファイルをプロジェクトに登録していないように見えるんだが。 New で作ったならそういう事は起きないが既存ソースなら登録がうまく言ってないのかも?
293 名前:デフォルトの名無しさん [2007/02/25(日) 14:25:10 ] s = a**b の計算が必要なときは s = exp(b*log(a)) と書いた方が計算が速いと聞いたのですが,本当でしょうか?
294 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 17:37:12 ] >>293 自分でベンチマーク作って確かめろw どっちにしろ一般のべき乗はexp log で計算しているはずなので、 8087のようにハードウェア的に実装されたexpを利用したかしないかの違いだろう。
295 名前:293 mailto:sage [2007/02/27(火) 10:33:43 ] >>294 うちのPCではどうやら後者の方が2割程度早いようです. コンパイラはIntel Visual Fortran 9.1です. それでこれからは全てexp logで計算しようと思ったのですが, 問題が発生しました. 次のような,モジュールで変数を共有する仕様の プログラムを書いたのですが,コメントしているように, 共有用モジュールの変数を介して値を渡した場合と 直接値を代入した場合で結果が異なってしまいます. ちなみにb**bで計算した場合はどちらも同じ結果を出力します. b=0の場合を除いて演算してもいいのですが, NaNになる原因が分からないので何とも怖くて使えません. 何かアドバイスあったらお願いします..
296 名前:293:プログラムリスト mailto:sage [2007/02/27(火) 10:34:24 ] module commons implicit none real(8) a(1:10) end module commons program main use commons implicit none a(1)=0.d0 call sub end program main subroutine sub use commons implicit none real(8) b !こちらを使うと出力は NaN b=a(1) !こちらを使うと出力は 1 b=0.d0 write(6,*) exp(b*log(b)) return end subroutine sub
297 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:19:52 ] >>295 組み込み関数 LOG(X) はXが実数の場合、Xは正(X>0)でなければならない。 IVFでは -∞ を返しているが、b * log(b) = 0 * -∞ = NaN となるので、 exp(b * log(b)) = exp(NaN) = NaN となる。 b=0.d0 の時に 1 と出力されるのは、コンパイル時に bの値が既知の定数(=0)なので 最適化によりプログラム中で b*log(b) が計算されず、直接 exp0.0D0) を求めてるため。 最適化なし(-Od)でコンパイルすると両方とも NaN になる。
298 名前:293 mailto:sage [2007/02/27(火) 21:35:35 ] >>297 おおー!確かにそうなります! 実にすっきりしました. どうもありがとうございます.
299 名前:293 mailto:sage [2007/02/27(火) 21:39:28 ] 途中で書き込んでしまいました. あまりに訳が分からないので さっきVinu Linuxをわざわざインストールしてgfortranでも 同じことをしたんですが,こちらは b=0.d0 と書いても b=a(1) で渡しても NaNとなりました. 今まで最適化で問題が発生したことが無かったこともあって, 原因がコンパイラの最適化にあったとは全然気がつきませんでした.
300 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:39:40 ] Xが0以下の実数の場合、LOG(X) の結果は処理系依存になるので 実行時エラーを出してプログラムを止める処理系もある。
301 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 00:44:46 ] 最近の処理系はIEEE準拠になって途中で実行時エラーで止まることが少なくなってありがたい。 せっかくIF文で例外を排除しているのに、コンパイラが最適化して勝手に投機的実行をして、 挙句に0割とかで実行時エラーを起こしてとまるとか、ウンコのようなことが昔はよくあったwwww
302 名前:デフォルトの名無しさん [2007/02/28(水) 04:01:39 ] 学校で今週までの課題で 『n元連立一次方程式をガウス・ザイデル法を利用して解くプログラムを作成し、テストを行え』 という課題がだされたのですが、全くわかりません(;_;) 頑張って本を読んでみたのですが理解できなくて(;_;) 最終手段として、ここに来ました(>_<) どなたか、ご教授下されば幸いです(;O;) 初めての書き込みなので粗相があったらすみませんm(__)m ちなみに学校で使っているのはフォートラン77です。
303 名前:デフォルトの名無しさん [2007/02/28(水) 12:05:08 ] またガウス・ザイデル法かw こんなの教科書にも載りまくりだろう。 誰かFAQにでも入れておけ。
304 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 23:14:14 ] >>302 IMPLICIT REAL*8(A-H, O-Z) PARAMETER (NMAX=99, LMAX=100, EPS=1.D-10) REAL*8 A(NMAX,NMAX), B(NMAX), X(NMAX) OPEN(10, FILE='DATA.TXT', STATUS='OLD') READ(10,*) N DO 100 I = 1,N READ(10,*) (A(I,J), J=1,N), B(I) 100 X(I) = 1. DO 110 I = 1,N 110 WRITE(*,'(1X,100F12.6)') (A(I,J), J=1,N), B(I) CLOSE(11) DO 220 L = 1,LMAX ERR = 0. DO 210 I = 1,N TX=B(I) DO 200 J = 1,N 200 IF (I .NE. J) TX = TX - A(I,J)*X(J) TX = TX / A(I,I) ERR = ERR + ABS(TX - X(I)) 210 X(I) = TX 220 IF (ERR .LT. EPS) GOTO 299 STOP 299 WRITE(*,'(1X,F12.6)') (X(I), I=1,N) STOP END
305 名前:デフォルトの名無しさん [2007/03/03(土) 12:26:05 ] まだ77教えてるところなんてあるんだな。センセたちも古い規格しか知らなく て「古い古い」言ってんだから世話ないな。
306 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 13:21:34 ] 古いからこそ実績や信頼性の有るコードが多い。 研究室に入った学生が真っ先にする仕事は古いFORTRANコードのメンテだ。 FORTRAN77を学ぶことは、まだまだ有益なのだ。 決して、ン十年前の講義ノートを使い回しているだけじゃありませ(ry
307 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 16:07:37 ] 古いと、妙な手あかがつきまくって、 難解で珍妙なコードになってることもあるぜ。 FORTRAN は言語的にバグを出しにくくするサポートが未熟で デバッグしづらくて困る。
308 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:10:54 ] >>305 コンピュータ言語の教育という面ではF77は切り捨てたほうがいいのだが、 現実にメンテさせられるコードは77以前なのだから実用性からはそれもありかなとw まぁクイズとか解いてりゃいい新型言語とは違うしw
309 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:32:13 ] あ
310 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:35:33 ] fcpadでftn77を使っているのですが、あるプログラムをコンパイルして実行 しても結果が一瞬表示されて消えてしまいます。どうしたらいい?
311 名前:デフォルトの名無しさん [2007/03/03(土) 20:42:35 ] >>310 pause文を入れろ
312 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 20:50:36 ] >>311 これってもしかしosのてシステム上の問題? xpつかってるからセキュリティのservice pack2が問題かもしれん。 コマンドプロンプトからプログラム名を指定して実行したら成功しますた
313 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 21:34:50 ] >>312 コンソールアプリはそれが普通。 処理を停めなければDOS窓はすぐに消える。 それが嫌ならpauseで停めろ。 それより結果はファイルに出した方が良いぞ。
314 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 21:42:27 ] >>313 ということはつまり結果をテキストファイルみたいにしてだすわけですね? OPEN文つかうんですよね? ご指導ありがとうございます
315 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 22:45:09 ] DOS 窓開いてから実行すればいい
316 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 23:44:05 ] ありがっと
317 名前:デフォルトの名無しさん [2007/03/04(日) 19:02:27 ] OPEN文でファイルからデータを読ませようとしてるんですけど「ファイルがない」って エラーが出ます。あるのに。 なぜですか
318 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 19:16:03 ] 事故解決しました。 UNIT=1にするとエラー UNIT=2にするとコンパイルはできるが入力データに上書きされてしまう UNIT=3にするとコンソール画面に結果がでてウマー
319 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 23:12:07 ] CSQRTって使えるの?
320 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 23:49:23 ] >>319 FTN77で。
321 名前:デフォルトの名無しさん [2007/03/05(月) 00:06:07 ] >>317 一桁目は歴史的な理由から予約されていることが多い。 処理系によっては90番台も予約されていたりする。 特に理由が無ければ避けるのがよろし。 >>320 たしか、77の規格には無かったはず。 EXPを使って解け。
322 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 00:44:52 ] >>320 こんなとき(だけ)役に立つ、岩波FORTRAN辞典〜♪ によるとFORTRAN77でもSQRTの引数複素数時の個別名はCSQRTだ。よかったな。 だが、総称名使え。
323 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 06:01:36 ] >>321 一桁目ってunit=1から9のことdふぇすか? 複素数のはびっくりした。ああなるほどっておもた。オイラーの公式だね exp(iθ)=cosθ+i sinθ >>322 ということは、たとえばD=B**2-4*A*Cという式があって、REAL Dとしているとき、 sqrt(D)を計算しようとしますよね。BとAの与え方によってはD<0となり複素数と なりますよね。そのときCSQRT(D)とすればいいのですか?
324 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 06:13:49 ] ま、あれですかね。複素数ってプログラムで扱うもんじゃないんですかね
325 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 06:51:59 ] >>323 CSQRTの引数は複素数型。 そしてFORTRANではC言語などの様に引数の型を(関数宣言に合わせて)自動変換したりはしない。
326 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 07:51:42 ] ということは あらかじめ変数宣言でCOMPLEX Dとしていて CSQRT(D)ならばありってことですか?
327 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:05:32 ] >>326 文法的にはあり だがまあその場合、SQRT(D)としとけば内部的にCSQRTを呼んでくれるので わざわざCSQRT(D)とする必要はないけどな。
328 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:59:22 ] >まぁクイズとか解いてりゃいい新型言語とは違うし かっこいいな
329 名前:デフォルトの名無しさん [2007/03/09(金) 19:51:16 ] ちょっとしつもんです。 txtファイルで 0 0.1 3.2 6.3 1 2.1 5.6 5.9 ・・・ のようにちょっとずれたテーブルがあるんすけどこれを次のようにグラフ化できるように 整理できるプログラムって作れますか? 0, 0.1 ,3. ,6.3 1, 2.1, 5.6, 5.9 ・・・ 条件は入力がtxtファイルで出力もtxtファイルかcvsファイルにするものです。
330 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 20:14:07 ] 作れるけど、わざわざ FORTRAN で作るもんでもないと思われ。
331 名前:デフォルトの名無しさん [2007/03/09(金) 20:54:43 ] >>330 おしえてくださいませんか?また、フォトラン使わないならば何を使うのか教えてください。 お願いします先生
332 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:29:25 ] awk がちょうどいいんでない?
333 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:38:15 ] じゃあawkで #! /bin/gawk -f BEGIN { NMAX = 4; n = 0 } { for(i=1; i<=NF; i++) { a[n++] = $i; if (n >= NMAX) { putn(a, n); n = 0; } } } END { if (n>0) printn(a, n) } function putn(a, n, i) { for(i=0; i<n-1; i++) printf("%4.1f, ", a[i]) printf("%4.1f\n", a[i]) } もっと簡単に書けるかもしれないけど、こんな感じで。
334 名前:デフォルトの名無しさん [2007/03/10(土) 11:17:50 ] awkってなんですか
335 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:35:44 ] awkは語るまい。
336 名前:デフォルトの名無しさん [2007/03/10(土) 11:56:57 ] awk というのは、加齢臭の漂うおっさんスクリプト言語。 パソコンの処理能力が上がって、データ後処理がパソコンで実用的にできるようになった頃に 流行っていたスクリプト言語がawkだった。あの頃はperlも何も無かった。 大型計算機のFORTRAN出力をパソコンに落として、awkで整形処理、xyプロットソフトで描く。 という流れが80年代末から90年代初頭に流行った。 そういうわけでロートルはawkが使える。
337 名前:デフォルトの名無しさん [2007/03/10(土) 13:10:53 ] じゃぴったりなわけだ。 awkってコマンドプロンプトさえあればできるんですよね?
338 名前:デフォルトの名無しさん [2007/03/10(土) 14:16:18 ] "フォトラン"ってなんかカワイイ
339 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 16:11:24 ] フォトラン20 平成20年バジョン
340 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:24:56 ] >>337 基本的にコマンドラインでスクリプト・ファイルを指定したり、直接コマンドを書き込んだりして使う。 Linuxには大抵、最初から入ってる。 Windows用のもググれば色々見つかる。
341 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:54:03 ] にゃるほどシグウィンにするかな。いろいろありがとうごzぁいましゅ
342 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:12:56 ] すげーすげーすげー オークすげー ここの人のおかげで先ほどのデータ並べ替えができるようになりました。 ありがとうございました。 オークの勉強もフォトランと一緒にしようとおもいます
343 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 22:35:19 ] >>329 もしFORTRANでやるならどうしますか
344 名前:@がばい佐賀 mailto:sage [2007/03/10(土) 23:17:15 ] 先ほどからしつこくてすみません。テキストデータの並べ替えを質問してAWKに感動したものです。 実はフォートランでもプログラムを組んでみました。 REAL A,B,C,D C 読み込みファイル指定(既存) OPEN(UNIT=3,FILE='data.TXT',STATUS='OLD') DO 20 I=1,4 READ(3,*) A,B,C,D WRITE(*,100) A,B,C,D C 書き出しのフォーマットを指定 100 FORMAT(F6.3,',',F6.3,',',F6.3,',',F6.3) 20 CONTINUE C 開けたファイルは閉じましょう CLOSE(UNIT=3) END こんなぐあいでやったらコンパイルはちゃんと通ってデータも並びなおしてました。 でも、ちょっと腑に落ちないところがあります。 DO文のところです。俺は、なんとなくI=1,4として「これで1行から4行まで勝手に読み込んでくれるだろ」 という乗りでやったのですが実際のどげんですか? このI=1,4はA,B,C,Dを読み込むのを4回やれということになりますか? それとも1行目から4行目までA,B,C,Dを読むのを繰り返せというような行数を表すのですか? 普通、DO文でI=なんとかとしたら 処理のところにA=A+IとかIの入った式を書いたりするじゃないですか。でもこの問題の場合 Iを処理の回数として勝手に認識してくれているのであれば私のプログラムに間違いはない ですよね
345 名前:デフォルトの名無しさん [2007/03/10(土) 23:51:46 ] >>343 AWKは最近流行らないから、本とかも無いだろ。 今更感が無きにしも非ずだがFORTRAN界では大丈夫かw PROGRAM test IMPLICIT NONE REAL :: a(4) INTEGER :: i, ip DO READ(9, *, END = 999) a WRITE(*, '(3(f10.4, ","), f10.4)') a END DO 999 STOP END PROGRAM test >>344 あぁ、もう自作したかw FORTRANでは歴史的な事情により、指定しない限りフォーマット付きI/Oでは、 入力データの空白は0として扱われる。(FORMAT文のNB/NZオプションあたりの説明嫁) しかし*での自由書式だと空白が区切り記号として解釈される。 また今の場合のようにデータが足りないと改行して読んでくれる。 大昔は容量を節約するため出力データは空白を開けないで続けて書いたりしていたw 質問の解答は『A,B,C,Dを読み込むのを4回やれ』ということになる。 ところがFORMATを指定した場合はこうはならない。 /などで明示的に改行してやらないといかん。 細部は漏れも忘れたので文法書でFortmatのところ嫁。
346 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:58:03 ] うわーありがとうございます!
347 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 01:04:48 ] ところでおすすめの書ありますか?
348 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 05:38:38 ] >>345 。・゚・(ノд`)・゚・。 そりゃあ流行じゃないし、数もそれほどじゃないけど絶版になってないのもあるよ オライリーのとか。
349 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:08:55 ] >>336 うちの研究室では awk を教えられたぞ。
350 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:00:33 ] ホムペじゃあまだオークを語ってるところもあるね
351 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 16:39:20 ] FORTRAN よりは若い言語だよな。
352 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:32:57 ] >>351 そりゃFORTRANと比べたら……
353 名前:デフォルトの名無しさん [2007/03/11(日) 18:52:48 ] どなたかご教授下さい!! FTN95とfcpadの組み合わせで使いたいのですが、 fcpadでコンパイラのパスを「C:\Program Files\Silverfrost\FTN95\ftn95.exe」 として、いざf95のソースファイルをコンパイルすると [FTN95/Win32 Ver. 5.01.0 Copyright (c) Silverfrost Ltd 1993-2006] *** Invalid executable file suffix - only .EXE is permitted と出てコンパイルできません。ファイルの拡張子を.fにしても駄目でした。 どうしたらFTN95+fcpadでコンパイルできるのでしょうか!? おとなしくplato3を使うしかないのでしょうか・・・
354 名前:デフォルトの名無しさん [2007/03/11(日) 19:26:27 ] >>353 前にも誰かが聞いていたような・・・・ まぁあのキモイ顔のプラトン使ってやれよ!
355 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 19:40:25 ] >>353 FTN95のコマンドラインの書式は > ftn95 <filename> [option [option] ...] 一方、CPad (for FTN77)がコンパイラに渡すコマンドラインの書式は > ftn95 [option [option] ...] <filename> 書式が違うのでそのままではエラーになる。 解決策としては例えば、↓の様な内容のバッチファイルを @REM --- ここから --- @shift ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 %0 @REM --- ここまで --- ftn95.exe と同じディレクトリに作成し、fcpadの「基本設定」の「コンパイラのパス(W)」に このバッチファイルを指定する。 しかし自由書式のプログラム作成とか考えるとCPad for FTN77を使うよりも 付属のplato3か他のエディタを使うことをお勧めする。
356 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 19:44:46 ] >>353 このスレの57のあたりを見直せば
357 名前:353 mailto:sage [2007/03/11(日) 23:32:50 ] >>355 さん ありがとうございます! 早速バッチファイルを作ってみましたが、結局うまくいきませんでした。 たしかにfcpadにこだわる必要はなさそうなので、vimを使ってみようと思います。 >>354 さん >>356 さん ご意見ありがとうございます! 前述の通り結局vimを使うことにしました^^;
358 名前:デフォルトの名無しさん [2007/03/16(金) 18:37:39 ] こんにちは。現在Fortranでプログラムをしているのですが、難しくててこずっています。 そこで、知恵を貸していただきたいと思い、書き込んでいます。 A=x*exp(-u*B)+y*exp(-v*B)+z*B^(-(w+1)) という関数があり、x,y,z,u,v,wは未知数で AとBはExcelのA列とB列にそれぞれデータが600与えられていて、 test.csvとして保存しています。 このx,y,z,u,v,wの未知数6個を上式の関数とA,Bの配列(?)を用いて, 収束させることによって求めたいと思っています。 ご教授お願いします。 dimension、open、write、read、doなどを使うのはなんとなく分かるのですが、 、難しくてよく分かりません。 どうぞよろしくお願いします。
359 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 20:56:50 ] salford FTN90 とPLATO3のダウンロードできる場所をおしえてくださいお
360 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 03:57:05 ] >>358 まずは問題点を切り分けよう。 ファイルの読み込みと実際の計算部分だ。 どちらならできる? 両方とも難しいかい?
361 名前:デフォルトの名無しさん [2007/03/20(火) 16:53:44 ] 質問させてください DO i=1,10 DO j=1,10 DO k=1,10 dt_den(i,j,k) = den(i,j,k) * div_vel END DO END DO END DO というコードを書いたのですが、『ランクが違うので計算できない』という旨のエラーが出ました。 「配列の一つの要素を取り出し、計算して、別の配列の要素へ代入する」 ということをやりたいのですが、どのように書けばいいのですか?
362 名前:デフォルトの名無しさん [2007/03/20(火) 21:37:08 ] Fortran77のコンパイラの選択に関する質問です。 私はこれからFortran77を学ぼうとしているところです。 利用の目的は学術的な数値の計算です。 有償、無償の様々なコンパイラがあることは調べているうちにわかりました。 しかしなにぶん右も左もわからないもので、どれが良いか決めかねています。 信頼性を重視した場合、やはり有償のものを購入する方がよいのでしょうか。 また、お勧めのコンパイラがありましたら教えていただけますと幸いです。 当方Windowsを使用しており、主な環境は以下の通りです。 OS:WindowsXP Professional CPU:Pentium D(4?) 2.8GHz Mem:1GB なお、購入の場合は5〜10万円程度の予算を考えております。 どうぞよろしくお願い致します。
363 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 21:49:54 ] !これから学ぶのに、いきなり5-10マソも出すなんてすごい!しかも77だなんて。 !どこかの研究者さんでしょうか。メモリ1GBということは、大規模な計算では !なさそうなので、無料のG95かgfortranでいい気がするのですが、どうなんでしょう? !学生の私には判断できません・・・。
364 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:20:08 ] 上に同じ。 安い/無償の環境と高い環境の違いは ・開発のしやすさ ・ライブラリの有無(例:高速な数値演算ライブラリ) ・最適化の性能(=計算速度) あたりにあるので、まずはフリーのコンパイラを使ってみたらどうか。
365 名前:361 mailto:sage [2007/03/20(火) 22:37:36 ] すみません。自分で解決しました。原因は REAL(8),ALLOCATABLE :: div_vel(:,:,:) としていたことでした。正しくは REAL(8) :: div_vel でした。
366 名前:デフォルトの名無しさん [2007/03/21(水) 17:29:05 ] >>358 その式を解くとなると、 非線形の最小二乗法(または、自乗法)が 必要になります。 もちろん、FORTRANで計算可能ですが、 一からプログラムを書くとなるととっても大変だよ。
367 名前:362 mailto:sage [2007/03/21(水) 17:40:00 ] ご返信ありがとうございます。 研究に用いるため信頼性をなによりも重視しており、 予算も高めに覚悟しておりました。 有償無償の間にバグに関して差がないのであれば、 最初は無償のものを使おうと思います。 Salfordのものを使うつもりです。 相談に乗っていただきありがとうございました。
368 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 02:02:25 ] >>367 大規模計算はスパコンで、解析は自分のPCでフリーのコンパイラだけど、 特に問題は出ていない。 少なくとも、今のところ、バグで酷い目にあったことは無いかな。 知り合いは、その昔、スパコンのコンパイラのバグで酷い目にあったそうだから、 有償/無償の差よりは、運/不運のファクターの方が大きいかも。 多くの人が使っているものを選べば、まぁ、大丈夫だと思う。 コンパイラのバグに出会ったことは無いけれど、 大規模な新型スパコンが導入されると、設定ミスが発覚したり、 ジョブ管理のシステムの挙動がおかしかったり、トラブルが続いて 落ち着いて使えるまでに少し時間がかかることもある。 数が多く出ているようなシステムは、こういうことは少ないと思うけど。
369 名前:デフォルトの名無しさん [2007/03/25(日) 13:03:53 ] >>367 金があるなら、Intel Fortran + MSVisualStudio の組み合わせでいいんじゃないの? ソフトは利用者が多い物が勝利するので、寄らば大樹の陰。 VisualStudioはアカデミックなら5,000円なので無問題。 IntelFortranは、やや高いし、毎年$200のお布施でライセンス更新をしないといけないが。 (再インストール出来なくなるだけで、使えなくなるわけではない) Linux版でよければただで使える。 バックエンドが富士通なら、富士通/Laheyのコンパイラを使うという手もある。 Fortranは未だコンパイラ市場が存在できてい牙城なので、フリーソフトを排撃してこれを守ってゆこうw
370 名前:デフォルトの名無しさん [2007/03/25(日) 15:33:39 ] すいません、初心者です。 ↓のようなデータを画面に出したいのですが 参考プログラムを教えていただけませんか? 1964/1/1 115 89 80 81 104 154 209 256 287 298 285 260 229 199 176 170 189 1964/1/2 155 111 89 81 91 124 171 227 266 293 292 274 252 221 190 174 181 1964/1/3 191 147 112 92 94 113 151 194 241 271 290 283 267 241 214 189 176 1964/1/4 222 185 147 117 101 107 134 168 208 248 274 284 274 256 233 208 185 1964/1/5 238 213 184 156 134 127 139 164 193 227 259 276 274 267 249 226 204 1964/1/6 248 234 214 190 165 151 149 161 181 206 234 257 267 266 257 243 222 1964/1/7 234 236 229 215 199 184 175 175 184 203 224 241 256 264 259 248 233 1964/1/8 216 228 234 229 221 213 203 192 190 197 210 225 239 252 258 254 243 1964/1/9 193 212 227 237 238 231 220 209 199 194 195 205 217 232 243 250 246 1964/1/10 163 181 203 226 238 243 240 229 217 205 195 196 202 215 232 245 251
371 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 16:33:21 ] >>370 write(6,'(A)') '1964/1/1 115 89 80 81 104 154 209 256 287 298 285 &260 229 199 176 170 189' write(6,'(A)') '1964/1/2 155 111 89 81 91 124 171 227 266 293 292 &274 252 221 190 174 181' write(6,'(A)') '1964/1/3 191 147 112 92 94 113 151 194 241 271 290 & 283 267 241 214 189 176' write(6,'(A)') '1964/1/4 222 185 147 117 101 107 134 168 208 248 2 &74 284 274 256 233 208 185' write(6,'(A)') '1964/1/5 238 213 184 156 134 127 139 164 193 227 2 &59 276 274 267 249 226 204' write(6,'(A)') '1964/1/6 248 234 214 190 165 151 149 161 181 206 2 &34 257 267 266 257 243 222' write(6,'(A)') '1964/1/7 234 236 229 215 199 184 175 175 184 203 2 &24 241 256 264 259 248 233' write(6,'(A)') '1964/1/8 216 228 234 229 221 213 203 192 190 197 2 &10 225 239 252 258 254 243' write(6,'(A)') '1964/1/9 193 212 227 237 238 231 220 209 199 194 1 &95 205 217 232 243 250 246' write(6,'(A)') '1964/1/10 163 181 203 226 238 243 240 229 217 205 &195 196 202 215 232 245 251' end
372 名前:デフォルトの名無しさん [2007/03/25(日) 20:01:53 ] PROGRAM omanko IMPLICIT NONE CHARACTER (LEN = 80):: fmt INTEGER :: iy, im, id, idat(17) fmt = '(i4, 2("/", i2.0), 17i4 )' iy = 1964 im = 3 id = 24 idat = (/115, 89, 80, 81, 104, 154, 209, 256, 287, 298, 285, 260, 229, 199, 176, 170, 189/) WRITE(*, fmt) iy, im, id, idat STOP END PROGRAM omanko
373 名前:370 [2007/03/26(月) 12:12:59 ] >>371 それはDO文でやった方がいいですねw >>372 年月日のところが上手く表示できなかったので 参考にしてみます。 >>371 ,372 感謝です。
374 名前:デフォルトの名無しさん [2007/03/26(月) 20:58:14 ] plato3で作成したプログラムのエグゼファイルのアイコンをアイコンエディターでつくった アイコンに変えるにはどうしたらいいですか?
375 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 22:11:04 ] >>374 プラトン先生はよく知らんが、リソースファイル書いてアイコン指定すれば?
376 名前:デフォルトの名無しさん [2007/04/02(月) 21:07:05 ] Fortranで何ができるのかも良くわかっていないのですが, データを出力したときにメモリーの状態はどうなっているのか? ということを教えて下さい. その内容は 「Fortranでエクセル形式データを出力させた場合,データは一度 メモリーに格納され,エクセルへ出力するのだと思っているのですが, 出力した後,メモリーは開放されるのでしょうか?」ということです. 当方の環境は, コンパイラ : fujitsu fortran77 OS : WindowsXP Professional 以上,よろしくお願いします.
377 名前:デフォルトの名無しさん [2007/04/02(月) 22:07:34 ] 死にたい
378 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:09:26 ] >>376 質問の意味が不明瞭だ。 原則としては、プログラムが終了するなら、メモリーは解放される。 実行中は、静的に確保した部分は確保されたままだし、動的に確保されたものはDEALLOCATE すれば開放される。 ただしOSやコンパイラにバグがなければ。 昔のMS-PowerStationにはメモリーリーク・エラーがあって実行中にI/Oがあると、 徐々に使用メモリーが増えていった。
379 名前:デフォルトの名無しさん [2007/04/03(火) 02:15:04 ] >>377 死ぬなら中国大使館に爆弾持って特攻だ!!
380 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 14:14:52 ] >>379 FXって言う為替取引で倍率を200倍でやると良いって、死ぬきあるなら博打をしてから詩ねってことだな
381 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 10:24:58 ] r'::::::::,:::::::::::::::::::::::\ 【USBオナホを実現させる会】に入会しませんか^^^ \::/::;;;:::::::::::::::::::::::::\ , ─ -v_;;. -─ ─ ── ─-、このオナホが実現すれば、パソコンにUSB接続して | , f-‐ ''_ .二 二二二 二._t 対応エロゲを立ち上げてペニスを挿入するだけで Y__,rYニニ -- ‐─ ──‐‐─`ー─‐-- 、画面のキャラクターが喘ぐんだよぉ♪ ,..‐Kノ,h;;::.,-rェ;ェエf7fv!Tl TiTit.、--':::::::::ノ キミの腰の動きに合わせて (:::::::::l::::ヽ.|l.|/,|l.1,!H、ト|` H┼I、l|l |l ト.-‐ ''´ わたしたちがアニメーションするの。 `,ニl:::::::::レl/!|lイh_ l|`` ,イrマ,イ| |l |レノ とっても素敵なアイテムでしょっ☆ く /|:::::::::レl.ィ!ll.l. ー‐' , kノハト,イレ:::::l / / !:::::::::|1l_l.|l.|ゝ"" (.ア ,仆!|::´:::::::| ゆっくり動かすと・・・じわじわと感じて、 └t. l l:::::::::N'::: N´ヽ`,,ーr t1リ::レ::::::::::: ! はげしく動かすと・・・失神とかもするんだよ☆ `ー弋:::::::`:::::::::ゝ ニァ@'ノ::、:::::::::::::::: ノ `ー、::::::: /:::::::,イ !ト`ヽ::ヽ:::::, ‐'´ わたしたちとバーチャルで繋がるから `ー1::::::└Ll_rー'::::::〉´ もう、即射精しちゃうよねっ☆ でも・・・USBオナホールは、まだ実現していないの・・・。 はやくみんなとエッチなことしたいなぁ・・・。 USBオナホールを実現させて次元を超えたSEXをしましょうねっ☆ 入会方法はとっても簡単。毎週1回どこかのスレに↑をコピペするだけでいいヨ♪
382 名前:デフォルトの名無しさん [2007/04/05(木) 09:23:54 ] Intel Visual Fortran9.1を使っています. Fortran90形式でプログラムを書いており, マトリックスを表示させたいのですが,これに関して質問があります. 現在,2次元配列に格納されたマトリックスを表示するために, integer :: i,j,N integer,allocatable :: A(:,:) 〜〜〜 N=10 allocate(A(1:N,1:N)) A = 123 do i=1,N,1 write(6,'(100I3)') (A(i,j),j=1,N,1) enddo という風にしています. つまり,横に並べて表示するformatとして 100I3 という風に反復回数を十分大きくとって 対応しています. この反復回数100の部分を変数にしたいのですが不可能なのでしょうか?