~ubuntu-branches/ubuntu/utopic/haskell-hmatrix/utopic

« back to all changes in this revision

Viewing changes to lib/Numeric/LinearAlgebra/LAPACK/lapack-aux.c

  • Committer: Package Import Robot
  • Author(s): Denis Laxalde
  • Date: 2013-07-06 15:37:50 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20130706153750-wxxplc788jedqvv5
Tags: 0.15.0.0-1
* New upstream release.
* Make it clear in copyright that the license is GPL-3 (as stated by the
  author in <https://github.com/albertoruiz/hmatrix/issues/45>) although
  there is no proper license file yet.

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
 
102
102
//////////////////// real svd ////////////////////////////////////
103
103
 
 
104
/* Subroutine */ int dgesvd_(char *jobu, char *jobvt, integer *m, integer *n,
 
105
        doublereal *a, integer *lda, doublereal *s, doublereal *u, integer *
 
106
        ldu, doublereal *vt, integer *ldvt, doublereal *work, integer *lwork,
 
107
        integer *info);
 
108
 
104
109
int svd_l_R(KDMAT(a),DMAT(u), DVEC(s),DMAT(v)) {
105
110
    integer m = ar;
106
111
    integer n = ac;
159
164
 
160
165
// (alternative version)
161
166
 
 
167
/* Subroutine */ int dgesdd_(char *jobz, integer *m, integer *n, doublereal *
 
168
        a, integer *lda, doublereal *s, doublereal *u, integer *ldu,
 
169
        doublereal *vt, integer *ldvt, doublereal *work, integer *lwork,
 
170
        integer *iwork, integer *info);
 
171
 
162
172
int svd_l_Rdd(KDMAT(a),DMAT(u), DVEC(s),DMAT(v)) {
163
173
    integer m = ar;
164
174
    integer n = ac;
331
341
 
332
342
//////////////////// general complex eigensystem ////////////
333
343
 
 
344
/* Subroutine */ int zgeev_(char *jobvl, char *jobvr, integer *n,
 
345
        doublecomplex *a, integer *lda, doublecomplex *w, doublecomplex *vl,
 
346
        integer *ldvl, doublecomplex *vr, integer *ldvr, doublecomplex *work,
 
347
        integer *lwork, doublereal *rwork, integer *info);
 
348
 
334
349
int eig_l_C(KCMAT(a), CMAT(u), CVEC(s),CMAT(v)) {
335
350
    integer n = ar;
336
351
    REQUIRES(ac==n && sn==n, BAD_SIZE);
381
396
 
382
397
//////////////////// general real eigensystem ////////////
383
398
 
 
399
/* Subroutine */ int dgeev_(char *jobvl, char *jobvr, integer *n, doublereal *
 
400
        a, integer *lda, doublereal *wr, doublereal *wi, doublereal *vl,
 
401
        integer *ldvl, doublereal *vr, integer *ldvr, doublereal *work,
 
402
        integer *lwork, integer *info);
 
403
 
384
404
int eig_l_R(KDMAT(a),DMAT(u), CVEC(s),DMAT(v)) {
385
405
    integer n = ar;
386
406
    REQUIRES(ac==n && sn==n, BAD_SIZE);
425
445
 
426
446
//////////////////// symmetric real eigensystem ////////////
427
447
 
 
448
/* Subroutine */ int dsyev_(char *jobz, char *uplo, integer *n, doublereal *a,
 
449
         integer *lda, doublereal *w, doublereal *work, integer *lwork,
 
450
        integer *info);
428
451
 
429
452
int eig_l_S(int wantV,KDMAT(a),DVEC(s),DMAT(v)) {
430
453
    integer n = ar;
460
483
 
461
484
//////////////////// hermitian complex eigensystem ////////////
462
485
 
 
486
/* Subroutine */ int zheev_(char *jobz, char *uplo, integer *n, doublecomplex
 
487
        *a, integer *lda, doublereal *w, doublecomplex *work, integer *lwork,
 
488
        doublereal *rwork, integer *info);
 
489
 
463
490
int eig_l_H(int wantV,KCMAT(a),DVEC(s),CMAT(v)) {
464
491
    integer n = ar;
465
492
    REQUIRES(ac==n && sn==n, BAD_SIZE);
499
526
 
500
527
//////////////////// general real linear system ////////////
501
528
 
 
529
/* Subroutine */ int dgesv_(integer *n, integer *nrhs, doublereal *a, integer
 
530
        *lda, integer *ipiv, doublereal *b, integer *ldb, integer *info);
 
531
 
502
532
int linearSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) {
503
533
    integer n = ar;
504
534
    integer nhrs = bc;
525
555
 
526
556
//////////////////// general complex linear system ////////////
527
557
 
 
558
/* Subroutine */ int zgesv_(integer *n, integer *nrhs, doublecomplex *a,
 
559
        integer *lda, integer *ipiv, doublecomplex *b, integer *ldb, integer *
 
560
        info);
 
561
 
528
562
int linearSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) {
529
563
    integer n = ar;
530
564
    integer nhrs = bc;
551
585
 
552
586
//////// symmetric positive definite real linear system using Cholesky ////////////
553
587
 
 
588
/* Subroutine */ int dpotrs_(char *uplo, integer *n, integer *nrhs,
 
589
        doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *
 
590
        info);
 
591
 
554
592
int cholSolveR_l(KDMAT(a),KDMAT(b),DMAT(x)) {
555
593
    integer n = ar;
556
594
    integer nhrs = bc;
569
607
 
570
608
//////// Hermitian positive definite real linear system using Cholesky ////////////
571
609
 
 
610
/* Subroutine */ int zpotrs_(char *uplo, integer *n, integer *nrhs,
 
611
        doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb,
 
612
        integer *info);
 
613
 
572
614
int cholSolveC_l(KCMAT(a),KCMAT(b),CMAT(x)) {
573
615
    integer n = ar;
574
616
    integer nhrs = bc;
587
629
 
588
630
//////////////////// least squares real linear system ////////////
589
631
 
 
632
/* Subroutine */ int dgels_(char *trans, integer *m, integer *n, integer *
 
633
        nrhs, doublereal *a, integer *lda, doublereal *b, integer *ldb,
 
634
        doublereal *work, integer *lwork, integer *info);
 
635
 
590
636
int linearSolveLSR_l(KDMAT(a),KDMAT(b),DMAT(x)) {
591
637
    integer m = ar;
592
638
    integer n = ac;
631
677
 
632
678
//////////////////// least squares complex linear system ////////////
633
679
 
 
680
/* Subroutine */ int zgels_(char *trans, integer *m, integer *n, integer *
 
681
        nrhs, doublecomplex *a, integer *lda, doublecomplex *b, integer *ldb,
 
682
        doublecomplex *work, integer *lwork, integer *info);
 
683
 
634
684
int linearSolveLSC_l(KCMAT(a),KCMAT(b),CMAT(x)) {
635
685
    integer m = ar;
636
686
    integer n = ac;
675
725
 
676
726
//////////////////// least squares real linear system using SVD ////////////
677
727
 
 
728
/* Subroutine */ int dgelss_(integer *m, integer *n, integer *nrhs,
 
729
        doublereal *a, integer *lda, doublereal *b, integer *ldb, doublereal *
 
730
        s, doublereal *rcond, integer *rank, doublereal *work, integer *lwork,
 
731
         integer *info);
 
732
 
678
733
int linearSolveSVDR_l(double rcond,KDMAT(a),KDMAT(b),DMAT(x)) {
679
734
    integer m = ar;
680
735
    integer n = ac;
789
844
 
790
845
//////////////////// Cholesky factorization /////////////////////////
791
846
 
 
847
/* Subroutine */ int zpotrf_(char *uplo, integer *n, doublecomplex *a,
 
848
        integer *lda, integer *info);
 
849
 
792
850
int chol_l_H(KCMAT(a),CMAT(l)) {
793
851
    integer n = ar;
794
852
    REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE);
809
867
    OK
810
868
}
811
869
 
 
870
 
 
871
/* Subroutine */ int dpotrf_(char *uplo, integer *n, doublereal *a, integer *
 
872
        lda, integer *info);
 
873
 
812
874
int chol_l_S(KDMAT(a),DMAT(l)) {
813
875
    integer n = ar;
814
876
    REQUIRES(n>=1 && ac == n && lr==n && lc==n,BAD_SIZE);
830
892
 
831
893
//////////////////// QR factorization /////////////////////////
832
894
 
 
895
/* Subroutine */ int dgeqr2_(integer *m, integer *n, doublereal *a, integer *
 
896
        lda, doublereal *tau, doublereal *work, integer *info);
 
897
 
833
898
int qr_l_R(KDMAT(a), DVEC(tau), DMAT(r)) {
834
899
    integer m = ar;
835
900
    integer n = ac;
846
911
    OK
847
912
}
848
913
 
 
914
/* Subroutine */ int zgeqr2_(integer *m, integer *n, doublecomplex *a,
 
915
        integer *lda, doublecomplex *tau, doublecomplex *work, integer *info);
 
916
 
849
917
int qr_l_C(KCMAT(a), CVEC(tau), CMAT(r)) {
850
918
    integer m = ar;
851
919
    integer n = ac;
864
932
 
865
933
//////////////////// Hessenberg factorization /////////////////////////
866
934
 
 
935
/* Subroutine */ int dgehrd_(integer *n, integer *ilo, integer *ihi,
 
936
        doublereal *a, integer *lda, doublereal *tau, doublereal *work,
 
937
        integer *lwork, integer *info);
 
938
 
867
939
int hess_l_R(KDMAT(a), DVEC(tau), DMAT(r)) {
868
940
    integer m = ar;
869
941
    integer n = ac;
882
954
    OK
883
955
}
884
956
 
 
957
 
 
958
/* Subroutine */ int zgehrd_(integer *n, integer *ilo, integer *ihi,
 
959
        doublecomplex *a, integer *lda, doublecomplex *tau, doublecomplex *
 
960
        work, integer *lwork, integer *info);
 
961
 
885
962
int hess_l_C(KCMAT(a), CVEC(tau), CMAT(r)) {
886
963
    integer m = ar;
887
964
    integer n = ac;
902
979
 
903
980
//////////////////// Schur factorization /////////////////////////
904
981
 
 
982
/* Subroutine */ int dgees_(char *jobvs, char *sort, L_fp select, integer *n,
 
983
        doublereal *a, integer *lda, integer *sdim, doublereal *wr,
 
984
        doublereal *wi, doublereal *vs, integer *ldvs, doublereal *work,
 
985
        integer *lwork, logical *bwork, integer *info);
 
986
 
905
987
int schur_l_R(KDMAT(a), DMAT(u), DMAT(s)) {
906
988
    integer m = ar;
907
989
    integer n = ac;
936
1018
    OK
937
1019
}
938
1020
 
 
1021
 
 
1022
/* Subroutine */ int zgees_(char *jobvs, char *sort, L_fp select, integer *n,
 
1023
        doublecomplex *a, integer *lda, integer *sdim, doublecomplex *w,
 
1024
        doublecomplex *vs, integer *ldvs, doublecomplex *work, integer *lwork,
 
1025
         doublereal *rwork, logical *bwork, integer *info);
 
1026
 
939
1027
int schur_l_C(KCMAT(a), CMAT(u), CMAT(s)) {
940
1028
    integer m = ar;
941
1029
    integer n = ac;
965
1053
 
966
1054
//////////////////// LU factorization /////////////////////////
967
1055
 
 
1056
/* Subroutine */ int dgetrf_(integer *m, integer *n, doublereal *a, integer *
 
1057
        lda, integer *ipiv, integer *info);
 
1058
 
968
1059
int lu_l_R(KDMAT(a), DVEC(ipiv), DMAT(r)) {
969
1060
    integer m = ar;
970
1061
    integer n = ac;
987
1078
    OK
988
1079
}
989
1080
 
 
1081
 
 
1082
/* Subroutine */ int zgetrf_(integer *m, integer *n, doublecomplex *a,
 
1083
        integer *lda, integer *ipiv, integer *info);
 
1084
 
990
1085
int lu_l_C(KCMAT(a), DVEC(ipiv), CMAT(r)) {
991
1086
    integer m = ar;
992
1087
    integer n = ac;
1012
1107
 
1013
1108
//////////////////// LU substitution /////////////////////////
1014
1109
 
 
1110
/* Subroutine */ int dgetrs_(char *trans, integer *n, integer *nrhs,
 
1111
        doublereal *a, integer *lda, integer *ipiv, doublereal *b, integer *
 
1112
        ldb, integer *info);
 
1113
 
1015
1114
int luS_l_R(KDMAT(a), KDVEC(ipiv), KDMAT(b), DMAT(x)) {
1016
1115
  integer m = ar;
1017
1116
  integer n = ac;
1032
1131
  OK
1033
1132
}
1034
1133
 
 
1134
 
 
1135
/* Subroutine */ int zgetrs_(char *trans, integer *n, integer *nrhs,
 
1136
        doublecomplex *a, integer *lda, integer *ipiv, doublecomplex *b,
 
1137
        integer *ldb, integer *info);
 
1138
 
1035
1139
int luS_l_C(KCMAT(a), KDVEC(ipiv), KCMAT(b), CMAT(x)) {
1036
1140
    integer m = ar;
1037
1141
    integer n = ac;