\documentstyle{article} \setlength{\headheight}{0.0in} \setlength{\textheight}{8.75in} \setlength{\textwidth}{6.0in} \setlength{\oddsidemargin}{0.15in} \newcommand{\hs}{\hspace{1.0in}} \newcommand{\hhs}{\hspace{0.5in}} \newcommand{\hqs}{\hspace{0.25in}} \newcommand{\hes}{\hspace{0.125in}} \newcommand{\bt}{\begin{tabbing}} \newcommand{\et}{\end{tabbing}} \newcommand{\be}{\begin{equation}} \newcommand{\ee}{\end{equation}} \newcommand{\ds}{\displaystyle} \newcommand{\ver}{\verbatim} \newtheorem{lemma}{Lemma} \begin{document} \title{SL12F -- MARCO FORTRAN Library Routine Document} \author{} \date{} \maketitle {\scriptsize NOTE: before using this routine, please read the appropriate implementation document to check the interpretation of {\bf bold italicised } terms and other implementation-dependent details. The routine name may be precision dependent.} \section{ Purpose} SL12F finds a specified eigenvalue of a differential equation eigenvalue problem posed in the form of an eigen-parameter dependent Hamiltonian system with suitable separated boundary conditions. The method used is a shooting method based on matrix oscillation theory, using the algorithm described in \cite{kn:Marletta}, combined with coefficient approximation. \section{ Specification} \bt \hs {\tt SUBROUTINE SL12F(ELAM,EPS,A,B,K,N,USUB1,USUB2,TOL,XMESH,MESH,} \\ \hhs\hqs\hes {\tt \&}\hs\hhs {\tt WORK,IWORK,LWK,ILWK,NXTRAP,IFAIL) } \\ \hs {\tt INTEGER ILWK, LWK(ILWK),IWORK,IFAIL, K, MESH, N, NXTRAP }\\ \hs {\tt {\bf real } ELAM, EPS, A, B, TOL, XMESH(0:MESH), WORK(IWORK)} \\ \hs {\tt EXTERNAL USUB1,USUB2 } \et \section{ Description \label{sec:Descrip}} SL12F finds a specified eigenvalue $\lambda_{k} $ of a Hamiltonian eigenvalue problem of the form \be \left( \begin{array}{c} u' \\ v' \end{array} \right) = \left(\begin{array}{ll} S_{1,1}(x,\lambda) & S_{1,2}(x,\lambda) \\ S_{1,2}^{T}(x,\lambda) & S_{2,2}(x,\lambda) \end{array} \right) \left( \begin{array}{cc} u \\ v \end{array} \right), \;\;\; x\in(a,b) \label{eq:1} \ee \be A_{1}^{T}u(a) + A_{2}^{T}v(a) = 0, \label{eq:2} \ee \be B_{1}^{T}u(b) + B_{2}^{T}v(b) = 0, \label{eq:3} \ee where the $S_{i,j}$ are real $n\times n$ matrix functions of $x$ and $\lambda$, with $S_{1,1}$ symmetric and $S_{2,2}$ symmetric positive definite, and $A_{1}$, $A_{2}$, $B_{1}$ and $B_{2}$ are $n\times n$ matrices satisfying the conjointness conditions \be A_{1}^{T}A_{2}-A_{2}^{T}A_{1} = 0, \;\;\; B_{1}^{T}B_{2}-B_{2}^{T}B_{1} = 0, \ee and the rank conditions \be \mbox{rank}(A_{1}|A_{2}) = n, \;\;\; \mbox{rank}(B_{1}|B_{2}) = n. \label{eq:rank} \ee Here $(A_{1}|A_{2})$ denotes the $n\times 2n$ matrix whose first $n$ columns are the columns of $A_{1}$ and whose $n+1$st to $2n$th columns are the columns of $A_{2}$. There is no a-priori reason for the eigenvalue problem which we have just posed to have any solutions. For a number of well-known cases (see, e.g., Atkinson \cite{kn:Atkinson}) the existence of eigenvalues is established. The eigenvalue indexing used by SL12F is that which ensures that for Sturm-Liouville problems, the eigenvalues will be an infinite sequence \[ \lambda_{0} \leq \lambda_{1} \leq \lambda_{2} \leq \cdots \] With this indexing and the nonlinear dependence of (\ref{eq:1}) on the eigenparameter $\lambda$, it cannot be guaranteed that an eigenvalue will exist with any particular index. It is possible that the first few eigenvalues will be missing, or that there will be only finitely many eigenvalues; it is even possible for the eigenvalues to form a sequence which extends both to $-\infty$ and to $+\infty$; such a sequence requires an indexing $(\lambda_{k})_{k=-\infty}^{+\infty}$. The shooting method used by SL12F integrates a differential equation to find a function from which the position of the eigenvalues may be deduced by a rootfinding process. The integration of the differential equation is performed by first approximating the coefficients $S_{i,j}$ in (\ref{eq:1}) by piecewise constants over a suitable mesh. This enables an eigenvalue approximation to be found. The mesh is then subdivided and Wynn extrapolation applied until the error in the eigenvalue approximation appears to be less than the user's tolerance TOL. \section{References} See the bibliography at the end of this document. \section{ Parameters} \begin{description} \item[ELAM] -- {\bf real} scalar (input/output). \begin{description} \item[On entry:] ELAM must specify an initial approximation to the eigenvalue $ \lambda_{k} $ which is sought. This need not be at all accurate since the routine will always find an approximation to $\lambda_{k} $ even if this is not the eigenvalue closest to the user's initial approximation. \item[On exit:] ELAM will contain the approximation to $\lambda_{k}$. \end{description} \item[EPS] -- {\bf real} scalar (input). \begin{description} \item[On entry:] EPS must be set to a {\bf strictly positive} order-of-maginitude estimate of the error in the initial estimate ELAM. Over-estimates are definitely preferable to under-estimates. \end{description} \item[A] -- {\bf real} (input). \begin{description} \item[On entry:] A must specify the left-hand endpoint $a$ of the interval $(a,b)$ on which the problem is posed. \end{description} \item[B] -- {\bf real} (input). \begin{description} \item[On entry:] B must specify the right-hand endpoint $b$ of the interval $(a,b)$ on which the problem is posed. B $>$ A is required. \end{description} \item[K] -- INTEGER (input). \begin{description} \item[On entry:] K must specify the index $k$ of the eigenvalue sought. To check for a sequence of eigenvalues decreasing to $-\infty$, call SL12F with a large negative value of K (e.g. -100) and a large value of EPS (e.g. EPS=10); if failure occurs with IFAIL = 3, then such a sequence is unlikely. \end{description} \item[N] -- INTEGER (input). \begin{description} \item[On entry:] N must specify the dimension of the matrices $S_{i,j}$ in (\ref{eq:1}). \end{description} \item[USUB1] -- SUBROUTINE, supplied by the user. USUB1 must supply the values of the coefficient matrices $S_{i,j}$ in (\ref{eq:1}). The specification of USUB1 is as follows. \bt \hs {\tt SUBROUTINE USUB1(X,ELAM,S11,S12,S21,S22,N)} \\ \hs {\bf real} {\tt X, ELAM} \\ \hs {\tt INTEGER N} \\ \hs {\bf real} {\tt S11(N,N), S12(N,N), S21(N,N), S22(N,N) } \et \begin{description} \item[X] -- {\bf real} (input). \begin{description} \item[On entry:] X contains the value of a point in $(a,b)$. X must not be changed by USUB1. \end{description} \item[ELAM] -- {\bf real} (input). \begin{description} \item[On entry:] ELAM contains the current value of $\lambda$. ELAM must not be changed by USUB1. \end{description} \item[S11] -- {\bf real} ARRAY of DIMENSION (N,N) (output). \begin{description} \item[On exit:] S11 must contain the value of $S_{1,1}$ at the point X for the current value of $\lambda$ specified by ELAM. \end{description} \item[S12] -- {\bf real} ARRAY of DIMENSION (N,N) (output). \begin{description} \item[On exit:] S12 must contain the value of $S_{1,2}$ at the point X for the current value of $\lambda$ specified by ELAM. \end{description} \item[S21] -- {\bf real} ARRAY of DIMENSION (N,N) (output). \begin{description} \item[On exit:] S21 must contain the value of $S_{1,2}^{T}$ at the point X for the current value of $\lambda$ specified by ELAM. \end{description} \item[S22] -- {\bf real} ARRAY of DIMENSION (N,N) (output). \begin{description} \item[On exit:] S22 must contain the value of $S_{2,2}$ at the point X for the current value of $\lambda$ specified by ELAM. $S_{2,2}$ must be positive definite; if it is not, then SL12F will fail. \end{description} \item[N] -- INTEGER (input). \begin{description} \item[On entry:] N specifies the value of the variable N in the user's call to SL12F. N must not be changed by USUB1. \end{description} \end{description} \item[USUB2] -- SUBROUTINE, supplied by the user. This subroutine supplies the boundary conditions for the problem as specified by equations (\ref{eq:2},\ref{eq:3}). The specification of USUB2 is as follows. \bt \hs {\tt SUBROUTINE USUB2(IEND,ISING,X,U,V,NDIM,N,ELAM) } \\ \hs {\tt INTEGER IEND, NDIM, N } \\ \hs {\tt LOGICAL ISING } \\ \hs {\bf real }{\tt X, U(NDIM,N), V(NDIM,N), ELAM } \et \begin{description} \item[IEND] -- INTEGER (input). \begin{description} \item[On entry:] IEND specifies the end of the interval $ (a,b) $ at which the boundary conditions are to be imposed. If IEND = 0 then boundary conditions are required at the end $ x = a$; if IEND = 1 then boundary conditions are required at $ x = b$. IEND must not be changed by the routine UUSB1. \end{description} \item[ISING] -- LOGICAL (output). \begin{description} \item[On exit:] ISING must have the value .FALSE. This parameter is included to allow for a future upgrade of SL12F to handle singular problems. \end{description} \item[X] -- {\bf real} scalar (input). \begin{description} \item[On entry:] X specifies the actual endpoint at which the boundary condition is required (i.e. the value A or B). Like ISING, this parameter is included to allow for a future upgrade of SL12F to handle singular problems. \end{description} \item[U] -- {\bf real} ARRAY of DIMENSION (NDIM,N) (output). \begin{description} \item[On exit:] U must specify the matrix $A_{2}$ if IEND=0 or $B_{2}$ if IEND=1. \end{description} \item[V] -- {\bf real} ARRAY of DIMENSION (NDIM,N) (output). \begin{description} \item[On exit:] V must specify the matrix $-A_{1}$ if IEND=0 or $-B_{1}$ if IEND=1. \end{description} \item[NDIM] -- INTEGER (input). \begin{description} \item[On entry:] NDIM specifies the first dimensions of the arrays U and V. The value of NDIM must not be changed by USUB2. \end{description} \item[N] -- INTEGER (input). \begin{description} \item[On entry:] N specifies the value of the variable $N$ in the user's call to SL12F. N must not be changed by USUB2. \end{description} \item[ELAM] -- {\bf real} scalar (input). \begin{description} \item[On entry:] ELAM specifies the current value of $\lambda$, allowing for $\lambda$-dependent boundary conditions. The value of ELAM must not be changed by USUB2. \end{description} \end{description} \item[TOL] -- {\bf real} (input). \begin{description} \item[ On entry:] TOL should be strictly positive. SL12F will perform at most 10 Wynn extrapolations in an attempt to ensure that the error in the eigenvalue approximation returned is less than TOL. \end{description} \item[XMESH] -- {\bf real} array of DIMENSION (0:MESH) (workspace). \item[MESH] -- INTEGER (input/output) \begin{description} \item[On entry:] MESH must specify the first dimension of XMESH as declared in the calling (sub)program. Since XMESH is used to store the mesh used by SL12F, and since the number of mesh intervals required depends on the user's accuracy requirements, it is impossible to specify a value of MESH which will always be sufficient. However for regular problems and modest tolerances (no smaller than $10^{-6}$), MESH=2000 will usually be more than adequate. \item[On exit] MESH specifies the number of mesh intervals actually used. \end{description} \item[WORK] -- {\bf real} array of DIMENSION IWORK (workspace). \item[IWORK] -- INTEGER (input). \begin{description} \item[On entry:] IWORK must specify the dimension of WORK as declared in the calling (sub)program; IWORK $\geq $ N*(8+60*N) \end{description} \item[LWK] -- INTEGER array of DIMENSION ILWK (workspace). \item[ILWK] -- INTEGER (input). \begin{description} \item[ON entry:] ILWK must specify the dimension of LWK as declared in the calling (sub)program; ILWK $\geq $ N. \end{description} \item[NXTRAP] -- INTEGER (output). \begin{description} \item[On exit:] NXTRAP specifies the number of extrapolations which were required. This gives some measure of the inherent difficulty of the problem concerned. \end{description} \item[IFAIL] -- INTEGER (input/output). \begin{description} \item[On entry:] IFAIL must be set to -1, 0 or 1. For users not familiar with this parameter (described in Chapter P01 of the NAG Library documentation) the recommended value is 0. \item[On exit:] IFAIL = 0 unless the routine detects an error (see Section \ref{section:6}). \end{description} \end{description} \section{ Error Indicators and Warnings \label{section:6}} Errors detected by the routine: \begin{description} \item[IFAIL = 1.] A parameter error on input. This error may be trigerred by all of the following: N $<$ 2, TOL $\leq$ 0, EPS $\leq$ 0 and B $\leq$ A, IWORK or LWK less than the minimum values specified above. If IFAIL was -1 or 0 on entry then an error message will give more details. \item[IFAIL = 2.] An error has occurred while converting the boundary conditions from the user's variables to SL12F's variables. Check the routine USUB2, making sure that the boundary conditions satisfy the rank condition and the conjointness condition. \item[IFAIL = 3.] Too many evaluations of the miss-distanve function have been made without an eigenvalue being located. Try increasing EPS. It is also possible that no eigenvalue exists with the index specified. \item[IFAIL = 4.] The meshing routine is making little progress as the stepsize has become too small. Try increasing the tolerance TOL. \item[IFAIL = 5.] The array XMESH is not large enough. Increase MESH or increase TOL. \item[IFAIL = 6.] The matrix $V+iU$ (see \cite{kn:Marletta}) has become rank deficient. Check the routines USUB1 and USUB2 for coding errors and consider reducing TOL. \item[IFAIL = 7.] The matrix $V+iU$ (see \cite{kn:Marletta}) has become ill-conditioned. Check the routines USUB1 and USUB2 for coding errors and consider reducing TOL. \item[IFAIL = 8.] The eigenvalues of a $\Theta$-matrix (see \cite{kn:Marletta}) cannot be computed accurately, possibly due to ill-conditioning of $V+iU$. Proceed as for IFAIL=7. \item[IFAIL = 9.] The eigenvalues of an H-matrix (see \cite{kn:Marletta}) cannot be computed accurately, possibly due to the presence of large elements. Proceed as for IFAIL=7. \item[IFAIL=10] An H-matrix has become non-Hermitian, possibly due to an accumulation of round-off error. Proceed as for IFAIL=7. \item[IFAIL=11] The coefficient $S_{2,2}$ cannot be diagonalised with sufficient accuracy. Check the routine USUB1 and make sure that $S_{2,2}$ is symmetric. \item[IFAIL=12] The coefficient $S_{2,2}$ is not positive definite. Check the routine USUB1. \end{description} \section{Accuracy} For most problems the eigenvalue error will be less than the user's tolerance TOL. Nevertheless for difficult problems it may be advisable to run SL12F at two different tolerances to obtain an indication of the reliability of the error estimates. \section{Run times} The run times are proportional to $N^{3}$ and increase with decreasing TOL. \section{ Keywords} Eigenvalue Problems, Hamiltonian Equations, Sturm-Liouville Problems, Matrix Oscillation Theory, Shooting Methods, Coefficient Approximation. \section{ Example} We consider the problem \[ -y'' + Q(x)y = \lambda y, \;\;\; x\in (0.1,1], \;\;\; y(0.1) = y(1) = 0, \] where $Q(x)$ is the following $4\times 4$ matrix: \be Q_{i,j}(x) = \frac{1}{\max(i,j)}\cos x + \frac{\delta_{i,j}}{x^{i}}. \label{eq:exeq} \ee This may be written in the form of a Hamiltonian system with $S_{1,1}=\lambda I - Q$, $S_{1,2}=S_{2,1}=0$, and $S_{2,2}=I$, where $I$ denotes the identity matrix. The symbol $\delta_{i,j}$ in (\ref{eq:exeq}) is the usual Kronecker $\delta$: \[ \delta_{i,j} = \left\{ \begin{array}{ll} 0 & \mbox{for $i\neq j$} \\ 1 & \mbox{for $i=j$} \end{array}{ll} \right. \] We ask SL12F to compute an approximation to $\lambda_{3}$. \subsection{ Program Text} \noindent {\scriptsize WARNING: This {\bf double precision} program may require amendment for certain implementations. The results produced may not be the same. If in doubt, please seek further advice. } \begin{verbatim} C SL12F EXAMPLE PROGRAM TEXT. C MARK n RELEASE. MARCO MARLETTA COPYRIGHT 1992. C .. PARAMETERS .. INTEGER IWORK,NMAX,MAXMSH PARAMETER (NMAX=10,IWORK=NMAX*(8+60*NMAX),MAXMSH=5000) C .. LOCAL SCALARS .. INTEGER IFAIL,K,MESH,N,NOUT,NXTRAP DOUBLE PRECISION ELAM,EPS,A,B,TOL C .. LOCAL ARRAYS .. INTEGER LWK(NMAX) DOUBLE PRECISION WORK(IWORK),XMESH(0:MAXMSH) C .. EXTERNAL SUBROUTINES .. EXTERNAL USUB1,USUB2 C .. DATA N /4/ DATA NOUT /6/ ELAM = 0.0D0 EPS = 1.0D0 MESH = MAXMSH TOL = 1.D-7 A = 0.1D0 B = 1.0D0 K = 3 IFAIL = 1 CALL SL12F(ELAM,EPS,A,B,K,N,USUB1,USUB2,TOL,XMESH,MESH,WORK, & IWORK,LWK,NMAX,NXTRAP,IFAIL) IF (IFAIL.NE.0) GOTO 100 WRITE(NOUT,9000) K,ELAM 9000 FORMAT(' LAMBDA(',I2,')= ',G18.8) WRITE (NOUT,9030) MESH,NXTRAP 9030 FORMAT(' MESHPOINTS: ',I5,' EXTRAPOLATIONS: ',I3) STOP 100 WRITE(NOUT,9010) IFAIL 9010 FORMAT(' Abnormal exit from SL12F, IFAIL = ',I2) WRITE(NOUT,9020) ELAM 9020 FORMAT(' ELAM = ',G18.8) STOP END SUBROUTINE USUB1(X,ELAM,S11,S12,S21,S22,N) INTEGER I,J,N DOUBLE PRECISION X,ELAM,S11(N,N),S12(N,N),S21(N,N),S22(N,N) DO 10 J=1,N DO 20 I=1,N S12(I,J) = 0.0D0 S21(I,J) = 0.0D0 S22(I,J) = 0.0D0 S11(I,J) = -COS(X)/DBLE(MAX(I,J)) 20 CONTINUE S22(J,J) = 1.0D0 S11(J,J) = S11(J,J) + ELAM - X**(-J) 10 CONTINUE RETURN END SUBROUTINE USUB2(IEND,ISING,X,U,V,NDIM,N,ELAM) INTEGER I,J,IEND,NDIM,N LOGICAL ISING DOUBLE PRECISION ELAM,X,U(NDIM,N),V(NDIM,N) ISING = .FALSE. DO 10 J=1,N DO 20 I=1,N U(I,J) = 0.0D0 V(I,J) = 0.0D0 20 CONTINUE V(J,J) = 1.0D0 10 CONTINUE C REMARK: WE COULD ACTUALLY ASSIGN V TO BE ANY NON-SINGULAR MATRIX. RETURN END \end{verbatim} \subsection{Results} \begin{verbatim} LAMBDA( 3) = 26.920732 MESHPOINTS: 171 EXTRAPOLATIONS: 2 \end{verbatim} \begin{thebibliography}{99} \bibitem{kn:Atkinson} F.V. Atkinson, {\em Discrete and Continuous Boundary Value Problems}, Academic Press, New York (1964). \bibitem{kn:Marletta} M. Marletta, {\em Numerical Solution of Eigenvalue Problems for Hamiltonian Systems}, University of Leicester Mathematics Department Technical Report 1992/17. \end{thebibliography} \end{document} .