Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

eis_figi.c

Go to the documentation of this file.
00001 /* figi.f -- translated by f2c (version 19961017).
00002    You must link the resulting object file with the libraries:
00003         -lf2c -lm   (in that order)
00004 */
00005 
00006 #include "f2c.h"
00007 
00008 /* Subroutine */ int figi_(integer *nm, integer *n, doublereal *t, doublereal 
00009         *d__, doublereal *e, doublereal *e2, integer *ierr)
00010 {
00011     /* System generated locals */
00012     integer t_dim1, t_offset, i__1;
00013     doublereal d__1;
00014 
00015     /* Builtin functions */
00016     double sqrt(doublereal);
00017 
00018     /* Local variables */
00019     static integer i__;
00020 
00021 
00022 
00023 /*     GIVEN A NONSYMMETRIC TRIDIAGONAL MATRIX SUCH THAT THE PRODUCTS */
00024 /*     OF CORRESPONDING PAIRS OF OFF-DIAGONAL ELEMENTS ARE ALL */
00025 /*     NON-NEGATIVE, THIS SUBROUTINE REDUCES IT TO A SYMMETRIC */
00026 /*     TRIDIAGONAL MATRIX WITH THE SAME EIGENVALUES.  IF, FURTHER, */
00027 /*     A ZERO PRODUCT ONLY OCCURS WHEN BOTH FACTORS ARE ZERO, */
00028 /*     THE REDUCED MATRIX IS SIMILAR TO THE ORIGINAL MATRIX. */
00029 
00030 /*     ON INPUT */
00031 
00032 /*        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL */
00033 /*          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */
00034 /*          DIMENSION STATEMENT. */
00035 
00036 /*        N IS THE ORDER OF THE MATRIX. */
00037 
00038 /*        T CONTAINS THE INPUT MATRIX.  ITS SUBDIAGONAL IS */
00039 /*          STORED IN THE LAST N-1 POSITIONS OF THE FIRST COLUMN, */
00040 /*          ITS DIAGONAL IN THE N POSITIONS OF THE SECOND COLUMN, */
00041 /*          AND ITS SUPERDIAGONAL IN THE FIRST N-1 POSITIONS OF */
00042 /*          THE THIRD COLUMN.  T(1,1) AND T(N,3) ARE ARBITRARY. */
00043 
00044 /*     ON OUTPUT */
00045 
00046 /*        T IS UNALTERED. */
00047 
00048 /*        D CONTAINS THE DIAGONAL ELEMENTS OF THE SYMMETRIC MATRIX. */
00049 
00050 /*        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE SYMMETRIC */
00051 /*          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS NOT SET. */
00052 
00053 /*        E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E. */
00054 /*          E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED. */
00055 
00056 /*        IERR IS SET TO */
00057 /*          ZERO       FOR NORMAL RETURN, */
00058 /*          N+I        IF T(I,1)*T(I-1,3) IS NEGATIVE, */
00059 /*          -(3*N+I)   IF T(I,1)*T(I-1,3) IS ZERO WITH ONE FACTOR */
00060 /*                     NON-ZERO.  IN THIS CASE, THE EIGENVECTORS OF */
00061 /*                     THE SYMMETRIC MATRIX ARE NOT SIMPLY RELATED */
00062 /*                     TO THOSE OF  T  AND SHOULD NOT BE SOUGHT. */
00063 
00064 /*     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */
00065 /*     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY 
00066 */
00067 
00068 /*     THIS VERSION DATED AUGUST 1983. */
00069 
00070 /*     ------------------------------------------------------------------ 
00071 */
00072 
00073     /* Parameter adjustments */
00074     t_dim1 = *nm;
00075     t_offset = t_dim1 + 1;
00076     t -= t_offset;
00077     --e2;
00078     --e;
00079     --d__;
00080 
00081     /* Function Body */
00082     *ierr = 0;
00083 
00084     i__1 = *n;
00085     for (i__ = 1; i__ <= i__1; ++i__) {
00086         if (i__ == 1) {
00087             goto L90;
00088         }
00089         e2[i__] = t[i__ + t_dim1] * t[i__ - 1 + t_dim1 * 3];
00090         if ((d__1 = e2[i__]) < 0.) {
00091             goto L1000;
00092         } else if (d__1 == 0) {
00093             goto L60;
00094         } else {
00095             goto L80;
00096         }
00097 L60:
00098         if (t[i__ + t_dim1] == 0. && t[i__ - 1 + t_dim1 * 3] == 0.) {
00099             goto L80;
00100         }
00101 /*     .......... SET ERROR -- PRODUCT OF SOME PAIR OF OFF-DIAGONAL */
00102 /*                ELEMENTS IS ZERO WITH ONE MEMBER NON-ZERO ..........
00103  */
00104         *ierr = -(*n * 3 + i__);
00105 L80:
00106         e[i__] = sqrt(e2[i__]);
00107 L90:
00108         d__[i__] = t[i__ + (t_dim1 << 1)];
00109 /* L100: */
00110     }
00111 
00112     goto L1001;
00113 /*     .......... SET ERROR -- PRODUCT OF SOME PAIR OF OFF-DIAGONAL */
00114 /*                ELEMENTS IS NEGATIVE .......... */
00115 L1000:
00116     *ierr = *n + i__;
00117 L1001:
00118     return 0;
00119 } /* figi_ */
00120 
 

Powered by Plone

This site conforms to the following standards: