summaryrefslogtreecommitdiff
path: root/lib/Numeric/LinearAlgebra/LAPACK
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Numeric/LinearAlgebra/LAPACK')
-rw-r--r--lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c46
-rw-r--r--lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.h13
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
774int 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
796int 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
15int svd_l_R(KDMAT(x),DMAT(u),DVEC(s),DMAT(v)); 15int svd_l_R(KDMAT(x),DMAT(u),DVEC(s),DMAT(v));
16int svd_l_Rdd(KDMAT(x),DMAT(u),DVEC(s),DMAT(v)); 16int svd_l_Rdd(KDMAT(x),DMAT(u),DVEC(s),DMAT(v));
17
18int svd_l_C(KCMAT(a),CMAT(u),DVEC(s),CMAT(v)); 17int svd_l_C(KCMAT(a),CMAT(u),DVEC(s),CMAT(v));
19 18
20int eig_l_C(KCMAT(a),CMAT(u),CVEC(s),CMAT(v)); 19int eig_l_C(KCMAT(a),CMAT(u),CVEC(s),CMAT(v));
21
22int eig_l_R(KDMAT(a),DMAT(u),CVEC(s),DMAT(v)); 20int eig_l_R(KDMAT(a),DMAT(u),CVEC(s),DMAT(v));
23 21
24int eig_l_S(KDMAT(a),DVEC(s),DMAT(v)); 22int eig_l_S(KDMAT(a),DVEC(s),DMAT(v));
25
26int eig_l_H(KCMAT(a),DVEC(s),CMAT(v)); 23int eig_l_H(KCMAT(a),DVEC(s),CMAT(v));
27 24
28int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)); 25int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x));
29
30int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)); 26int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x));
31 27
32int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x)); 28int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x));
33
34int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x)); 29int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x));
35 30
36int linearSolveSVDR_l(double,KDMAT(a),KDMAT(b),DMAT(x)); 31int linearSolveSVDR_l(double,KDMAT(a),KDMAT(b),DMAT(x));
37
38int linearSolveSVDC_l(double,KCMAT(a),KCMAT(b),CMAT(x)); 32int linearSolveSVDC_l(double,KCMAT(a),KCMAT(b),CMAT(x));
39 33
40int chol_l_H(KCMAT(a),CMAT(r)); 34int chol_l_H(KCMAT(a),CMAT(r));
41
42int chol_l_S(KDMAT(a),DMAT(r)); 35int chol_l_S(KDMAT(a),DMAT(r));
43 36
44int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r)); 37int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r));
45
46int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r)); 38int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r));
47 39
48int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r)); 40int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r));
49
50int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r)); 41int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r));
51 42
52int schur_l_R(KDMAT(a), DMAT(u), DMAT(s)); 43int schur_l_R(KDMAT(a), DMAT(u), DMAT(s));
53
54int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)); 44int schur_l_C(KCMAT(a), CMAT(u), CMAT(s));
45
46int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r));
47int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r));