Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
2014/04/07 地球惑星環境学基礎演習 II (田近・茂木, TA:橋岡・森里)
FORTRANプログラミング入門 (1)
宣言文,入出力文,フォーマット文,組み込み関数� �例題 1: 2つの正の整数MとNの値を読み込んで,和 (WA),差 (SA),積 (SEKI)
および商 (SHO)と余り (AMARI)を計算し,それらの結果を出力せよ.また,ちょうど割り切れない場合に対応するため,小数第 7位までの割り算の結果も表せ.� �■ 問題の考え方
1. 2つの整数を読み込む
2. 計算を実行する
3. 結果を表示させる
これを流れ図 (フローチャート)として表すと図のようになる.
1
これを FORTRANでプログラムとして記述すると以下のようになる.
四則演算プログラム (sisoku.f)————————————————————————————————————–
c␣␣␣␣␣四則演算プログラムc␣␣␣␣␣by␣Taro␣Chikyu,␣␣2014/4/7
c␣␣␣␣␣ ␣␣␣␣␣␣INTEGER␣M,N,WA,SA,SEKI,SHO,AMARI
␣␣␣␣␣␣REAL*8␣SHO2
c␣␣␣␣␣ c␣␣␣␣␣データの読み込みc␣␣␣␣␣ ␣␣␣␣␣␣WRITE(6,*)’INPUT␣M,␣N’
␣␣␣␣␣␣READ(5,*)␣M,N
c␣␣␣␣␣ c␣␣␣␣␣計算c␣␣␣␣␣ ␣␣␣␣␣␣WA=M+N
␣␣␣␣␣␣SA=M-N
␣␣␣␣␣␣SEKI=M*N
␣␣␣␣␣␣SHO=M/N
␣␣␣␣␣␣AMARI=M-N*SHO
␣␣␣␣␣␣SHO2=DBLE(M)/DBLE(N)
c␣␣␣␣␣ c␣␣␣␣␣結果の出力c␣␣␣␣␣ ␣␣␣␣␣␣WRITE(6,*)’M+N=’,WA
␣␣␣␣␣␣WRITE(6,*)’M-N=’,SA
␣␣␣␣␣␣WRITE(6,*)’M*N=’,SEKI
␣␣␣␣␣␣WRITE(6,*)’M/N␣no␣SHO=’,SHO
␣␣␣␣␣␣WRITE(6,*)’M/N␣no␣AMARI=’,AMARI
␣␣␣␣␣␣WRITE(6,1000)’M/N=’,SHO2
c
␣1000␣FORMAT(A5,F12.7)
␣␣␣␣␣␣STOP
␣␣␣␣␣␣END
————————————————————————————————————
2
FORTRANプログラムの作成・コンパイル・実行
• プログラム (Program): コンピューターに情報処理を実行させる一連の命令を記述したもの.ソフトウェアと同意語だが,ソフトウェアがハードウェアを駆動するものを強く意識しているのに対して,プログラムは,具体的にコンピューター言語で記述された内容をいうことが多い.
• プログラミング言語 (Programming Language):コンピューターで処理したり,実行する命令を定義する人工の言語.プログラミング言語で書かれたテキスト (=ソースプログラム,ソースコード)はコンパイラによって,コンピューターが解釈できる 2進数の機械語に翻訳される.機械語は数字の羅列でしかなく,人間が機械語でプログラムをつくることは非常に困難である.そこで,簡単な記述で複雑な処理のできるプログラミング言語として,高級言語が開発された.高級言語では数字と記号以外に英語などの自然言語 (人間が使う言葉)が使用される.
例) FORTRAN,BASIC,COBOL,PASCAL,C,C++,Java,...
• FORTRAN (フォートラン): FORmula TRANslationからつくられた造語.J.バッカスによって,1954~58年に開発された,世界で最初のコンピューター用高級言語.名前からわかるように,科学や技術の分野の必要性に対応したものである.FORTRANは,現在も科学や技術の分野で盛んに使用されているほか,多方面で有用な言語としての地位を獲得している.
• プログラム開発作業の概念
3
演習:FORTRANプログラミング (1a)
� �課題1: 例題1のプログラムを作成し,コンパイルして実行してみよ.� �■プログラムの作成エディタソフト「秀丸」を用いてプログラム (ソースプログラム)を作成する.
・ファイル形式: 普通のテキスト形式 (ASCII形式)であることが必要.(ファイルの作成には,ワープロよりもエディタを使った方が便利)
・ファイル名:拡張子として’f’を付ける.例) sample.f
・各自のファイルの保存先は,X: YMyDocuyment
(より正確には,YY terra Y home Y[username] YMyDocument)
また,userとして各端末にログインした場合の保存先は,Y: Y[username] YMyDocument
(より正確には,YY terra Y home Y[username] YMydocument)
ちなみに,他のユーザとファイルを共有したい場合の保存先は,Z: Y
(より正確には,YY terra Y 共有)
■コンパイルと実行UNIXエミュレーションソフト「Cygwin」を用いてプログラム (ソースプログラム)をコンパイルし,実行する.
・コンパイル:プログラムのソースプログラムを機械語へ翻訳する作業.
例)% f77 sample.f
∗ コンパイルに成功すると,a.exe (UNIXでは a.out)という名前の実行ファイルが生成される (lsコマンドを用いて確認してみよ).
・デバッグ:通常,作成したプログラムには,文法ミスや入力ミスなど何らかの誤りがある.その場合,コンパイルはうまくいかず,エラーメッセージが出力される.エラーメッセージの内容から誤りと誤りのある行を特定し,修正を行う.修正したら,ファイルを保存し,再度コンパイルを試みる.エラーメッセージが出なくなるまで,この作業を繰り返す.
・実行:コンパイルをして生成された実行ファイルを実行する.
例)% a (% ./a.exe または % a.exe)
∗ 正常にコンパイルが成功しても,実行時に正常に動作しない場合もある.これは文法的には正しくても,プログラムとしては完全ではない (つまり,出来が悪い)場合に生じる.この場合には,正常に動作するよう,もう少しよく考えてプログラムを書き直す必要がある.
4
パラメータ文,論理 IF文,GOTO文� �例題 2: 方程式 x = cosxの解を求めよ.� �■ 数値解を求める
計算機を用いて方程式の数値解を求める方法として逐次近似法がある.逐次近似法とは,適当な出発値を与えて,それに精度をもっとよくする公式を繰り返し適用して,必要な精度の近似解を得る方法のことである.逐次近似法を用いて方程式 f(x) = 0
を解く方法にはいろいろある (たとえば,Newton-Raphson法, Regula-falsi法, セカント法, 二分法など).
ニュートン法 (Newton-Raphson法)
逐次近似法によって方程式 f(x) = 0を解く (近似解を求める) 方法のひとつ.具体的には,出発値 x0を適当に選び,k = 0, 1, 2, · · · の順に,
xk+1 = xk −f(xk)
f ′(xk)(1)
を計算し,収束判定をすることによって,近似解を求める.
(注) 点 (xk,f(xk))で接線を引き,接線が x軸と交わる点を xk+1とすると,この点における接線の傾きは
f ′(xk) =f(xk)
xk − xk+1
(2)
となるので,移項すれば (1)式が得られる.
5
* 収束判定
逐次近似法を用いる場合,繰り返しをいつ止めるかのタイミングをうまく判定することが重要となる.止めるのが早過ぎると十分な精度が得られないし,止めるのが遅すぎると計算時間が余分にかかり無駄な計算をすることになる.
• δ法: 収束判定用の定数 δを決めておいて,近似解 xkが
|xk+1 − xk| < δ
になったら反復を止める.
• ϵ法: 方程式 f(x) = 0の解を計算する場合,得られた最新の近似解 xk がどの程度方程式を満たしているかを調べる方法.収束判定用の定数 ϵを決めておいて,
|f(xk)| < ϵ
になったら反復を止める.
■ 例題の考え方
この式を変形して,
f(x) = x− cos x = 0
微分すると,
f ′(x) = 1 + sin x
したがって,反復式は,
xk+1 = xk −x− cos x
1 + sin x
となる.
6
ニュートン法プログラム (newton.f)
————————————————————————————————————
c␣␣␣␣␣ニュートン法プログラム␣for␣X-COSX=0
c␣␣␣␣␣by␣Taro␣Chikyu,␣␣2014/4/7
c
␣␣␣␣␣␣REAL*8␣S,T,X1,X2,DELTA
␣␣␣␣␣␣PARAMETER(DELTA=1.0D-6)
c
c␣␣␣␣␣初期値c
␣␣␣␣␣␣X1=1.0
c
c␣␣␣␣␣計算c
␣␣100␣CONTINUE
␣␣␣␣␣␣␣␣S␣=X1-DCOS(X1)
␣␣␣␣␣␣␣␣T␣=1.0+DSIN(X1)
␣␣␣␣␣␣␣␣X2=X1-S/T
␣␣␣␣␣␣␣␣IF(DABS(X2-X1).LT.DELTA)␣GO␣TO␣200
␣␣␣␣␣␣␣␣X1=X2
␣␣␣␣␣␣␣␣GO␣TO␣100
c
c␣␣␣␣␣結果表示c
␣␣200␣CONTINUE
␣␣␣␣␣␣WRITE(6,1000)’X=’,X2
␣1000␣FORMAT(A2,F15.8)
c
␣␣␣␣␣␣STOP
␣␣␣␣␣␣END
————————————————————————————————————
*DCOS, DSIN, DABS などは,FORTRANの組み込み関数.
7
演習:FORTRANプログラミング (1b)
� �課題 2: 次の方程式の解を求めよ.
f(x) = e−x − x = 0
� �注意事項
• 例題 2の考え方 (ニュートン法)をそのまま適用すればよい
8