1 名前:デフォルトの名無しさん [2009/01/24(土) 18:32:01 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。 ●注意事項 ・質問する前にGoogle等の検索サイトで検索しましょう。 ・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。 ・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。 ●前スレ くだすれFORTRAN(超初心者用)その3 pc11.2ch.net/test/read.cgi/tech/1196384126/ くだすれFORTRAN(超初心者用)その2 pc11.2ch.net/test/read.cgi/tech/1164121236/ くだすれFORTRAN(超初心者用) pc8.2ch.net/test/read.cgi/tech/1138063703/ ●関連スレ FORTRAN W pc11.2ch.net/test/read.cgi/tech/1163319215/
700 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 00:55:13 ] >>698 >2003でスコープ範囲指定が出来るようになるらしいけど、いつ出るんだろう? >まだ見たことないや。 変数のスコープか? PRIVATE、PUBLICは今あるままで、PROTECTED(いわゆるリードオンリー)が加わる程度だと思ったぞ。 他にもあんのかな?
701 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 09:26:51 ] COMMON文ってmoduleみたいにスコープを指定ってできないの?
702 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 13:05:37 ] 名前を共有するんじゃなくて、メモリブロックを共有するための仕組みだからねえ。
703 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:57:09 ] >>701 おまえふざけてんのか?w
704 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 03:32:54 ] お寿司ってハンバーグみたいにソースで食べるってできないの?
705 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 08:15:17 ] ああ、普通そうやって食べる。
706 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:00:36 ] www 両方ともマヨネーズならアリだよな
707 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:04:07 ] >>706 え?
708 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 09:03:12 ] ・・・だめ?
709 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:44:02 ] 本物のプログラマはマヨネーズは使わない。 Quiche Eaterはマヨネーズを使う。
710 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 19:18:00 ] 質問です。 割り付け配列って何ですか?
711 名前:710 mailto:sage [2009/11/18(水) 19:33:35 ] 710です。たとえば以下のプログラムの変数A,B,Cを割り付け配列すれば どこを変更すればいいのですか? program matrix_wa implicit none integer::N,I,J integer,parameter::IDIM=100 real(8),DIMENSION(IDIM,IDIM)::A,B,C ! write(*,*) 'INPUT MATRIX DIMENSION' read(*,*) N write(*,*) 'INPUT MATRIX ELEMENTS OF A' do I=1,N read(*,*) (A(I,J),J=1,N) enddo write(*,*)'INPUT MATRIX ELEMENTS OF B' do I=1,N read(*,*) (B(I,J),J=1,N) end do CALL MATADD(IDIM,N,A,B,C) CALL MATOUT(IDIM,N,C) stop end program matrix_wa
712 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 19:34:17 ] !============================================== SUBROUTINE MATOUT(IDIM,N,X) !============================================= implicit none integer IDIM,N,I,J real(8),DIMENSION(IDIM,IDIM)::X write(*,*)'C=' do I=1,N write(*,*) (X(I,J),J=1,N) end do return end subroutine MATOUT !=============================================== SUBROUTINE MATADD(IDIM,N,A,B,C) !============================================= implicit none integer::IDIM,N,I,J real(8),DIMENSION(IDIM,IDIM)::A,B,C DO I=1,N do J=1,N C(I,J)=A(I,J)+B(I,J) end do end do write(*,*) 'C=' do I=1,N write(*,*) (C(I,J),J=1,N) end do return end subroutine MATADD
713 名前:デフォルトの名無しさん [2009/11/21(土) 10:18:39 ] ちょっとお聞きしたいのですが、 3つの物理量の実測(とびとびのデータ)からある答えの物理量 がわかるデータがあるとき、 3つの物理量がある入力値の場合の答えの物理量を出すときに、 データの線形補完をしたいのですが そういうやり方とかないでしょうか
714 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 12:07:51 ] >>713 言いたいことがよく分からないのだけど、補完みたいなことをしたいの?
715 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 21:21:33 ] 回帰分析とかいう分野の事?
716 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 21:25:40 ] >>713 最小二乗法とか?
717 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 00:11:48 ] >>714-716 ありがとうございます。 あまりうまく伝えられなくて申し訳ないです。。 詳しくないのですが多分回帰の範囲と思います 3変数から一つの解を出す方法なのですが、 データから多項式で式が一発で出せるようなのがあればいいのですが、 そういうのはないでしょうか。。
718 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 02:38:52 ] それを求めたいのか、求めるプログラムを作りたいのか。 前者ならR言語が使えるらしい。
719 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 12:13:04 ] >>717 y=a*x1 + b*x2 + c*x3 のような式において、x1、x2、x3、yのリストから係数a、b、cを 導きたいなら、Excelの関数で1発でできる。重回帰分析でググれ。
720 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 12:48:30 ] >>713 > データの線形補完をしたいのですが 最小二乗法使っとけ。 線型でいいということは測定できる変数x、y、z とそれらから分かる量wの間に w = a*x + b*y + c*z という関係があると仮定できるってことでしょ?で、係数a、b、cは分かんない。 この分かってない係数を測定データから決定することで、測定データの中には無 いx、y、zの組のときにwがどんな値になるかを知りたいのだと邪推してみる。 >>713 の頭の中を覗けるわけではないので間違ったこと言ってるかもしれんけど。 それをどうしてもFortranで書かなければならないのなら仕方が無いが、そうでも なければ >>718 が言うように R でも何でも使ってればいい。 でも最小二乗法ならwのデータも要るのか?元質問だとwは測定して無いっぽいな。 こういうときはどうすんだ? 元質問がグダグダなので無責任に色々と言い放ってみた。グダグダじゃなくても 責任ある発言なんてできないけど。
721 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:09:24 ] Windows 用の Fortran 95 コンパイラを買おうと思っているのですが, NAG Fortran Builder 5.2 と Intel Visual Fortran 11.1 日本語版の どちらにしようか迷っています。すみませんが,以下の疑問それぞれに ついて判るかた,教えてください。 【1】 以下の項目について,どちらが優れているのでしょうか? (A) コンパイルしてできた実行ファイルの処理速度の速さ (B) 開発環境の使い勝手の良さ(入力補完など) 【2】 Intel Visual Fortran でも NAG Fortran Builder のように GUI アプリケーションが作れるのでしょうか? 【3】 Intel Visual Fortran と NAG Fortran Builder の2つ以外に 日本語版の Fortran 95 コンパイラはあるのでしょうか? なお,私のパソコンは, Windows が XP Home Edition SP3, CPU が Intel Pentium 4 (2.40GHz), RAM が 512MB です。
722 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 01:19:25 ] >>721 1) (A)処理速度で言うならIntel。NAGは文法的な厳格さ、厳密さが売りで速度は二の次。 (B)Intelの統合環境はMSのVisualStudioで、入力補完などは無い。シンタックスカラーリング程度? VS2010あたりで色々対応したいと言うようなことは言っているが未定。 NAGの方は独自の統合環境で、こちらもシンタックスカラーリング程度だったような。 Fortranの入力補完は、ほとんど存在しない。 昔の(10年以上前の)LaheyについてきたWin3.1時代風のEDくらいか。 Polyhedron社が今のLahey用にVisualStudioの拡張を売っていたような気もするが詳しくは分からん。 Laheyのサイトを見てくれ。 2.IVFでのGUIは、Win3.0時代から続くQuickWin互換の初歩的なものと、Win32APIを直接叩く方式がある。 サンプルプログラムが提供されているが、Fortranの呼び出し規約とCの呼び出し規約が違うので Win32APIに習熟しているとともに、呼び出し規約等に惑わされない必要があって、理解が困難。 OpenGLで絵を描くだけならサンプルの改造で済むのでまだやさしい。 3.日本語版があるかは知らないが、Winで動くものとしては 有料 商用 ・CUDAに対応するなどアグレッシブなPGIのFortran。 ・富士通とコンパチなLahey-Fujitsu Fortran (.Net対応とか、SSLライブラリがある) ・MacやCrayとの親和性が売りだったAbsoft Fortran (今はその利点もあまり無いが) 無料系 ・広告がうざいが、ただで使えるのがSilverFrostのFTN95。(商用は.Net 対応らしい) ・GNU系がよければ、g95 または gfortran. (この二つは同じ先祖から分かれた別物) 参考:非Win *FreeのSUN OS上でよければ、SUNのFrotran95もただで使える。 *Linux上なら Intel Frotranが学術目的ならただで使える。
723 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 01:47:53 ] >>722 OpenGLで絵を描くだけならサンプルの改造で済むのでまだやさしい なつかしす。結局コレで遊んだ以外はコマンドラインでしか使わなかったな・・・ もっとも自分の古いマシンに乗ってるのは DEC のVisual Fortran だけど、まあ同じようなものだからいいか。
724 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 01:53:34 ] 追加、というか・・・ QQで始まるGUIその他用の拡張命令サブルーチンが一杯あって訳わからんかったなぁw GUIアプリ作るときには do while ..... enddo でコード全体を無限ループで囲む、 アプリ終了=ループ脱出はwhile()内に来る条件のフラグをいじる、だったような。 Fortran 文法に可能な限り沿いながらGUIアプリに必須な マウス操作とかのいつ起こるか未然にわからないアクションを扱う苦悩が味わえたw
725 名前:721 mailto:sage [2009/11/25(水) 21:53:03 ] >>722 すべての質問に対しての丁寧な回答,本当にありがとうございました。 とても助かりました。
726 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 01:17:03 ] >>724 基本的に割り込み処理ののりだよな。 BASIC全盛時代のINKEY$でリアルタイム・キー入力処理を書いているようなもの。
727 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 05:07:03 ] >>726 そうそう、そんな感じw >>721 メモリ少なくね?
728 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 10:11:01 ] >>722 *Linux上なら Intel Frotranが学術目的ならただで使える 正確には純粋な私用ならタダ、ね。学生がFortranやCで遊ぶだけならLinux版はタダだけど、 それを論文にしたり研究発表で使うデータ計算に使うのならちゃんと有償版を買わないといけない・・ハズ。 まあ、いまのところはIntel自身もあまりねちねちチェックしてないけど、 将来Intelの気が変わるとややこしいことになる大学や研究室や個人は多いと思われる。 小さいメーカとか10万円をけちって将来の生殺与奪の権をIntelに捧げてるところは多いのでは?
729 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 10:49:02 ] 質問です。処理系はintel fortranです。結果に怪しいところが多いので浮動小数点例外を "アンダーフローは 0.0 にする。他の IEEE 例外は異常終了する (/fpe:0)"にしてます。 以下の行で、floating invalid を吐いて計算が止まります。変数は全て暗黙の型宣言です。 time=time*(xa-xb)/dx ちなみに直前でそれぞれの中身を表示したところ、 time=5.0E-07 xa=0.5368819 xb=0.5368840 dx=-2.0805840E-06 でした。 上の値はかなり長い計算の途中で出てくるので、手っ取り早く原因を探ろうと、 直前に上の数値を強制的に書き込んで回してみましたが再現しません(止まりません)。 floating invalidが上記の計算の行で起きているのはエラーメッセージのLineから明らかです。 正直意味不明過ぎて何を言ってるのか分からないかもしれませんが、何か 原因に思い当たること、もしくは他に何か必要な情報があれば教えていただけないでしょうか?
730 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 05:56:58 ] -r8 や -r16 付けて倍精度や4倍精度で計算するとか、かな。 あとは・・・・規格化(無次元化)する際の典型量を見直す、とか。 系全体の長さを1にするのではなく、関心のある現象の空間的なひろがりを1にとるとか。
731 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 09:38:43 ] dx って負になるのは正しいの?
732 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:07:56 ] >>729 キミに「プログラムは書かれいる通りに動く」という格言を進呈しよう。 とても高い確率でキミが何処かで間違えている。
733 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:23:59 ] >>731 一般論として考えた場合は負でも問題無い。というのは飽くまでも或る点からのズレ(変位)という意味し かないから。 プログラムの中で何らかの約束がある場合には、その約束のために正の値でなければならないことはあるだ ろう。そういう時に負になってしまうのはバグでしょ。その場合はプログラムを書いた人の検討不足かタイ プミスかだ。デバッグができていないんだろう。他の理由もあるんだろうけど思いつかん。
734 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:44:21 ] >>729 > ちなみに直前でそれぞれの中身を表示したところ、 これは本当に直前なのか? 正常に動く一回前の値じゃないのか?
735 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:56:50 ] >>729 多分、ただのゼロ割だろう。 Intelのコンパイラのバージョンはいくつかな? 新しい奴ならNaNにして続行するが、8.1とか古い奴はFloating Invalidで即死する。 状況的には>>734 の言っていることが正しいであろう。
736 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 10:33:12 ] >>730 倍精度は文字どおり精度を上げるのに有効だけど・・・ 単精度でコケて倍精度で動く奴は、モデルを間違えてるかコードがおかしいかのどちらかだから 根本的には解決にならないね。
737 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 12:05:49 ] 微妙なケタ落ちを救済する事が出来るが、ケタ落ちが発生しない アルゴリズム/コードに代える方がまっとうな道。
738 名前:729 mailto:sage [2009/11/29(日) 13:14:09 ] みなさん、レスありがとうございます。まだ全部追えて無いんですが… >>730 実は無次元化してません… >>731 733が仰ってますが、単に変位です。負値は大丈夫です。 >>732 もちろんそうなんですが、どこで間違えてるのか分からなくて。 >>734 計算の一行前にwrite文で表示させてるので一回前の値と言うことはないはずなんですが、 この値で止まるのも同程度におかしいので何か間違えてるんだと思います。 >>735 ver.11です。デフォだとNaNで続行されますけど、NaNだと粒子が行方不明になってしまって困るので トラップして原因を突き止めようとしてるのです。開放系ならごく稀に粒子が居なくなるくらいは問題ないんですが、 閉鎖系だと粒子がどんどん減ってしまうので… >>737 こういう問題が発生しないアルゴリズムってどういうものでしょうか?原理的に発生しないんですか? 今自分で思いつくところだとNaNを検出して適当な座標を振りなおしてやるくらいしか思いつかないんですが… ちなみにゼロ割した場合、floating invalidじゃなくてfloating divide by zeroとでました。分子も0だと floating invalidになるのでこっちなんでしょうか?まだ不可解なところがあるのでもう少し見直してみます。
739 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:58:08 ] 出力のバッファリングで一回前を見ている可能性が有る。 デバッガで調べた方が良い。
740 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:15:31 ] >>739 じゃ、出力先をファイルか標準エラー出力に切り替えてみるのもありだな。 そんで結果を見る。デバッガなんて使いこなすまでに時間が掛かりそうだし。
741 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 00:05:11 ] バッファリングはファイルの方が積極的。 もうひとつの可能性: floating invalidは表示ルーチンで出ている。
742 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 00:27:10 ] >>738 あとの安直な手は別のコンパイラで実行してみることかな。 g95あたりで一回やってみればいいのでは。
743 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 06:49:04 ] バファリンの半分はやさしさでw バッファリングの半分は嘘のデータで出来てます。 あとは・・・Write 文つかったデバッグの場合でかつ元のをUnrollingしていると Write文挿入する・しないで演算順序が変わることがあるから UnrollingやできればInlineを抑制したコンパイルをすることをお薦めしてみるテスト
744 名前:デフォルトの名無しさん [2009/12/01(火) 05:51:21 ] Fortranをはじめたばかりです * *** ***** ******* を描けという問題で、1.2.3行目のスペースの出し方がわかりません・・・ $を使えばできるのかと思いましたが、わかりません どなたか教えていただけないでしょうか?
745 名前:744 mailto:sage [2009/12/01(火) 05:52:09 ] スペース消えてる・・・ >>744 はピラミッド形です
746 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:14:43 ] do i = 1, 4 do n = 1, 7 if (n .GE. (5-i)) .AND. (n .LE. (3+i)) write(*,'(A,$)') '*' else write(*,'(A,$)') ' ' enddo enddo write(*,'(A)') '' enddo かな?
747 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:15:40 ] あら、一個 enddo -> endif にしとかんといかんかったね
748 名前:744 mailto:sage [2009/12/01(火) 06:26:33 ] >>746 早速のレスありがとうございます 書いてくださったのを参考になんとか書けました><
749 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 09:47:59 ] お、かけましたかw if の行に then がなかったりしたけど、 えがったえがった
750 名前:デフォルトの名無しさん [2009/12/01(火) 23:10:57 ] FORTRAN初心者です。。 1000以下の整数のうち、7で割ると2余る数を全て合計するプログラムをつくりたいのですがわかりません… どなたか教えてください。
751 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:16:50 ] >>750 integer i, s, n n = 1000 s = 0 do i = 1, n, 1 s = s + i end do write(*,*)'sum =',s 続きは誰かヨロ。みんなで完成させようぜ。
752 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 03:44:10 ] if (mod(i,7) .EQ. 2) then s = s + i write(*,*) i, s endif 途中経過表示はいらないけどね。
753 名前:sage [2009/12/02(水) 07:28:33 ] >>751-752 ありがとうございます。 本当に助かりました 自分でやったのでは実行できなかったので;; また機会があればよろしくお願いします。
754 名前:デフォルトの名無しさん [2009/12/03(木) 13:16:46 ] 初めまして。 最小二乗法のプログラム(放物線近似)をつくっているのですが、 "dot_product"文がうまく使えません。 実行すると下記のようなエラーが出ます。 x4 = dot_product(x2,x2) 1 Error: 'vector_a' argument of 'dot_product' intrinsic at (1) must be of rank 1 In file test02.f90:28 x4 = dot_product(x2,x2) 1 Error: Function 'dot_product' at (1) has no implicit type 長くなりますが↓にプログラムを貼ります。
755 名前:デフォルトの名無しさん [2009/12/03(木) 13:20:29 ] program saishou implicit none real(8)::a,b,x,y,y_b,xi,x2,yi,y2,xy,d,x4,x2y integer::n,i allocatable x(:), y(:), y_b(:) write (*,*) 'input number of data ' read (*,*) n ! input size of dimension write (*,*) 'number of data is ',n allocate (x(n),y(n),y_b(n)) !------------------------- do i = 1,n read(*,*) x(i), y(i) write(*,*) x(i), y(i) end do !------------------ xi = sum(x); x2 = dot_product(x,x) yi = sum(y); xy = dot_product(x,y) x4 = dot_product(x2,x2) x2y= dot_product(x2,y) d = n*x4-x2**2 a = ( n *x2y - x2*yi ) / d b = ( x4*yi - x2*x2y ) / d write (*,'(1x,2(3x,a,f7.3))') 'a =',a,'b =',b write (*,'(a8,a9,a10,a11)') 'x','y','y_b','dif' end program saishou
756 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 13:45:03 ] dot_productは引数に同じ要素数の配列しかとれない。 x2はスカラーなので引数にできないですよ。 ちなみにdot_productが返すのはベクトルの内積を求めるので、戻り値はスカラー。 ・・・とfortran歴1年の俺がいってみる
757 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 14:29:43 ] 前から思ってたんだけど、dot_productみたいなデフォで用意されてる関数を使うのって、 ベクトル化などの高速化・最適化を妨げるリスクはないと思っていいよね? それとも、doループをいちいち書いた方がやっぱり速くなったりする?
758 名前:デフォルトの名無しさん [2009/12/03(木) 21:10:12 ] fortranの初心者です 彗星の軌道をプログラミングしたいのですが上手くいきません どこがおかしいか教えてくださいませんか? program main integer i,j real ms,me,x,y,vx,vy,t,dt,G ms=1.989*(10**30) dt=100 G=6.673*(10**(-11)) K=G*ms/R**2 x=0.8826*(10**(11)) y=0.0 R=sqrt(x**2+y**2) vx=0.0 vy=55000 do i=0,1000 x=x+vx*dt*i y=y+vy*dt*i R=sqrt(x**2+y**2) vx=vx-K*(x/R)*dt*i vy=vy-K*(y/R)*dt*i write(6,*) x,y enddo end
759 名前:デフォルトの名無しさん [2009/12/03(木) 21:42:09 ] >>756 なるほど・・・ご指摘ありがとうございます。 では行列の4乗はどう書けばよいのでしょうか。。
760 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:15:52 ] >>759 そういうサブルーチンを自作すれば良い。幸いなことにFortran90からは再帰も使えるしね!
761 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 23:25:57 ] 気付いた所だと、 xnext=x+vx*dt*i ynext=y+vy*dt*i R=sqrt(xnext**2+ynext**2) vx=vx-K*(x/R)*dt*i vy=vy-K*(y/R)*dt*i write(6,*) x,y x=xnext y=ynext vx,vyはdtずらす前のx,yを使うのがオイラー法の正しいやり方ですよ。 これだけで直るかは自信がありませんが。
762 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 00:45:27 ] 下記のIを求めるプログラムを組もうとしているのですが、フォートランはさっぱりで… どなたか本当にお願いします。 Zは3×3の行列で、V、Z、Iの各要素は複素数とするそうです。 確かに複素数を扱うにはCよりはフォートランだとは思うのですが… [V1] [Z11 Z12 Z13] [I1] [V2]= [Z21 Z22 Z23] [I2] [V3] [Z31 Z32 Z33] [I3] よろしくお願いします。
763 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 02:27:53 ] >>757 たぶん弊害はない。たぶん、なのは実装によるので。ベクトルがでかくなると、 出来合いのルーチンの方が速いね。そういうチューンしてると期待していいとおもう。 3次元くらいだったら自分でループ書くか、 naiseki=a(1)*b(1)+a(2)*b(2)+a(3)*b(3) みたく成分を明示したほうがいいことがおおいけど。
764 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 02:29:50 ] >>762 複素数扱うならFortranのがいいよ。 んで、3x3行列なら (-1)^(i+j) * (小行列の行列式)_{j,i}/(全体の行列式) を明示した方がいいよ。
765 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 11:04:54 ] >>763 thx そのうち自分で試してみようかな
766 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 19:50:53 ] fortranで複数ファイルの結合ってどうやってやればいいですか? もちろん中身を読み込んで新しいファイルに書き込むなら出来ますが、 cat みたいな感覚で使える命令ってあるでしょうか?
767 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:14:56 ] >>766 system() を使って cat で繋げるとか? Fortranが内部で持っている方法は聞いた事が無いです。
768 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:47:25 ] >>758 G=6.673*(10**(-11)) この辺は G=6.673E-11 とするべし。 あと77なのか90なのか判然としないが、暗黙の型を破る気ならIMPLICIT NONEを つけておくほうが吉。 >>766 catだって中では読んで書き出しているだけだろうに
769 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:54:43 ] >>768 > >>766 > catだって中では読んで書き出しているだけだろうに そういえばバイナリファイルをformattedで開く場合ってケッコウ難儀なことになりそうな気がして来た。 catはその辺はクリアしてるけど(でないとバイナリファイルの結合なんて出来ないよね?)。 自分だったらfortranでやらずにシェルでも書いてそっちで済ます。WindowsならPerlか何かを使うかな? dosのコマンドで出来たっけ?やりたいことによって道具を使い分けるのが良いと思うけど。
770 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:05:00 ] >>766 catと等価な、つまりバイナリレベルでの結合は無理じゃない? fortranって、せいぜいレコードを扱うくらいで、バイトレベルでの操作は普通しないし、そもそもできないと思うけど
771 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 03:50:13 ] いちおうAppendで既存ファイルに追記することはできるけどバイナリだと 追記するデータを別なファイルから読み込む段階でコケる事多々アリで面倒だよね。 Bit 単位での操作って Fortranで出来ない&やりにくい典型例だ。
772 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 05:12:47 ] FORTRANやCOBOLのような古い言語は、 ファイルはレコードの集合という考え方をするから、 前提のないバイト列は扱いにくい。
773 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 05:57:03 ] NAG Fortran Builder 5.2 をインストールして使ってみたのですが, program main print *, 'Hello World !' stop end のクイック実行のコンパイル&リンクに12分50秒もかかります。 NAGのコンパイラはこういうものなんでしょうか? それとも,もっと早くコンパイル&リンクのできる設定が何かあるのでしょうか? 私の環境は,OSはWindows XP,RAMは512MB, HDDの空き領域は,Cドライブは706MB,Dドライブは1.92GB, Fortran Builder は Dドライブにインストールしています。 # NAGの統合開発環境は,Intelのと違って,キーワード入力補完機能がありました。
774 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 10:00:55 ] RAM 少なくね?
775 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 10:02:09 ] >>758 数字を規格化しようね
776 名前:773 mailto:sage [2009/12/05(土) 10:51:47 ] >>774 NAGのホームページには 「メモリ:256MB以上(推奨 512MB以上)」 と 書いてあったので,大丈夫かなと思ったんですが, やっぱり足りないですかね。 他に Fortran Builder 5.2 のユーザーさん,いませんか? RAMはどれくらい積んでますか?
777 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 12:17:51 ] >>773 キーワード補完だけじゃ、あってもなくてもほとんど変わらんよなぁ・・・ もっとリッチなFortranのIDEが早くでないものか
778 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 13:20:00 ] >>776 その前に今どき512MBというのがなあ。増設はできないの?
779 名前:773 mailto:sage [2009/12/05(土) 13:38:40 ] 別のパソコン (let's note) で試してみました。 CPU: Pentium M 1.20GHz RAM: 1GB OS: Windows XP Pro. Ver.2002 SP3 これで program hello print *, 'Hello World' stop end program hello をやってみたんですが,こちらのPCでもコンパイル&リンクに 12分25秒かかりました‥‥ orz >>778 う〜ん,6年前のVAIOノートなんで,買い替えしたほうが良いかもしれません。
780 名前:773 mailto:sage [2009/12/05(土) 13:52:17 ] Intel Visual Fortran 11.1 のほうの動作環境ページを見ると RAM 1GB (2GB 推奨) と書いてあるんですが, CPU: Pentium M 1.20GHz,RAM: 1GB のPCにインストールしても, Fortran Builder と同じくコンパイル&リンクに10分くらい 時間かかっちゃうでしょうか?
781 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:01:23 ] メモリが足りないせいで異常に遅いときは、 大量にスワップが発生しているせいなので、 一定量メモリを増やせば急に早くなるものだが、 512MBでもその有様とはすごいね。 fortran 77でよければ open watcom fortranとかいいんでない?
782 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:06:13 ] >>779 まさかとは思うが、メモリの空きは大丈夫なんだよね? 動画のエンコしながらコンパイルとかはさすがにないだろうけどw
783 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:15:19 ] コマンドラインからコンパイルとかできないの? IDEが重いのかもしれない。
784 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:20:09 ] あと仮想メモリを増やしてみる。無駄かな?
785 名前:773 mailto:sage [2009/12/05(土) 16:01:16 ] >>781-784 レスありがとうございます。>>783 さんのレスを見て調べたら, コマンドラインからコンパイルする方法が NAGのサイトの FAQページに載っていました。 今度は数秒でコンパイルできました! # しかも,できた実行ファイルのサイズが,IDEのときは 266KBだったのに対して, コマンドラインからのときはわずか 18KBとずいぶん小さくなりました ちなみに,g95でコンパイルしたときは 339KBでした。 本当にありがとうございました m(_ _)m
786 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 16:37:57 ] もしかしてNAGが駄目駄目ってオチなのかな? でもそんな悪い評判は聞いたことないが・・・
787 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:25:08 ] >>770 バイナリファイルも、F2003ならSTREAMファイルとしてあけることで扱える。 F2003以前でもベンダー拡張でSTREAMアクセスできることが多い。 また規格の範囲内でもDIRECTアクセス・ファイルの属性で代替できることがある。 (独自フォーマットのDirectFile形式のベンダーもあるが、垂れ流し的に書いているものも多いので、 実質ストリームとして使える) ただFortranの規格ではレコード長が処理系依存なので、バイトかワードかが確定できない。 でもコンパイラのオプションで単位をバイトに指定出来ることが多い。
788 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:24:30 ] >>785 それって単にランタイムDLLになっただけじゃ? IDEの時はスタティックリンクなんでしょ
789 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:53:35 ] IDE経由とコマンドラインの場合とで、デフォルトの動作が違うってこと? IDE使ったことないんで分からないけど、そういうもんなのかね でもスタティックリンクにしたら、サイズが増えるのはいいとして 10倍以上の時間がかかるなんて、あり得るの?
790 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 02:17:44 ] デバックシンボルでも埋め込んであるんだろ それに実行ファイル自体が最適化がかかってないかもしれない 環境を聞かないと何とも堪えようがない
791 名前:773 mailto:sage [2009/12/06(日) 08:35:45 ] >>788 > IDEの時はスタティックリンクなんでしょ IDEの設定を見たら,おっしゃるとおりで, 「nagforランタイムライブラリの非共有(静的)バージョンを結合」 となっていました。ひとつ勉強になりました(汗)。 >>790 > 環境を聞かないと何とも堪えようがない 環境は…… 【1つめのパソコン VAIOノート】 OS: Windows XP Home edition Ver.2002 SP3 RAM: 512MB HDDの空き領域:Cドライブは 706MB,Dドライブは 1.92GB Fortran Builder 5.2 は Dドライブにインストール。 【2つめのパソコン let's note ノート】 OS: Windows XP Professional edition Ver.2002 SP3 RAM: 1GB CPU: Pentium M 1.20GHz HDDの空き領域: Cドライブは数十GB Fortran Builder 5.2 は Cドライブにインストール。 ……です。
792 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:39:32 ] NAGのお値段を考えたら・・・おニュウPCを買うべきだとおもう
793 名前:773 mailto:sage [2009/12/06(日) 08:42:25 ] あ,【1つめのパソコン VAIOノート】の CPU は Pentium 4 の 2.40GHzです。
794 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 19:59:53 ] 次の行列の演算を2次元配列を用いて行うプログラムを作りたいのですが; どなたか教えください。 [123] [13] [ ]×[23] [045] [46] です。 わかりにくいのですが、2行3列と3行2列の乗算です。。
795 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 20:01:50 ] 見づらくてすみません。。 [123] [13] [ ]×[23] [045] [46]
796 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 04:24:21 ] 行列成分は実数にした。違いは無い real a(3,2), b(2,3), o(2,2) a(1,1) = 1.0 | a(3,2) = 5.0 b(1,1) = 1.0 | b(2,3) = 6.0 do j = 1, 2 do i = 1, 2 o(i,j) = 0.0 do m = 1, 3 o(i,j) = o(i,j) + a(m,j) * b(i,m) enddo enddo enddo で o が結果の2x2行列ね。習慣で(i,j)=(列、行)の番地にしてもうたけどいいやね。 そういや行列のサイズ数をいうときの行と列をよく間違えてしまうw
797 名前:デフォルトの名無しさん [2009/12/07(月) 23:28:25 ] >>758 x=x+vx*dt*i y=y+vy*dt*i R=sqrt(x**2+y**2) vx=vx-K*(x/R)*dt*i vy=vy-K*(y/R)*dt*i 上のiがすべていらない。
798 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:42:02 ] >>795 MATMUL 関数を使うんだw
799 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 08:40:35 ] >>798 同意w でも知らないうちにコードミスで転置行列にしてしまうことがあるw
800 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 08:58:02 ] do 800 i = 1, 800 write(*,*) '800 get' 800 continue