情報処理概論

今日の授業内容(第７回)
 ベクトル・行列の計算
 第一回レポートについて
 変数の型(実数型、文字型)

情報処理概論(第7回)

情報基盤センター 井上 仁

変数の型(実数型1)変数の型(実数型2)

 REAL, REAL(4) : (単精度)実数型

REAL(8) : 倍精度実数型

変数の宣言REAL :: radius, area
4バイトの記憶領域8バイトの記憶領域(倍精度)実数を近似的に表現
3.1415926535 0.2785D-2 → 0.2785×10^(-2)
有効桁数
10進で約14桁(2進で53桁)絶対値
約10^(-307) ～約10^308の値(2^(-1022) ～ 2^1023)

実数を近似的に表現
2.0 3.141592 0.2785E2 → 0.2785×10^2
2 と書くと整数になる(内部表現も異なる)
有効桁数
10進で約6桁(2進で24桁)絶対値
約10^(-37) ～約10^38の値(2^(-126) ～ 2^127)※REAL(16) 4倍精度実数型

例題(ベクトルの和)変数の宣言

 二つのｎ次元ベクトルa, bの和を求める
aa= (a1, a2, … , an)
1 2 3b= (b1, b2, … , bn)a(1) a(2)sum = (a1+b1, a2+b2, … , an+bn) a = ( a1, a2,⇒ 各i(i=1,…n)に対して、ai+bi を求める

n-1 na(n)…

an)

配列によるベクトルの表現

DO i = 1, nsum(i) = a(i) + b(i)END DOINTEGER :: v_max = 20
初期値
INTEGER, PARAMETER :: v_max = 20
名前付き定数REAL :: a(1:v_max), b(1:v_max)
またはREAL, DIMENSION(1:v_max) :: a, b

このプログラムで扱うことのできるベクトルの次元a1

第7回

2nv_max1

情報処理概論

入力値のチェック

プログラムの流れ ベクトルの次元の入力と入力値のチェック
プログラムではv_max(20)次元まで扱うことができる
実際に取り扱うベクトルの次元nを入力する

 二つのベクトルの各成分の入力
 二つのベクトルの和の計算
 結果(和)の出力

DO形並びによる入力
DO i=1,nREAD(*,*) a(i)END DO

123といった入力しかできないベクトルの次元は、1以上v_max以下DO
READ(*,*) nIF (1 <= n .AND. n <= v_max) EXIT
1≦n≦v_max
END DO

DO形並びによる出力
DO i=1,nWRITE(*,*) sum(i)END DO

123といった出力しかできない

READ(*,*) a(1), a(2), …, a(n)WRITE(*,*) sum(1), sum(2), …, sum(n)READ(*,*) (a(i), i=1, n)

WRITE(*,*) (sum(i), i=1, n)

1 2 3 という入力が可能

1 2 3 という出力が可能

プログラム例 (ベクトルの内積)
内積 s =

a1*b1 + a2*b2 + … + an*bn

例題(行列の和)m行n列の二つの行列の和を計算
A : m行n列の行列 a(1:m,1:n) ：2次元の配列

s = 0
DO i = 1, ns = s + a(i)*b(i)END DO1s = s + a(n)*b(n)a(1)*b(1)a(2)*b(2)3n-1 na(1,n)

12a(2,1)aija(i,j)a(m,1)

第7回

2a(1,1) a(1,2)

a(m,n)

m2

情報処理概論

解法の説明

プログラム例

A,Bを二つの行列、Cをその和とする。
C＝A+B
ｃij = aij + bij （i = 1,…,m ｊ = 1,…, n) i=1に対して

ｃij = aij + bij （j = 1,…,n) i=2に対して

ｃij = aij + bij （j = 1,…,n)DO i=1,m (row)
DO j=1,n (column)
ic(i,j) = a(i,j) + b(i,j)
END DOEND DOj .….
 i=mに対して

ｃij = aij + bij （j = 1,…, n)

実は…

DO形並び
DO i=1,m
READ(*,*) (a(i,j),j=1,n)
END DOa(i,1), a(i,2), …,a(i,n)

j配列 a, b に対して、a+b という計算ができる

iDO i=1,m
WRITE(*,*) (c(i,j),j=1,n)
END DOc(i,1), c(i,2), …,c(i,n)

配列の動的割り付け
使用

a123

プログラム例

未使用

nv_max動的割り付け型, ALLOCATABLE :: 配列変数名(:)……….
ALLOCATE (配列変数(寸法指定))

割り付け解除
DEALLOCATE (配列変数)

第7回

REAL, DIMENSION(:), ALLOCATABLE :: a,b……
READ(*,*) n
ALLOCATE(a(1:n))
ALLOCATE(b(1:n))……
DEALLOCATE(a)DEALLOCATE(b)3情報処理概論

Tips 画面の入出力のファイルへの保存script または script ファイル名% script
script コマンド開始。ファイルは typescript です。
% lsa.out*
do2.f90 ex1_1b.f90.............................................
% exitscript コマンド終了。ファイルは typescript です。
%

演習7-1
ベクトルの和を計算するプログラムを完成させなさいベクトルの内積を計算するプログラムを完成させなさいベクトルを入力して、それを正規化したベクトルを出力するプログラムを作成しなさい。

演習7-3

演習7-2
行列の和を計算するプログラムを完成させなさ演習7-1, 7-2のプログラムにおいて、配列を動的に割り付けるよう変更しなさい。

いm×n、n×lの行列を入力して、その積を計算するプログラムを作成しなさい。

レポート課題 課題
非負整数を入力し、それを16進数に変換したものを出力するプログラムを作成しなさい。

10進数から16進数への変換
60 (10進数) → 3C (16進数)
2002 (10進数) → 7D2 (16進数) 提出物

Fortran90のソースプログラム、プログラムの説明、実行結果、考察※これらのファイルは、別のファイルにしてもよいし、一つのファイルにしてもよい。

 提出方法WebCTのレポート機能を利用する

 提出期限1616603･･･ 120･･･ 316

2002

16125･･･ 27･･･ 130･･･ 716

6月24日(金)第7回

4情報処理概論

変数の型 文字型(1)CHARACTER0～32767個の文字の列
1バイトの記憶域に1文字
日本語文字の場合は、2バイトで1文字
文字コードによって、前後に制御シーケンス変数の型 文字型(2)CHARACTER(10) :: aa = ’Fortran’
WRITE(*,*) a,a

F o r t r a n

CHARACTER(n)nバイトの文字列
'Fortran' 'FORTRAN' 'Don''NT' "Don't"
'日本語'% ./a.out
FortranFortran漢字コード
 'Fortran'
46 6f 72 74 72 61 6e (ASCII)

 '日本語'46 7c 4b 5c 38 6c (JIS)符号化方式: JIS, Shift JIS, EUC
1b 24 42 46 7c 4b 5c 38 6c 1b 28 42 : JIS
93 fa 96 7b 8c ea: Shift JISc6 fc cb dc b8 ec : EUC

 EUC を使う

第7回

5