Doxygen Source Code Documentation
eis_figi.c File Reference
#include "f2c.h"Go to the source code of this file.
Functions | |
| int | figi_ (integer *nm, integer *n, doublereal *t, doublereal *d__, doublereal *e, doublereal *e2, integer *ierr) |
Function Documentation
|
||||||||||||||||||||||||||||||||
|
Definition at line 8 of file eis_figi.c. Referenced by rt_().
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_ */
|