diff options
author | Alberto Ruiz <aruiz@um.es> | 2007-12-03 10:43:52 +0000 |
---|---|---|
committer | Alberto Ruiz <aruiz@um.es> | 2007-12-03 10:43:52 +0000 |
commit | c520939e33cc895febed271d5c3218457317bba9 (patch) | |
tree | 8661410a5cb946a3ae40e0c0fbacccccd0fd5ada /lib/Numeric/LinearAlgebra/LAPACK | |
parent | d7d3b731c037fca41bd9128c3da2a582189cb4d9 (diff) |
lapack lu
Diffstat (limited to 'lib/Numeric/LinearAlgebra/LAPACK')
-rw-r--r-- | lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c | 46 | ||||
-rw-r--r-- | lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h | 13 |
2 files changed, 49 insertions, 10 deletions
diff --git a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c index 8392feb..310f6ee 100644 --- a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c +++ b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c | |||
@@ -768,3 +768,49 @@ int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)) { | |||
768 | OK | 768 | OK |
769 | #endif | 769 | #endif |
770 | } | 770 | } |
771 | |||
772 | //////////////////// LU factorization ///////////////////////// | ||
773 | |||
774 | int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r)) { | ||
775 | integer m = ar; | ||
776 | integer n = ac; | ||
777 | integer mn = MIN(m,n); | ||
778 | REQUIRES(m>=1 && n >=1 && ipivn == mn, BAD_SIZE); | ||
779 | DEBUGMSG("lu_l_R"); | ||
780 | integer* auxipiv = (integer*)malloc(mn*sizeof(integer)); | ||
781 | memcpy(rp,ap,m*n*sizeof(double)); | ||
782 | integer res; | ||
783 | dgetrf_ (&m,&n,rp,&m,auxipiv,&res); | ||
784 | if(res>0) { | ||
785 | res = 0; // fixme | ||
786 | } | ||
787 | CHECK(res,res); | ||
788 | int k; | ||
789 | for (k=0; k<mn; k++) { | ||
790 | ipivp[k] = auxipiv[k]; | ||
791 | } | ||
792 | free(auxipiv); | ||
793 | OK | ||
794 | } | ||
795 | |||
796 | int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r)) { | ||
797 | integer m = ar; | ||
798 | integer n = ac; | ||
799 | integer mn = MIN(m,n); | ||
800 | REQUIRES(m>=1 && n >=1 && ipivn == mn, BAD_SIZE); | ||
801 | DEBUGMSG("lu_l_C"); | ||
802 | integer* auxipiv = (integer*)malloc(mn*sizeof(integer)); | ||
803 | memcpy(rp,ap,m*n*sizeof(doublecomplex)); | ||
804 | integer res; | ||
805 | zgetrf_ (&m,&n,(doublecomplex*)rp,&m,auxipiv,&res); | ||
806 | if(res>0) { | ||
807 | res = 0; // fixme | ||
808 | } | ||
809 | CHECK(res,res); | ||
810 | int k; | ||
811 | for (k=0; k<mn; k++) { | ||
812 | ipivp[k] = auxipiv[k]; | ||
813 | } | ||
814 | free(auxipiv); | ||
815 | OK | ||
816 | } | ||
diff --git a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h index e5d74d7..bccd4b8 100644 --- a/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h +++ b/lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h | |||
@@ -14,41 +14,34 @@ | |||
14 | 14 | ||
15 | int svd_l_R(KDMAT(x),DMAT(u),DVEC(s),DMAT(v)); | 15 | int svd_l_R(KDMAT(x),DMAT(u),DVEC(s),DMAT(v)); |
16 | int svd_l_Rdd(KDMAT(x),DMAT(u),DVEC(s),DMAT(v)); | 16 | int svd_l_Rdd(KDMAT(x),DMAT(u),DVEC(s),DMAT(v)); |
17 | |||
18 | int svd_l_C(KCMAT(a),CMAT(u),DVEC(s),CMAT(v)); | 17 | int svd_l_C(KCMAT(a),CMAT(u),DVEC(s),CMAT(v)); |
19 | 18 | ||
20 | int eig_l_C(KCMAT(a),CMAT(u),CVEC(s),CMAT(v)); | 19 | int eig_l_C(KCMAT(a),CMAT(u),CVEC(s),CMAT(v)); |
21 | |||
22 | int eig_l_R(KDMAT(a),DMAT(u),CVEC(s),DMAT(v)); | 20 | int eig_l_R(KDMAT(a),DMAT(u),CVEC(s),DMAT(v)); |
23 | 21 | ||
24 | int eig_l_S(KDMAT(a),DVEC(s),DMAT(v)); | 22 | int eig_l_S(KDMAT(a),DVEC(s),DMAT(v)); |
25 | |||
26 | int eig_l_H(KCMAT(a),DVEC(s),CMAT(v)); | 23 | int eig_l_H(KCMAT(a),DVEC(s),CMAT(v)); |
27 | 24 | ||
28 | int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)); | 25 | int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)); |
29 | |||
30 | int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)); | 26 | int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)); |
31 | 27 | ||
32 | int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x)); | 28 | int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x)); |
33 | |||
34 | int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x)); | 29 | int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x)); |
35 | 30 | ||
36 | int linearSolveSVDR_l(double,KDMAT(a),KDMAT(b),DMAT(x)); | 31 | int linearSolveSVDR_l(double,KDMAT(a),KDMAT(b),DMAT(x)); |
37 | |||
38 | int linearSolveSVDC_l(double,KCMAT(a),KCMAT(b),CMAT(x)); | 32 | int linearSolveSVDC_l(double,KCMAT(a),KCMAT(b),CMAT(x)); |
39 | 33 | ||
40 | int chol_l_H(KCMAT(a),CMAT(r)); | 34 | int chol_l_H(KCMAT(a),CMAT(r)); |
41 | |||
42 | int chol_l_S(KDMAT(a),DMAT(r)); | 35 | int chol_l_S(KDMAT(a),DMAT(r)); |
43 | 36 | ||
44 | int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r)); | 37 | int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r)); |
45 | |||
46 | int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r)); | 38 | int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r)); |
47 | 39 | ||
48 | int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r)); | 40 | int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r)); |
49 | |||
50 | int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r)); | 41 | int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r)); |
51 | 42 | ||
52 | int schur_l_R(KDMAT(a), DMAT(u), DMAT(s)); | 43 | int schur_l_R(KDMAT(a), DMAT(u), DMAT(s)); |
53 | |||
54 | int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)); | 44 | int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)); |
45 | |||
46 | int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r)); | ||
47 | int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r)); | ||