Doxygen Source Code Documentation
cs_symeig.c File Reference
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "eispack.h"
Go to the source code of this file.
Functions | |
void | symeig_double (int n, double *a, double *e) |
void | symeigval_double (int n, double *a, double *e) |
void | svd_double (int m, int n, double *a, double *s, double *u, double *v) |
Function Documentation
|
Compute SVD of double precision matrix: T [a] = [u] diag[s] [v]
Definition at line 81 of file cs_symeig.c. References a, free, malloc, svd_(), and v. Referenced by DMAT_svd(), main(), matrix_psinv(), and mri_psinv().
00082 { 00083 integer mm,nn , lda,ldu,ldv , ierr ; 00084 doublereal *aa, *ww , *uu , *vv , *rv1 ; 00085 logical matu , matv ; 00086 00087 if( a == NULL || s == NULL || m < 1 || n < 1 ) return ; 00088 00089 mm = m ; 00090 nn = n ; 00091 aa = a ; 00092 lda = m ; 00093 ww = s ; 00094 00095 if( u == NULL ){ 00096 matu = (logical) 0 ; 00097 uu = (doublereal *)malloc(sizeof(double)*m*n) ; 00098 } else { 00099 matu = (logical) 1 ; 00100 uu = u ; 00101 } 00102 ldu = m ; 00103 00104 if( v == NULL ){ 00105 matv = (logical) 0 ; 00106 vv = NULL ; 00107 } else { 00108 matv = (logical) 1 ; 00109 vv = v ; 00110 } 00111 ldv = n ; 00112 00113 rv1 = (double *) malloc(sizeof(double)*n) ; /* workspace */ 00114 00115 (void) svd_( &mm , &nn , &lda , aa , ww , 00116 &matu , &ldu , uu , &matv , &ldv , vv , &ierr , rv1 ) ; 00117 00118 free((void *)rv1) ; 00119 00120 if( u == NULL ) free((void *)uu) ; 00121 return ; 00122 } |
|
Definition at line 25 of file cs_symeig.c. References a, free, malloc, and rs_(). Referenced by DMAT_symeig(), EIG_func(), EIG_tsfunc(), and main().
00026 { 00027 integer nm , matz , ierr ; 00028 double *fv1 , *fv2 ; 00029 00030 if( a == NULL || e == NULL || n < 1 ) return ; 00031 00032 if( n == 1 ){ 00033 e[0] = a[0] ; a[0] = 1.0 ; return ; /* degenerate case */ 00034 } 00035 00036 fv1 = (double *) malloc(sizeof(double)*n) ; /* workspaces */ 00037 fv2 = (double *) malloc(sizeof(double)*n) ; 00038 00039 nm = n ; matz = 1 ; ierr = 0 ; 00040 00041 rs_( &nm , &nm , a , e , &matz , a , fv1 , fv2 , &ierr ) ; 00042 00043 free((void *)fv1) ; free((void *)fv2) ; 00044 return ; 00045 } |
|
Definition at line 49 of file cs_symeig.c. References a, free, malloc, and rs_(). Referenced by matrix_singvals().
00050 { 00051 integer nm , matz , ierr ; 00052 double *fv1 , *fv2 ; 00053 00054 if( a == NULL || e == NULL || n < 1 ) return ; 00055 00056 if( n == 1 ){ e[0] = a[0] ; return ; } /* degenerate case */ 00057 00058 fv1 = (double *) malloc(sizeof(double)*n) ; /* workspaces */ 00059 fv2 = (double *) malloc(sizeof(double)*n) ; 00060 00061 nm = n ; matz = 0 ; ierr = 0 ; 00062 00063 rs_( &nm , &nm , a , e , &matz , a , fv1 , fv2 , &ierr ) ; 00064 00065 free((void *)fv1) ; free((void *)fv2) ; 00066 return ; 00067 } |