1/21の講義資料

情報基礎演習Ⅱ
第14回 演習
担当 光武 雄一
授業のWebsite: http://web.me.saga-u.ac.jp/~mitutake/info2/info2.html
メールアドレス: [email protected]
第14回 演習内容


REPORT0114_1 解答
サブルーチン,関数副プログラムの総合演習
REPORT0114_1の解答例
PROGRAM REPORT0114_1
IMPLICIT NONE
REAL:: X0, XN, XI, H, S
INTEGER :: I, N
READ(*,*) X0, XN
READ(*,*) N
CONTAINS
! 内部関数
FUNCTION F(X)
! 被積分関数f(x)の定義
IMPLICIT NONE
REAL :: F
REAL, INTENT(IN) :: X
! 積分区間の下限X0と上限XNの入力
! 積分区間の分割数Nの入力
F = 4.0/(1.0+X*X)
RETURN
H = (XN-X0)/REAL(N)
! 積分区間のの分割幅H
END FUNCTION F
S = 0.0
! 合計値変数Sの初期化
DO I = 1, N-1
! xi = x1~xn-1までの関数値の合計
END PROGRAM REPORT0114_2
XI = X0+H*REAL(I) ! i番目の分割点のx座標xi
S = S + F(XI)
! xi = x1~xn-1までの関数値の合計
END DO
S = (F(X0) + 2.0*S + F(XN))*H/2.0 ! 台形則による面積計算
WRITE(*,*) ‘S = ‘, S
WRITE(*,*) ‘Error = ‘, S – 4.0*(ATAN(XN) – ATAN(X0)) ! 厳密解との差
STOP
課題1 教科書 演習問題6.2
摂氏と華氏温度の単位換算


教科書p.142 演習問題6.2の関数CTOFとFTOCをそれぞ
れ外部関数で作成せよ.
また,キーボードから摂氏温度TCと華氏温度TFを読み込
み,TCを華氏温度,TFを摂氏温度にそれぞれ単位換算を
行った結果を出力するメインプログラムを作成せよ.
プログラム名は,kadai0121_1としなさい.
解説 Newton法による方程式の解法
f(x) = x - cos(x)
1.適当な初期値x1を選ぶ
2.与えられた収束条件を満足するまで,
以下の計算を繰り返す.
f(x1)
x = xiにおける接線の式
y = f '(xi)(x - xi) + f(xi)
xi 1  xi 
3.収束解が得られた結果を表示
厳密解 f(x2)
0
x3
x2
f ( xi )
f ( xi )
x1
x = xiでの接線がy=0と交わる座標xi+1
0 = f '(xi)(xi+1 - xi) + f(xi)
つまり,xi+1 = xi - f(xi) / f '(xi)
f(x)=0近傍の微分係数の変化が激しいときに
は,収束性が悪くなるので緩和係数(<1)を
f(xi)/f’(xi)に掛ける場合がある.
なお,収束条件としては,
|f(xi+1)|<ε
|xi+1 - xi|<ε
などを設定し,εの値は実数演算の精度
(有効桁)を考慮して,10-5などの数値を
設定する.
また,| f’(xi)| が非常に小さくなると解
の収束が劣化すると同時にゼロ割を避
けるため計算を止める.解以外の極値
に近似解が落ち込んでいる場合,他の
初期値を試す.
演習2 例題6.7
Newton法のアルゴリズムに従って,f(x) = x – cos(x) = 0の解を繰り返
し処理で求め,1)近似解,2)繰り返し計算の回数,3)方程式f(X)の誤
差を表示するプログラムを作成せよ.
ただし,
1) 収束の許容精度EPSは,10-5とする.
2) f’(x)の大きさがEPS以下となったときには,メッセージを出力して,計算を
止める
3) 繰り返し計算の最大回数を50回とし,収束しなかった場合には,その旨の
メッセージを表示する.
4) f(x)およびf‘(x)は内部関数で定義すること
5) 繰り返し計算途中の解も表示をさせて,解の収束の様子が分かるようにす
6) 初期値は,x1 = 1としなさい
なお,収束計算の繰り返し処理は,収束条件|f(xi+1)|<ε または|xi+1 - xi|<ε
と繰り返し回数の上限を記述したDO WHILE文に用いて記述すること(必須).
課題3 正方行列の積




