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_bakvec.c File Reference

#include "f2c.h"

Go to the source code of this file.


Functions

int bakvec_ (integer *nm, integer *n, doublereal *t, doublereal *e, integer *m, doublereal *z__, integer *ierr)

Function Documentation

int bakvec_ integer   nm,
integer   n,
doublereal   t,
doublereal   e,
integer   m,
doublereal   z__,
integer   ierr
 

Definition at line 8 of file eis_bakvec.c.

00010 {
00011     /* System generated locals */
00012     integer t_dim1, t_offset, z_dim1, z_offset, i__1, i__2;
00013 
00014     /* Local variables */
00015     static integer i__, j;
00016 
00017 
00018 
00019 /*     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A NONSYMMETRIC */
00020 /*     TRIDIAGONAL MATRIX BY BACK TRANSFORMING THOSE OF THE */
00021 /*     CORRESPONDING SYMMETRIC MATRIX DETERMINED BY  FIGI. */
00022 
00023 /*     ON INPUT */
00024 
00025 /*        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL */
00026 /*          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */
00027 /*          DIMENSION STATEMENT. */
00028 
00029 /*        N IS THE ORDER OF THE MATRIX. */
00030 
00031 /*        T CONTAINS THE NONSYMMETRIC MATRIX.  ITS SUBDIAGONAL IS */
00032 /*          STORED IN THE LAST N-1 POSITIONS OF THE FIRST COLUMN, */
00033 /*          ITS DIAGONAL IN THE N POSITIONS OF THE SECOND COLUMN, */
00034 /*          AND ITS SUPERDIAGONAL IN THE FIRST N-1 POSITIONS OF */
00035 /*          THE THIRD COLUMN.  T(1,1) AND T(N,3) ARE ARBITRARY. */
00036 
00037 /*        E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE SYMMETRIC */
00038 /*          MATRIX IN ITS LAST N-1 POSITIONS.  E(1) IS ARBITRARY. */
00039 
00040 /*        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED. */
00041 
00042 /*        Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED */
00043 /*          IN ITS FIRST M COLUMNS. */
00044 
00045 /*     ON OUTPUT */
00046 
00047 /*        T IS UNALTERED. */
00048 
00049 /*        E IS DESTROYED. */
00050 
00051 /*        Z CONTAINS THE TRANSFORMED EIGENVECTORS */
00052 /*          IN ITS FIRST M COLUMNS. */
00053 
00054 /*        IERR IS SET TO */
00055 /*          ZERO       FOR NORMAL RETURN, */
00056 /*          2*N+I      IF E(I) IS ZERO WITH T(I,1) OR T(I-1,3) NON-ZERO. 
00057 */
00058 /*                     IN THIS CASE, THE SYMMETRIC MATRIX IS NOT SIMILAR 
00059 */
00060 /*                     TO THE ORIGINAL MATRIX, AND THE EIGENVECTORS */
00061 /*                     CANNOT BE FOUND BY THIS PROGRAM. */
00062 
00063 /*     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */
00064 /*     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY 
00065 */
00066 
00067 /*     THIS VERSION DATED AUGUST 1983. */
00068 
00069 /*     ------------------------------------------------------------------ 
00070 */
00071 
00072     /* Parameter adjustments */
00073     t_dim1 = *nm;
00074     t_offset = t_dim1 + 1;
00075     t -= t_offset;
00076     --e;
00077     z_dim1 = *nm;
00078     z_offset = z_dim1 + 1;
00079     z__ -= z_offset;
00080 
00081     /* Function Body */
00082     *ierr = 0;
00083     if (*m == 0) {
00084         goto L1001;
00085     }
00086     e[1] = 1.;
00087     if (*n == 1) {
00088         goto L1001;
00089     }
00090 
00091     i__1 = *n;
00092     for (i__ = 2; i__ <= i__1; ++i__) {
00093         if (e[i__] != 0.) {
00094             goto L80;
00095         }
00096         if (t[i__ + t_dim1] != 0. || t[i__ - 1 + t_dim1 * 3] != 0.) {
00097             goto L1000;
00098         }
00099         e[i__] = 1.;
00100         goto L100;
00101 L80:
00102         e[i__] = e[i__ - 1] * e[i__] / t[i__ - 1 + t_dim1 * 3];
00103 L100:
00104         ;
00105     }
00106 
00107     i__1 = *m;
00108     for (j = 1; j <= i__1; ++j) {
00109 
00110         i__2 = *n;
00111         for (i__ = 2; i__ <= i__2; ++i__) {
00112             z__[i__ + j * z_dim1] *= e[i__];
00113 /* L120: */
00114         }
00115     }
00116 
00117     goto L1001;
00118 /*     .......... SET ERROR -- EIGENVECTORS CANNOT BE */
00119 /*                FOUND BY THIS PROGRAM .......... */
00120 L1000:
00121     *ierr = (*n << 1) + i__;
00122 L1001:
00123     return 0;
00124 } /* bakvec_ */
 

Powered by Plone

This site conforms to the following standards: