約 3,118,123 件
https://w.atwiki.jp/c-phys/pages/13.html
☆フリーのFortran環境をパソコンへ導入する方法(Windows XPの場合)☆ 1、まずコンパイラー(Silverfrost FTN77)をインストールする。 こちらからftn77pe.exeをダウンロードした後、ダブルクリックしてインストールして下さい。 2、CPad(エディタ)をインストールする。 こちらからfcpad231.lzhをダウンロードし、適当な場所に解凍しましょう。 fcpad.exeを起動して1でインストールしたftn77.exeの場所とプログラムファイルを保存する場所を指定して下さい。 後はCPadでプログラムファイルを開いて、青い三角ボタン(コンパイル&実行)を押せば、勝手にコマンドプロンプトを起動してプログラムが実行できます。非常に簡単です。この素晴らしいソフト(CPad)を作製された方のHPはこちらです。感謝。 なお、上記の方法だと、Fortran77の文法しか使えません。例えば、プログラムは6カラム空けてから書き始めなければなりません。 Fortran90以降の文法(配列など)を使いたい場合は、g95やgfortranをインストールしましょう。
https://w.atwiki.jp/c-phys/pages/12.html
☆フリーのFortran環境をパソコンへ導入する方法☆ Windows7にて、下記の方法でやってもうまく動作しないことを確認しています。(2013/09/23) 下記の記事を全面的に書き直しますので、現状の記事は参考程度に留めておいて下さい。 現在のところ、MinGWはインストールせず、g95のみインストールして使用する方法が最も簡単と思われます。 他にもフリーのFortranはいっぱい有りますので、自分に有ったコンパイラーを探してインストールいただければ幸いです。 1、「MinGW」をインストールする。 以下の説明ではインストール場所はCドライブ直下(C \MinGW)であるとします。 (それ以外の場所にインストールする場合は以下の文章でC \MinGWの部分をC \***\---\MinGWに読みかえて下さい。 C \***\---\とは、あなたがインストールした場所のことです。) 注意点:インストール先のパスに空白が含まれていると、後でトラブルの原因になるため、「Program Files」へのインストールは避けてください。 まずはこちらのリンクから下記の画面に飛んで、MinGWのインストーラをダウンロードして下さい。 (2011年2月1日の時点ではmingw-get-inst-20101030.exeが配布されています。) 保存した「mingw-get-inst-20101030.exe」をダブルクリックするとこちらのサイトのような画面が現れるので、指示に従い「Next 」を選択していきましょう。 途中、下記の画面のように「c++ compiler」、「fortran compiler」、「ObjC compiler」の3つのみ選択することをお勧めします。 MSYS関連、MinGW Developer Toolkitは必ずしも選択しなくてOKです。 (fortran compilerはfortranのコンパイラですので必ず選択して下さい。c++も選択しておけば、C++で書かれたソースファイルもコンパイル可能になります。) 2、MinGWにパスを通す。 まず、パスを通す「バッチファイル」を作ります。テキストエディタを開き次のように一行書きます。 PATH=C \MinGW\bin;%PATH% または、 PATH %PATH%;C \MinGW\bin 上の二つのどちらでも結構です。次にこのファイルを「mingw.bat」という名前で「C \MinGW」フォルダの中に保存します。 (つける名前は半角英数なら何でも良いですが、拡張子は.batにします。) これでパスが通ります。 3、コマンドプロンプトのショートカットを作ります。 「スタート」→「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」 のところを右クリックし(注 コマンドプロンプトは立ち上げません)、「コピー」で、デスクトップなど自分が良く使う場所に貼り付けます。 そして、以下のように設定します。 Windows 7/Vista/XP/2000の場合 コマンドプロンプトを右クリック→「プロパティ」→「ショートカット」と追い、 「リンク先」の所を %SystemRoot%\system32\cmd.exe /k "C \MinGW\mingw" と変更する。(上記1行をコピー ペーストしていただいて構いません。) Windows Me/9x系の場合 MS-DOSプロンプト上で「右クリック」→「プロパティ」→「プログラム」を追い 「バッチファイル」の所を C \MinGW\mingw.bat と変更する。 これは、ドライブCの下にMinGWがあり、その中にmingw.batがある場合ですが、 今までの手順通りに行なっていれば、このまま、気にせずコピー ペーストして下さい。 4、コマンドプロンプト上で「右クリック」→「プロパティ」→「ショートカット」と追い、「作業フォルダ」の所を.fファイルを保存するフォルダに設定する。 例えばデスクトップの「FORTRAN」という名前のフォルダで作業するなら、 "C \Documents and Settings\(USER_NAME)\デスクトップ\FORTRAN" と入力する。((USER_NAME)の部分は人によって変わります。) 5、g95(Fortran95)を追加インストール 手順1~4まで行えばFortran77の文法は使えますが、Fortran90の文法は使えません。 そこでFortran90の文法も使えるようにg95(Fortran95)を追加でインストールしましょう。 ただしコマンドプロンプト上でのコンパイルの呪文が、g77→g95と変更されますので注意が必要です。 なぜなら、Fortran90の文法で書かれたプログラムをg77の命令でコンパイルできないからです。 インストールは簡単で、The G95 ProjectからStable versionのSelf-extracting Windows x86(g95-MinGW.exe)をダウンロードして、 C \MinGW\ に上書きインストールするだけでOKです。(2011年2月1日の時点ではStable version 0.91, March 2008が最新版です。) 6、以上で完了です。 では作ったコマンドプロンプトのショートカットを開いてプログラムを実行できるか確認してみましょう。 コンパイルコマンドは、 g95 ファイル名.f90 ←g95とfilename.f90の間は半角一文字空けます。 で、コンパイルできたら、(作業フォルダにa.exeができるので) a (Enter key) ←a と入力して(Enter key)を押します。 という風にして、プログラムを実行します。 ☆FORTRANリンク集☆ Fortran ResQ - 初心者のためのFortran入門 やさしいフォートラン講座 FORTRANプログラミング初級編 FORTRAN入門(pdf) cpadでg77を使う裏技 フォートランリンク集 ☆練習問題☆ 1、4次のルンゲ-クッタ法を用いて適当な常微分方程式を解いてみよう。 2、ガウスの消去法を用いて連立一次方程式を解いてみよう。
https://w.atwiki.jp/ciez/pages/36.html
Using C/C++ and Fortran together Using C/C++ and Fortran together http //www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html http //arnholm.org/software/cppf77/cppf77.htm
https://w.atwiki.jp/kisohige/pages/31.html
Fortranに関するひげさんの備忘録的なもの。勉強したことをかくこともあるかもしれませんが大抵ぐぐればわかります。 一応公開しておきます。 注.基本Fortran90の話です。 Fortran77以前のことは触れてないですし、77以前の環境でここに書かれていることをするとはエラーが出るかもしれません。 まぁこんなページを参考にする人なんていないと思いますが、一応。 Fortranとは 環境 コンパイラ エディタ 使ってる本 Fortran使った関数、コマンドまとめ 変数型 なんかその他の便利な情報 数学系ライブラリ集 京都大学数理研究所 大浦拓也氏作。本人曰く実用に耐えるらしい。 Fortranとは ひげさんが現状勉強を進めている、プログラム高級言語のひとつ。高級言語としては世界最古らしいです。また蓮舫氏に2位でいいと言われたスパコンなんかはこの言語でプログラムをしているらしいです。 ▲ページ先頭へ 環境 参考になるかわかりませんが、自分の環境を晒しておきます。 メイン機(芙蓉) OS Ubuntu10.10/Windows XP Home Edition SP3 CPU Intel(R)Pentium(R) 1.73GHz RAM 1.49GB サブ機(陽炎) OS Ubuntu10.10 CPU Core 2 Duo RAM 2.0GB 最初はWindowsで運用していましたが、Linuxのほうが圧倒的に環境が整えやすいです。つかUnix環境ならいいのか? その辺はよくわかりませんが、2010年11月くらいから、開発環境のOSはUbuntu10.10を使用しています。 ▲ページ先頭へ コンパイラ ひげさんはgfortranというコンパイラを使用しています。コンパイラってなんぞ?という人はとりあえずググるなり、プログラムの入門書を買うなりしてください。親切に解説してくれているサイトはたくさんあります。 Windowsに導入 下のリンクはgfortranがおいてあるところです。英語なんで頑張って読んで自分の環境にあったものをインストールしてください。英語読むのダルいよ!って方はもっと親切に解説しているページがるので、gfortranでググってください。 ↓ gfortran 以下にひげさんがgfortranを使ってて起こったことをまとめてみます。 普通にwindows用のインストール用バイナリファイル(?)をダウンロード。起動してクリックしていけばOK。ただし途中でどのコンパイラをインストールするかきかれるので、ちゃんとFortranにチェックを入れてやりましょう。 XPでしか動かない模様。(2010年春時点)windows7ではどうもパスが通りませんでした。パスの設定の方法はちょっと難しかったので理解することを断念しました。 パスは自動でついかされません。(微妙に不親切。)手動で追加すれば大丈夫。gfortran.exeのあるディレクトリまで通してやりましょう。 Vistaで使おうとしたらNortonにトロイの木馬として退治されました。 とりあえず7以降は手軽にやるならXPモードを使いましょう。XPモードが使えるのは7Pro以上なので要注意。おそらく一般家庭で使っているであろうHomeEditionではXPモードは使えません。 ただし、XPモードはびっくりするほど重いので、正直おすすめしません。Linuxとデュアルブートが楽かも。 ちなみに上のwebサイトには、XP、Vista、7どれでも使える、と書いてあった気がします。 Ubuntuの場合Synapaticマネージャから一発でインストールできます。Windowsより手軽です。 ほかにもg95とかフリーのコンパイラはたくさん転がっています。詳細、使い方はググってくださいな。 正直なところ、g95の方が入門書で勧められてたりして、評判がよさそうです。 Ubuntuに導入 Synapaticマネージャで検索してボタン一発です。ラクチン。 ▲ページ先頭へ エディタ WindowsはSAKURA、Ubuntuはデフォルトのgeditを使用しています。強調設定をいじって見やすくしましょう。でもぶっちゃけた話、メモ帳でも編集はできます。 サクラエディタの強調設定について サクラエディタの強調用キーワードファイルにFortranはないので、適当にダウンロードしてきて設定してやりましょう。 ▲ページ先頭へ 使ってる本 この本使って勉強してます。 ザ・Fortran90/95 戸川隼人著 サイエンス社 入門FORTRAN90 ラリー・ニーホ+サンフォード・リストマー著 ピアソンエデュケーション ▲ページ先頭へ
https://w.atwiki.jp/maseken/pages/23.html
Fortranについて. 注意点,過去に困ったことやその解決法などをメモ せっかくためた経験値をムダにしないために. Fortran Fortranとは, 間瀬研では,「Developer Studio」というソフトを使う. 使い方に関しては,マニュアル参照 適宜マニュアルで関数の使い方を調べながら使うといいと思う 基本的な関数 fopen ファイルを開く fid = fopen(...) fscanf データを読む A = fscanf(fid,....) surf plot 詳しい使い方はマニュアル参照
https://w.atwiki.jp/fmemo/pages/16.html
ifortのコンパイルオプション g95のコンパイルオプション エンディアンを指定したいときifort g95 Fortranデバッグ用オプション 実行時に引き数を渡したいとき 整数のサイズ doループの仕様 内部入出力文 参考になるサイト ifortのコンパイルオプション 倍精度オプション $ ifort -r8 test.f90 デバッグオプション。これをつけないと配列の領域外参照をしていてもエラーにならないことがある。最適化オプションと併用するとエラーが起きるかもしれない? $ ifort -CB -traceback -g -check test.f90 書式無しファイル入出力でreclの単位を1byteにするとき。 $ ifort -assume byterecl test.f90 g95のコンパイルオプション デバッグしたいとき。 $ g95 -g -Wall -fbounds-check -ftrace=full test.f90 エンディアンを指定したいとき ifort 環境変数FORT_CONVERTn(nは数字)をBIG_ENDIANまたはLITTLE_ENDIANにすると、その装置番号で開いているファイルのエンディアンの扱いを変更できる。 $ FORT_CONVERT10=BIG_ENDIAN # 装置番号10番をBIG_ENDIANにしたいとき $ FORT_CONVERT15=LITTLE_ENDIAN # 装置番号15番をLITTLE_ENDAINにしたいとき すべてのエンディアンを一括して指定したいときは以下のオプションをつける -convert big_endian -convert little_endian g95 環境変数G95_ENDIAN=BIG, G95_ENDIAN=LITTLEを使う。 Fortranデバッグ用オプション 実行時に引き数を渡したいとき iargc, getargを使えばよい。これは非標準だが多くのコンパイラで使える。 program main implicit none integer i integer iargc, num character(128) var ! iargcは引数の数を返す関数 num = iargc() write(*,*) num ! getargは引数を返すサブルーチン do i=1,num call getarg(i,var) write(*,*) trim(var) enddo stop end program $ ./iargc_getarg.exe Anne Beth Chris 3 Anne Beth Chris ちなみに、0番目には"./iargc_getarg.exe"が入る。 参考サイトfortran備忘録 整数のサイズ integer(1)=1バイト整数 -128〜127 doループの仕様 do i=1,10 .... enddo のdoループが終わった直後のiの値は11 内部入出力文 character(64) char char= 100 200 read(char,*) num1, num2 write(*,*) "num1= ", num1 program main implicit none integer i,num character(100) fmt,cnum real(8) var i=4 num = 4 var = 1.23456 write(cnum, (i2) ) num write(*,*) trim(cnum) fmt = ( //trim(cnum)// f10.4) write(*,*) trim(fmt) write(*,fmt) var,var,var,var stop end program main 参考になるサイト Fortran縦々横々 Fortranの玉手箱
https://w.atwiki.jp/pspt/pages/237.html
FORTRAN 時代遅れ?いいえピチピチです。 FORTRAN FORTRANの魅力メリット デメリット リファレンス(入門)何も動作しないプログラム コメント文 変数に数字を代入する 文字を画面に出力する 簡単な計算をする 少し複雑な計算をする 変数の種類を変更する(型宣言) data文を利用して変数に値を代入する 端末から文字を入力する DO文 (繰り返し) IF文 (条件分岐)上のソースの簡易版 配列 FORTRANの魅力 メリット およそ50年前に開発された言語でありながら科学の分野では今なお現役である。 科学分野で扱われるだけあって計算が速い。 Cより習得がやや楽。 数式を書くのが楽。 変数をわざわざ宣言しなくてもよい。 美しい。 デメリット 無料の総合開発環境の質が悪い。 現在では一般にあまり使用されていない言語であるから習得しても見返りは少ない。 美しくない。 みんな大好きHello world program main print *,"Hello, World!" end program main stop end リファレンス(入門) 大学の講義「アルゴリズムとプログラミングⅠ」で配布された教科書を基に作成。特に断りがなければ1~8カラムは省略されているものとする。 何も動作しないプログラム プログラムの必要最低限の要素を確認しよう。 stop end コメント文 c 先頭がcで始まる一行はコメント文です。 stop end 変数に数字を代入する FORTRANではわざわざ変数を宣言する必要はありません。 a=1.0 b=1.1 stop end 文字を画面に出力する ここでは変数a,bそれぞれに代入した値を出力する。 文字列を出力する際は (クォーテーション)で囲む必要がある。 a=1.0 b=1.1 print *, a,b, test stop end 簡単な計算をする 足し算 + 引き算 - 掛け算 * 割り算 / 累乗 ** ここでは変数cにaとbを足し算した値を代入する。 a=1.0 b=1.1 solution=a+b print *, solution 少し複雑な計算をする ここでは解の公式を例とする。ただし±のうち+の方のみを再現する。 括弧は()のみ扱える。 平方根を返す関数はsqrt(x)。 a=1.0 b=-1.0 c=-1.0 x=(-b+sqrt(b**2-4*a*c))/(2*a) print *, x stop end 変数の種類を変更する(型宣言) 型 宣言 備考 整数型 integer I~N及びi~nで始まる変数はデフォルトでこれ 実数型 real I~N及びi~nで始まらない変数はデフォルトでこれ 文字型 character*n nに数字を入れて最大の文字数を指定できる 複素数型 complex 論理変数 logical 有効数字の桁数を増やしたければ型宣言のすぐ後ろに「*n」を添えればよい。(桁数がn倍になる) real number1 real*2 number2 number1=3.14 number2=3.14159265 print *, number1,number2 stop end data文を利用して変数に値を代入する data文を利用すれば一行で多くの変数に値を代入できる。 //内に代入したい数値を対応する通り並べる。 data a,b /1.0,1.1/ print *, a,b stop end 端末から文字を入力する read(*,*) a print *,a stop end DO文 (繰り返し) 下のソースは1から10までの連続した自然数の総和を出力するもの。 sum=0 do i=1,10 sum=sum+i end do print *,sum stop end IF文 (条件分岐) .EQ. = .NE. ≠ .LT. < .GT. > .LE. ≦ .GE. ≧ 条件式(等式や不等式)を用意しそれが満たされるか満たされないかで分岐する。 条件式を記述する際は上の表を参考にせよ。 以下のソースは端末からの入力が5.0以上かどうかを示す。 read(*,*) a if(a.GE.5.0) then print *, OK! end if else print *, NO end if stop end 上のソースの簡易版 read(*,*) a if(a.GE.5.0) print *, OK! else print *, NO stop end 配列 配列とは添え字付き変数に対応するものである。 ここでは配列の値の代入にdata文を、出力にDO文を用いた。 dimension abc(3) data abc/1.0,1.1,1.2/ do i=1,3 print *, i= ,i, abc= ,abc(i) end do stop end
https://w.atwiki.jp/usapfrog/pages/37.html
Matlabが遅いよってことで一から勉強するよ Hello Worldまで コンパイラだけなら、linuxは常備(なかったらyumなどで)。 [Windows] OctaveかMingGW環境で手に入る。 Windowsならインストール後"C \Octave\Octave3.6.4_gcc4.6.2\mingw\bin"と"C \Octave\Octave3.6.4_gcc4.6.2\mingw\msys\1.0\bin" または、"C \MinGW\bin"と"C \MinGW\msys\1.0\bin"にパスを通しとくのを忘れないこと。 (LAPACKを使う予定があるならOctaveをいれておくこと) [Mac] macportsやhomebrewなどで、gfortranをインストールする。 $ vi test.f90 program main write(*,*) Hello World end $ gfortran test.f90 $ a.exe 開発環境/IDE まあでも、やっぱIDE欲しいよ。 (WindowsならMinGW導入後) EclipseのPhotranを導入する。 導入法に従って、インストール。 (今までのeclipseに後付しないんなら Eclipse for Parallel Application Developersを落としてきて解凍すればよし) ついでに日本語化をしておく。 http //mergedoc.sourceforge.jp/の真ん中下くらいのPleiades プラグインをダウンロード・解凍 中身をeclipseのフォルダにコピペ・統合する。 eclipse.iniの最終行に以下を追加 -javaagent plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar 初回のみ同梱のeclipse.exe -clean.cmdから起動する 64bit windowsで起動時にJavaがエラーがないとエラーが出るときは、64bit javaを手動でインストールして、http //www.java.com/ja/download/manual.jsp、C \Program Files\Java\jre7\binにパスを通すこと 新規→プロジェクトでFortranぽいのを選ぶ 新規→ソースでFortranソースを選ぶ 上のプログラム書く ビルド・実行 (合間にでるオプションは Local Fortran Application, MinGW gdb) 参考 (pdf)eclipseでFortranプログラムの作り方 コード規約 流儀が本やらサイトによってそれぞれみたいだけど大体以下をベースに。 気象研究所 北海道大学 Fortran90 Tips NAG Fortran入門 FortranTips 変数宣言 変数同士の計算式は大体C同様で計算できる。 複素数標準実装、倍精度のdの使い方が特徴的。 というよか、Fortranでは少し神経質に倍精度指定しなきゃならないらしい。 うっかり1.0とか使うと、単精度になり桁に余計なゴミが入る。 program sampleinteger alogical preal(8) yreal(8), parameter pi = 3.14159 !定数など。(=Cのconst)complex(8) scharacter(len=4) w a = 3p = .true.y = 42.0d0 !dは 3e-3のeみたいに使うs = (6.0d0, 3.0d0) !これで s = 6 + 3iw = "abcd" print *, a, z, u, wend program sample 追記 characterはcharcter w*4でなく上記フォーマットのほうが了解性の点で良いらしい。 掛け算と混同してもいかんしね。 配列 足し算・内積。行数がずいぶん削れるのがありがたい。 printの書式はCとちょっと違う感じ。 program sample implicit none integer, parameter D = 3 real(8) x(D) = (/1d0, 2d0, 3d0/) real(8) y(D) = (/2d0, 1d0, -1d0/) real(8) z(D), v(D) real(8) w real(8) A(D,D) A(1,1 3) = (/ 8.0d0, 1.0d0, 6.0d0 /) A(2,1 3) = (/ 3.0d0, 5.0d0, 7.0d0 /) A(3,1 3) = (/ 4.0d0, 9.0d0, 2.0d0 /) z( ) = x( ) + y( ) v = matmul(A, x) w = dot_product(x, y) print "(a, f8.3, f8.3, f8.3)", "z=", z print "(a, f8.3, f8.3, f8.3)", "v=", v print "(a, f8.3)", "w=", wend program sample 結果 z= 3.000 3.000 2.000 v= 28.000 34.000 28.000 w= 1.000 ループ・分岐 do i=初期,限界,増分 else if (condition) then program sampleinteger i, j, kj=0; k=0do i=1,20 print *, "loop i=", i k= k + 3 if ( k 15) then print *, "exiting loop..." exit ! = break in C end if if ( k 6) cycle ! = continue in C j= j + 2enddoprint *, j, kend program sample 結果 loop i= 1 loop i= 2 loop i= 3 loop i= 4 loop i= 5 loop i= 6 exiting loop... 4 18 関数・モジュール 追記 引数には入出力指定を示すintent(in/out/inout)を付記すること。 sampmodule.f90 module sampmodule implicit none real(8),parameter c = 340d0 real(8),parameter rho = 1.3d0containsinteger function smd_test(a, b, x) integer, intent(in) a, b, x smd_test = a + b * xend function smd_testreal(8) function smd_pres(u) real(8), intent(in) u smd_pres = rho * c * uend function smd_presend module sampmodule sample.f90 program sample use sampmodule implicit none integer d real(8) p print *,c d = smd_test(1, 3, 5) print *,d p = smd_pres(2.0d0) print *,pend program sample ベクトルを返すとき 戻り値がベクトルの時は、resultを指定する。例は外積関数。 function cross(a,b) result(axb) implicit none real(8),dimension(3) axb real(8),dimension(3),intent(in) a real(8),dimension(3),intent(in) b axb(1) = a(2)*b(3) - a(3)*b(2) axb(2) = a(3)*b(1) - a(1)*b(3) axb(3) = a(1)*b(2) - a(2)*b(1)end function cross テキストIO statusのオプションが "r/w"に対応して、"old / (new, replace)" 追記をしたいときはopen文にposition= append オプションを付ける。 エラー処理をしたければiostat=status(整数変数)をつければ、 open時読み込みエラーをstatusに格納してくれて、open時のエラーをスルーできる。 program sample implicit none integer i, j, status integer,parameter fout = 11 integer,parameter fin = 12 real(8) x(20,20) do i=1,20 do j=1,20 x(i, j) = i * 100d0 + j; enddo enddo open(fout, file= mydata.dat , status= replace ) write(fout, *) x close(fout) open(fin, file= mydata.dat , status= old , iostat=status) if ( status .ne. 0 ) stop read(fin, *) x close(fin)end program sample バイナリIO サイズを指定して、オプションが長くなるだけ。 access, form, recl, rec program sample integer siz = 20*20*8 open(fin, file= mydata.bin , access= direct , form= unformatted , status= old , recl=siz) read(fin, rec=1) x close(fin) open(fout, file= mydata.bin , access= direct , form= unformatted , status= replace , recl=siz) write(fout,rec=1) x close(fout)end program sample 共有メモリメモリ並列(SMP) gfortranの共有メモリ並列(-fopenmp)はコンパイラオプションの最適化(-O3)とどこか相性悪いらしく、 扱う配列サイズがやや大きい場合、segmentaion faultを吐くことがあるらしい。 この場合、最適化は(-O1)を指定するとうまくいくことがある。 program sample implicit none integer, parameter n=36 integer i, ene(n), res ene( ) = 0 res = 3 !$omp parallel do private(i) do i=1,n ene(i) = 2*i + res end do !$omp end parallel do print *, ene( )end program sample バグった時はprivate指定をもう一度見なおしておくと良い。 3次逆行列/3次方程式 N 4のときは、素直にLapackとか然るべき数値計算ルーチンを使うべきだけど、 多用する3x3くらいは、(必要なライブラリかき集めるのめんどいし、四角い車輪の再生産にあるけど) 自分で書いていい気がする。 function inv3(A) result(Y) implicit none real(8), intent(in) A(3,3) real(8) Y(3,3) real(8) det integer i,j det = 0 do i=1,3 det = det + A(i,1)*cofact3(A,i,1) end do do i=1,3 do j=1,3 Y(i,j) = cofact3(A,j,i) / det end do end doend function inv3real(8) function cofact3(A,i,j) implicit none real(8), intent(in) A(3,3) integer, intent(in) i, j integer i2, i3, j2, j3 i2 = mod(i, 3)+1; i3 = mod(i+1, 3)+1; j2 = mod(j, 3)+1; j3 = mod(j+1, 3)+1; cofact3 = A(i2,j2)*A(i3,j3)-A(i2,j3)*A(i3,j2)end function cofact3 !wikipediaの三次方程式の解の公式・実部しか取ってこないので注意subroutine solve3(x, a) implicit none real(8), intent(out) x(NDIM) real(8), intent(in) a(NDIM) integer k complex(8) j, w, y(NDIM), p, q, R, S j = (0, 1) w = 0.5d0*(-1d0+j*sqrt(3d0)) p = a(2)-a(1)**2/3d0 q = a(3)-a(2)*a(1)/3d0+2d0/27d0*a(1)**3 R=(-q/2d0 + sqrt((q/2d0)**2 + (p/3d0)**3))**(1d0/3d0) S=(-q/2d0 - sqrt((q/2d0)**2 + (p/3d0)**3))**(1d0/3d0) do k=1,3 y(k) = w**(k-1) * R + w**(4-k) * S x(k) = real(y(k),8) - a(3)/3d0 end doend subroutine solve3
https://w.atwiki.jp/nino-add-up/pages/22.html
インストール CD-ROMを入れて指示に従うだけ Compaq Visual Fortran 使い方 Develper Studioを起動 [file]- [New]- FilesタブのFortran Free Format Source Fileを選択 同時にFilenameを入力してLocationの設定をちゃんとしておく Programを書いてCompile- Build- Execute Programで計算開始 結果はwrite文を用いて表示またはファイルに出力させる VineLinuxの場合 f77 filename でコンパイル a.out が作成される ./a.out で実行 ./a.out result.txt でファイルに書き出しができる f77 filename -o name で name という実行ファイルが作られる ./name で実行 Programのきまり 最初にプログラムの開始を宣言 ex. Program programname 最後にプログラムの終わりを宣言 ex. end program programname(開始を宣言したときのprogramnameと一致していないとエラー) 「!」以降はコメント文 整数、単精度、倍精度の区別を意識する必要あり(参考:型宣言文,誤差) 型宣言文 if文 データの入力(read文+format)? データの出力(write文+format)? その他 Fortranの組み込み関数 エラー番号は参考になる(ソフト内は英語表記だがXLsoftのHPでは日本語のオンラインドキュメントがある.) Fortran90の小技 参考 Compaq Visual Fortran Fortran ResQ Wikipedia(Fortran90) [PR] メールフォーム
https://w.atwiki.jp/slab/pages/20.html
参考サイト Fortran入門