by radomir » Fri Nov 09, 2012 8:08 am
I found it after a lot of search and trying many things. This code works. Maybe needs of course tunning, for example, when printing the matrix the values on the upper right part of the matrix should be 0. But at least runns and gives correct data.
I post for helping other not losing the time I lost searching through many mesy algorithms which where using different libraries and subroutines not necessary for initial tests. Before doing anything CLapack and CBlas must be correctly installed.
Here the code:
#include <iostream>
#include <string>
#include <vector>
#include <f2c.h>
using namespace std;
extern "C" void dpotrf_(char *uplo,int *jb,double *A,int *lda,int *info);
int main()
{
int INFO,size;
char UPLO;
//double *cov;
double cov[9];
size = 3;
//cov = (double *)calloc(size * size, sizeof(double));
cov[0] = 1;
cov[1] = 3;
cov[2] = 4;
cov[3] = 3;
cov[4] = 13;
cov[5] = 16;
cov[6] = 4;
cov[7] = 16;
cov[8] = 21;
UPLO = 'L';
cout << "original matrix" <<endl;
for(int i=0;i<9;i++){
cout << cov[i] << endl;
}
cout << "-------------------------"<< endl;
for(int i=0;i<9;i++){
dpotrf_(&UPLO,&size,cov,&size,&INFO);
cout << cov[i] << endl;
}
}
And here the makefile. I configured it for running on a 64 bit Linux Ubuntu with a g++ compiler:
DEFINES =
INCLUDES = -I/usr/local/include
OPT = -O
CFLAGS = $(OPT) $(INCLUDES) $(DEFINES)
CLIBS = -lm
# Systems with NAG library:
FLIBS = -lnag
# GNU/Linux Intel x86 systems
CLIBS = -lgcc -lstdc++
FLIBS = -llapack -lblas
ccode: ccode.o
$(CC) $(CFLAGS) -o ccode cholesky5.o $(FLIBS) $(CLIBS) $(LDFLAGS)
ccode.o: cholesky5.cpp
$(CC) $(CFLAGS) -c cholesky5.cpp
fcode: fcode.o
$(FC) -o fcode fcode.o $(FLIBS) $(LDFLAGS)