\documentclass[12pt]{jarticle}
\usepackage[dvips]{graphics}

\author{}
\title{物理学特別講義V（物理情報処理論）No.9}
\date{平成11年6月16日}

\begin{document}

\maketitle

\section{行列の計算（積）}
$l$ 行 $m$ 列の行列 $A$ と $m$ 行 $n$ 列の行列の積を考える。
\begin{equation}
 C_{i,j}=\sum_{k=1}^m A_{i,k} B_{k,j}
\end{equation}
を計算すれば良い。

これをプログラムの形で書くと、

\begin{verbatim}
	parameter (NSIZE=10)
	dimension A(NSIZE,NSIZE), B(NSIZE,NSIZE), C(NSIZE,NSIZE)
C
	read(*,*) L,M,N
	do i=1,L
	  do j=1,N
	    C(i,j)=0.0
	    do k=1,M
	      C(i,j)= C(i,j) + A(i,k)* B(k,j)
	    end do
	  end do
	end do
C
	end	
\end{verbatim}
と言ったものになる。各自このプログラムを作り、入出力の機能をつけて、テス
トしてみよ。

\section{Fortran 文法}

\subsection{parameter 文、名前つき定数}

配列の大きさを後で変更する時に、宣言文は必ず実行文の前にならなくてはなら
ないので、実行文での変更はできない。しかし parameter 文（宣言文の前でも
後でも良い）で名前つき定数を与えることでその機能の1部を果たせる。上の例
では配列の大きさを parameter 文で定数として与えた。こうしておくと、一箇
所書き換えるだけで良い。また、名前つき定数は宣言文以外のところで変更され
ることがないので、ミスを防ぐことができる。

\subsection{入出力の do 形反復}

最初の行列の積のプログラムでは、入出力の部分がなかった。
これは read,write 文と do 文を組み合わせても良いが、もっと簡潔に以下のよ
うにできる。
\begin{verbatim}
	read(*,*) ((A(i,j), j=1,M), i=1,L)
	read(*,*) ((B(i,j), j=1,N), i=1,M)
\end{verbatim}
\begin{verbatim}
	write(*,*) ((A(i,j), j=1,M), i=1,L)
	write(*,*) ((B(i,j), j=1,N), i=1,M)
	write(*,*) ((C(i,j), j=1,N), i=1,L)
\end{verbatim}

\end{document}