>> the numbers agree in the first two places so there may not be programming errors >> but the lapack functions used by octave do equilibration and pivoting to improve
>> the solution - why not just use lapack (dgesvx)?
> thank you for your answer
> it "deblocks" me a little ^^. So what you said is that the C++
routine i use are not as precise > as in Octave ? it makes sense now
that you say it...
> So I looked at the subroutine dgesvx as you told me
> I see that there are a lot of parameters
> Could you help me with those parameters ? I don't understand a
clue
> All i need to do i take the inverse of a <double** matrix>
with <int n> the size of the matrix
> but i don't understand what are all those parameters, even with
the explanation of the routine
> mucho thanks for the help )))
> Jeff
If you haven't called fortran routines from C++ before there are a few issues to be aware of; see e.g. http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
the main things you have to be aware of is how fortran stores matrices, all args are pointers, and the naming convention (e.g. on linux dgesv is dgesv_).
It would probably be worthwhile trying the simpler routine dgesv which doesn't do
equilibration but has a simpler interface:
dgesv (n, nrhs, a, lda, ipiv, b, ldb, info)
where "b" is an (n,n) identity matrix (I like using stl vectors for temp arrays):
vector<double> b(n*n, 0.0);
for (i=0; i<n; i++) b[i*(n+1)] = 1.0;
ipiv is an output array of ints:
vector<int> ipiv(n); and you call with pointers for ints: