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

\oddsidemargin 0mm
\evensidemargin 0mm
\textwidth 165mm
\topmargin -15mm
\textheight 230mm

\author{}
\title{計算物理学:No.3}
\date{}

\begin{document}
\maketitle

\section{効率の良いプログラミングについて}

正しく動くプログラムを作るには、一気にプログラム全体を書き上げるのではなく、
比較的小さな（半ば独立した）単位に分けて、各単位が正しく動くことを確かめ
た上で次のステップに進むと良い。このようにすると、問題を発見し、修正し易
くなる。

このためにはサブルーチンや副プログラムを使うと有効であるので、復習してお
くこと。プログラムはしばしば再利用するので、そのことを意識した書き方をし
ておくと良い（さらに、ファイルのコピー法、ディレクトリーの使い方に馴染ん
でおくと効率的に作業できる）。
各サブルーチン間で変数だけでなく配列の受渡しをすることができる。

\section{収束加速法：Aitken 法}

$n$ 個の数列に対する Aitken 加速のサブルーチンを使って、次の
ような数列を加速してみる。
\begin{verbatim}
c     MAIN ROUTINE:EXAMPLE
c
      implicit real*8 (a-h,o-z)
      dimension a(20),b(20),c(20)
      integer i,n
c
      n=10
      do i=1,n
         b(i)=0.0d0
         c(i)=0.0d0
      end do
      do i=1,n
         a(i)= 0.7 + 0.5*(0.9)**i + 0.2*(0.38)**i
      end do
      call Aitken(a,b,n)
      call Aitken(b,c,n-2)
      do i=1,n
         write(*,1000) i,a(i),b(i),c(i)
      end do
 1000 format(i4,3e18.10)
      end
\end{verbatim}
これは、2段の Aitken を加速した例である(入出力の format 文の書式も調べるこ
と)。

\section{交代数列と Richardson 加速}

混合型の収束列
\begin{equation}
 a_n = a + \lambda^n (c_1 n^{-\alpha_1} + c_2 n^{-\alpha_2} + \cdots)
\label{eq:mixed}
\end{equation}
で $\lambda$ が既知の場合、Richardson 加速が実行でき、
\begin{equation}
 a_n^{(1)} \approx a + \lambda^n \frac{c_1 (-\alpha_1)}{(1-\lambda)} n^{\alpha_1-1}
\end{equation}
となる（これを確かめてみよ）
\cite{Sugiyama-Murota12-4}
。従って再び混合型となり、Richardson 加速を
繰返し適応できる。

交代数列は混合型
の $\lambda=-1$ の場合にあたるので、
交代数列に対し
$\lambda=-1$
とした Richardson 加速も実行できる。余裕があれば、レポート課題の
交代数列にたいして、Richardson 加速を試してみよ。

\section{その他の収束加速法}

Richardson,Aitken 加速の他の収束加速法には、
$\epsilon$-algorithm, Levin 変換等がある\cite{Iri,Wimp}。 
なお、単純な冪乗的振舞いをする数列
\begin{equation}
 \lim_{n \rightarrow \infty} \frac{a_{n+1}-a}{a_{n}-a} =1
\end{equation}
(対数収束列)には、一般的な収束加速法がないことが証明されている
\cite{Sugiyama-Murota12-6,Delahaye}。

\subsection{$\epsilon$-algorithm}

$\epsilon$-algorithm の手続きは、以下の通りである。
\newline
1) 2 次元配列 $\epsilon$ を用意し、その第0行に元の配列を入れる。
\begin{equation}
 \epsilon_{0,n} = a_n \qquad ( n = 1,2,\cdots)
\end{equation}
2) 隣の要素との差の逆数を次の行に書く。
\begin{equation}
 \epsilon_{1,n} = 1/(\epsilon_{0,n+1} - \epsilon_{0,n}) \qquad ( n = 1,2,\cdots)
\end{equation}
3) $i=1,2,3,\cdots$ の順に
\begin{equation}
 \epsilon_{i+1,n} = \epsilon_{i-1,n+1} + 1/(\epsilon_{i,n+1} - \epsilon_{i,n}) \qquad ( n = 1,2,\cdots)
\end{equation}
このようにして得られた 
$\epsilon_{2,n},\epsilon_{4,n},\epsilon_{6,n},\cdots$ が収束加速列である。

\bigskip

$\epsilon$-algorithm は特に
\begin{equation}
 a_n = a + \sum_{r=1}^k b_r(n) \lambda_r^n \qquad ( b_r(n) は n の多項式)
\end{equation}
という場合には、$\epsilon_{2K,n}$ ($K = \sum_{r=1}^k (b_r(n) の次数)$)
が正しい収束値 $a$ を与える。

\begin{thebibliography}{99}
\bibitem{Sugiyama-Murota12-4} 数値計算法の数理、杉山 正顕、室田 一雄 共著、
        (岩波書店) 第12章4節
\bibitem{Iri} 数値計算の常識、伊理 正夫、藤野 和健 著、（共立出版）20章
\bibitem{Wimp} ``Sequence Transformations and Their Applications'', 
	J. Wimp (Academic Press, New York 1981)
\bibitem{Sugiyama-Murota12-6} 数値計算法の数理、杉山 正顕、室田 一雄 共著、
        (岩波書店) 第12章6節
\bibitem{Delahaye} ``Sequence Transformations'', 
	J. P. Delahaye,	(Springer-Verlag, Berlin, 1988)
\end{thebibliography}

\end{document}



