Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00035 #include <math.h>
00036
00037
00038 extern "C" void dpotrf_ (const char *uplo, const unsigned long *_n, double *a,
00039 const unsigned long *_lda, long *info)
00040 {
00041 unsigned long n = *_n, lda = *_lda;
00042 double sum;
00043 unsigned long i, j;
00044 int k;
00045
00046 for( i=0; i<n; ++i )
00047 {
00048
00049 sum = a[i + lda*i];
00050
00051 for( k=(i-1); k>=0; --k )
00052 sum -= a[k+lda*i] * a[k+lda*i];
00053
00054 if ( sum > 0.0 )
00055 a[i+lda*i] = sqrt( sum );
00056 else
00057 {
00058 if (info != 0)
00059 *info = i+1;
00060 return;
00061 }
00062
00063 for( j=(i+1); j<n; ++j )
00064 {
00065 sum = a[j*lda + i];
00066
00067 for( k=(i-1); k>=0; --k )
00068 sum -= a[k+lda*i] * a[k+lda*j];
00069
00070 a[i+lda*j] = sum / a[i+lda*i];
00071 }
00072 }
00073 if (info != 0)
00074 *info = 0;
00075 }
00076
00077
00078
00079
00080
00081
00082