N次(≦10)の正方行列AとBの積C=ABを計算する外部サブルーチン
MATMULT(A,B,C,N)を作成せよ。さらに、次数Nおよび行列Aの行列要素
aijを入力し、A2=AAおよびA3=A2Aの計算結果を出力するメインプログラ
ムを作成せよ。
行列の積の計算方法については、情報基礎演習Ⅰのサイト
http://web.me.saga-u.ac.jp/~mitutake/info1/info1-11.pdf
の演習2の解説を参照せよ。
実行結果の確認は、p.80 例題4.9と同じ入力データを用いること。なお
Fortranの組み込み関数MATMULの使用不可。配列要素同士の積の和
で求めること.
プログラム名REPORT0121_2, ソースファイル名report0121_2.f95, 実
行結果ファイル名result0121_2.txt
行列の積 (教科書p.78)
例) 3行5列の行列Aと 5行4列の行列Bとの積C
A(3行5列)
 a11
a
 21
 a31
B(5行4列)
a12
a13
a14
a22
a23
a24
a32
a33
a34
b11 b12
a15  b21 b 22
a25  b31 b32

a35  b41 b42
b51 b52
b13
b23
b33
b43
b53
C(3行4列)
b14 
b24   c11
b34   c21

b 44  c31
b54 
c12
c13
c22
c23
c32
c 33
c14 
c24 
c34 
行列Cの2行3列の要素の計算
行列CのI行J列の要素の計算
(行ベクトルと列ベクトルの内積の計算と同じ手順)
C(I,J) = 0 (変数の初期化)
c23 = a21*b13+a22*b23+a23*b33+a24*b43+a25*b53
DO K = 1, 5
5
=
a
k 1
b
2k k 3
結局,C23の計算は,行列Aの2行目の行ベクトル
と行列Bの3列目の列ベクトルとの内積に
他ならない
C(I,J) = C(I,J) + A(I, K)*B(K,J)
END DO
行番号Iと列番号Jは,それぞれDO文で動かす
課題4 ファイルからのデータの読み込み
・ファイルへのデータの出力



データファイルよりデータ個数n,n個の実数データをそれぞ
れ整数型変数N,実数型配列変数Xに読み込み,n個のデ
ータの平均値AVEと標準偏差SIGMAを計算せよ.さらに,実
数データと平均値との差をファイルへ出力させよ.
ただし,入力データファイルは,授業のWebサイトより
sorting_data.txtをソースファイルと同じディレクトリにダウン
ロードして用いること.出力データファイル名は,output4.txt
としなさい.プログラム名は,kadai0121_4としなさい.
ファイルの入出力については,12/9の第9回講義資料を参
照しなさい.
データ入出力プログラムの記述例
1.OPEN文でユニット番号をファイルに割り当てて開く.
★ STATUSを省略した場合(通常はこれでよい)
OPEN(6, FILE =‘input.dat’)
OPEN(9, FILE = ‘output.dat’)
2.入力或いは出力ファイルに対する入出力
(これまでのキーボードからの入力とスクリーンへの出力と使い方は同じ,ただし,ユニット番号を指定)
READ(6,*) X, Y, Z
WRITE(9,*) I, J
3.開かれたファイルを閉じる.
CLOSE(6)
CLOSE(9)
注意)



ファイルへのアクセスは,OPEN文で開いたのち,データ入力或いは出力が可能となる.
入力用と出力用のファイルは別々に分けてOPEN文で開いて使うこと.入力中のファイ
ルにデータを書き込むことやその逆のことをしてはいけない.
OPEN文で開いたファイルは必ずCLOSE文で閉じること.開いたままでプログラムを終
了させないこと.
今週の課題 〆切1月27日 20時
メール送付先:[email protected]
レポート課題1(Subject:report0121_1) 3点
課題2で作成したニュートン法の計算プログラムを用いて, x  a の開平計算を
行え.定数aは,キーボードから入力する,xは,f (x)=x2-aの根となることに注意
すること.また,二分探索法を用いたreport0107とニュートン法での繰り返し回数
と比較し,どちらのアルゴリズムが少ない回数で解が得られたか述べよ.
ソースファイル:report0121_1.f95 、実行結果:result0121_1.txt
レポート課題 2(Subject:report0619_2) 3点
課題3のソースプログラムを作成し、 実行結果とともに送付せよ。ただし,実行結果
は,課題の指示通りのデータを用い,正しい結果が得られていることを確認の上送
付すること,
ソースファイル名:report0121_2.f95、実行結果:result0121_2.txt
注意


プログラム名、ソースファイル名、実行結果ファイル名は,各課題での指示通りとすること。
字下げ、コメントがないプログラムは減点する.0