annotate armadillo-3.900.4/include/armadillo_bits/auxlib_bones.hpp @ 84:55a047986812 tip

Update library URI so as not to be document-local
author Chris Cannam
date Wed, 22 Apr 2020 14:21:57 +0100
parents 1ec0e2823891
children
rev   line source
Chris@49 1 // Copyright (C) 2008-2012 NICTA (www.nicta.com.au)
Chris@49 2 // Copyright (C) 2008-2012 Conrad Sanderson
Chris@49 3 // Copyright (C) 2009 Edmund Highcock
Chris@49 4 // Copyright (C) 2011 James Sanders
Chris@49 5 // Copyright (C) 2012 Eric Jon Sundstrom
Chris@49 6 //
Chris@49 7 // This Source Code Form is subject to the terms of the Mozilla Public
Chris@49 8 // License, v. 2.0. If a copy of the MPL was not distributed with this
Chris@49 9 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
Chris@49 10
Chris@49 11
Chris@49 12 //! \addtogroup auxlib
Chris@49 13 //! @{
Chris@49 14
Chris@49 15
Chris@49 16 //! wrapper for accessing external functions defined in ATLAS, LAPACK or BLAS libraries
Chris@49 17 class auxlib
Chris@49 18 {
Chris@49 19 public:
Chris@49 20
Chris@49 21
Chris@49 22 template<const uword row, const uword col>
Chris@49 23 struct pos
Chris@49 24 {
Chris@49 25 static const uword n2 = row + col*2;
Chris@49 26 static const uword n3 = row + col*3;
Chris@49 27 static const uword n4 = row + col*4;
Chris@49 28 };
Chris@49 29
Chris@49 30
Chris@49 31 //
Chris@49 32 // inv
Chris@49 33
Chris@49 34 template<typename eT, typename T1>
Chris@49 35 inline static bool inv(Mat<eT>& out, const Base<eT,T1>& X, const bool slow = false);
Chris@49 36
Chris@49 37 template<typename eT>
Chris@49 38 inline static bool inv(Mat<eT>& out, const Mat<eT>& A, const bool slow = false);
Chris@49 39
Chris@49 40 template<typename eT>
Chris@49 41 inline static bool inv_noalias_tinymat(Mat<eT>& out, const Mat<eT>& X, const uword N);
Chris@49 42
Chris@49 43 template<typename eT>
Chris@49 44 inline static bool inv_inplace_tinymat(Mat<eT>& out, const uword N);
Chris@49 45
Chris@49 46 template<typename eT>
Chris@49 47 inline static bool inv_inplace_lapack(Mat<eT>& out);
Chris@49 48
Chris@49 49
Chris@49 50 //
Chris@49 51 // inv_tr
Chris@49 52
Chris@49 53 template<typename eT, typename T1>
Chris@49 54 inline static bool inv_tr(Mat<eT>& out, const Base<eT,T1>& X, const uword layout);
Chris@49 55
Chris@49 56
Chris@49 57 //
Chris@49 58 // inv_sym
Chris@49 59
Chris@49 60 template<typename eT, typename T1>
Chris@49 61 inline static bool inv_sym(Mat<eT>& out, const Base<eT,T1>& X, const uword layout);
Chris@49 62
Chris@49 63
Chris@49 64 //
Chris@49 65 // inv_sympd
Chris@49 66
Chris@49 67 template<typename eT, typename T1>
Chris@49 68 inline static bool inv_sympd(Mat<eT>& out, const Base<eT,T1>& X, const uword layout);
Chris@49 69
Chris@49 70
Chris@49 71 //
Chris@49 72 // det
Chris@49 73
Chris@49 74 template<typename eT, typename T1>
Chris@49 75 inline static eT det(const Base<eT,T1>& X, const bool slow = false);
Chris@49 76
Chris@49 77 template<typename eT>
Chris@49 78 inline static eT det_tinymat(const Mat<eT>& X, const uword N);
Chris@49 79
Chris@49 80 template<typename eT>
Chris@49 81 inline static eT det_lapack(const Mat<eT>& X, const bool make_copy);
Chris@49 82
Chris@49 83
Chris@49 84 //
Chris@49 85 // log_det
Chris@49 86
Chris@49 87 template<typename eT, typename T1>
Chris@49 88 inline static bool log_det(eT& out_val, typename get_pod_type<eT>::result& out_sign, const Base<eT,T1>& X);
Chris@49 89
Chris@49 90
Chris@49 91 //
Chris@49 92 // lu
Chris@49 93
Chris@49 94 template<typename eT, typename T1>
Chris@49 95 inline static bool lu(Mat<eT>& L, Mat<eT>& U, podarray<blas_int>& ipiv, const Base<eT,T1>& X);
Chris@49 96
Chris@49 97 template<typename eT, typename T1>
Chris@49 98 inline static bool lu(Mat<eT>& L, Mat<eT>& U, Mat<eT>& P, const Base<eT,T1>& X);
Chris@49 99
Chris@49 100 template<typename eT, typename T1>
Chris@49 101 inline static bool lu(Mat<eT>& L, Mat<eT>& U, const Base<eT,T1>& X);
Chris@49 102
Chris@49 103
Chris@49 104 //
Chris@49 105 // eig
Chris@49 106
Chris@49 107 template<typename eT, typename T1>
Chris@49 108 inline static bool eig_sym(Col<eT>& eigval, const Base<eT,T1>& X);
Chris@49 109
Chris@49 110 template<typename T, typename T1>
Chris@49 111 inline static bool eig_sym(Col<T>& eigval, const Base<std::complex<T>,T1>& X);
Chris@49 112
Chris@49 113 template<typename eT, typename T1>
Chris@49 114 inline static bool eig_sym(Col<eT>& eigval, Mat<eT>& eigvec, const Base<eT,T1>& X);
Chris@49 115
Chris@49 116 template<typename T, typename T1>
Chris@49 117 inline static bool eig_sym(Col<T>& eigval, Mat< std::complex<T> >& eigvec, const Base<std::complex<T>,T1>& X);
Chris@49 118
Chris@49 119 template<typename eT, typename T1>
Chris@49 120 inline static bool eig_sym_dc(Col<eT>& eigval, Mat<eT>& eigvec, const Base<eT,T1>& X);
Chris@49 121
Chris@49 122 template<typename T, typename T1>
Chris@49 123 inline static bool eig_sym_dc(Col<T>& eigval, Mat< std::complex<T> >& eigvec, const Base<std::complex<T>,T1>& X);
Chris@49 124
Chris@49 125 template<typename T, typename T1>
Chris@49 126 inline static bool eig_gen(Col< std::complex<T> >& eigval, Mat<T>& l_eigvec, Mat<T>& r_eigvec, const Base<T,T1>& X, const char side);
Chris@49 127
Chris@49 128 template<typename T, typename T1>
Chris@49 129 inline static bool eig_gen(Col< std::complex<T> >& eigval, Mat< std::complex<T> >& l_eigvec, Mat< std::complex<T> >& r_eigvec, const Base< std::complex<T>, T1 >& X, const char side);
Chris@49 130
Chris@49 131
Chris@49 132 //
Chris@49 133 // chol
Chris@49 134
Chris@49 135 template<typename eT, typename T1>
Chris@49 136 inline static bool chol(Mat<eT>& out, const Base<eT,T1>& X);
Chris@49 137
Chris@49 138
Chris@49 139 //
Chris@49 140 // qr
Chris@49 141
Chris@49 142 template<typename eT, typename T1>
Chris@49 143 inline static bool qr(Mat<eT>& Q, Mat<eT>& R, const Base<eT,T1>& X);
Chris@49 144
Chris@49 145 template<typename eT, typename T1>
Chris@49 146 inline static bool qr_econ(Mat<eT>& Q, Mat<eT>& R, const Base<eT,T1>& X);
Chris@49 147
Chris@49 148
Chris@49 149 //
Chris@49 150 // svd
Chris@49 151
Chris@49 152 template<typename eT, typename T1>
Chris@49 153 inline static bool svd(Col<eT>& S, const Base<eT,T1>& X, uword& n_rows, uword& n_cols);
Chris@49 154
Chris@49 155 template<typename T, typename T1>
Chris@49 156 inline static bool svd(Col<T>& S, const Base<std::complex<T>, T1>& X, uword& n_rows, uword& n_cols);
Chris@49 157
Chris@49 158 template<typename eT, typename T1>
Chris@49 159 inline static bool svd(Col<eT>& S, const Base<eT,T1>& X);
Chris@49 160
Chris@49 161 template<typename T, typename T1>
Chris@49 162 inline static bool svd(Col<T>& S, const Base<std::complex<T>, T1>& X);
Chris@49 163
Chris@49 164 template<typename eT, typename T1>
Chris@49 165 inline static bool svd(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, const Base<eT,T1>& X);
Chris@49 166
Chris@49 167 template<typename T, typename T1>
Chris@49 168 inline static bool svd(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >& V, const Base< std::complex<T>, T1>& X);
Chris@49 169
Chris@49 170 template<typename eT, typename T1>
Chris@49 171 inline static bool svd_econ(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, const Base<eT,T1>& X, const char mode);
Chris@49 172
Chris@49 173 template<typename T, typename T1>
Chris@49 174 inline static bool svd_econ(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >& V, const Base< std::complex<T>, T1>& X, const char mode);
Chris@49 175
Chris@49 176 template<typename eT, typename T1>
Chris@49 177 inline static bool svd_dc(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, const Base<eT,T1>& X);
Chris@49 178
Chris@49 179 template<typename T, typename T1>
Chris@49 180 inline static bool svd_dc(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >& V, const Base< std::complex<T>, T1>& X);
Chris@49 181
Chris@49 182
Chris@49 183 //
Chris@49 184 // solve
Chris@49 185
Chris@49 186 template<typename eT, typename T1>
Chris@49 187 inline static bool solve (Mat<eT>& out, Mat<eT>& A, const Base<eT,T1>& X, const bool slow = false);
Chris@49 188
Chris@49 189 template<typename eT, typename T1>
Chris@49 190 inline static bool solve_od(Mat<eT>& out, Mat<eT>& A, const Base<eT,T1>& X);
Chris@49 191
Chris@49 192 template<typename eT, typename T1>
Chris@49 193 inline static bool solve_ud(Mat<eT>& out, Mat<eT>& A, const Base<eT,T1>& X);
Chris@49 194
Chris@49 195
Chris@49 196 //
Chris@49 197 // solve_tr
Chris@49 198
Chris@49 199 template<typename eT>
Chris@49 200 inline static bool solve_tr(Mat<eT>& out, const Mat<eT>& A, const Mat<eT>& B, const uword layout);
Chris@49 201
Chris@49 202
Chris@49 203 //
Chris@49 204 // Schur decomposition
Chris@49 205
Chris@49 206 template<typename eT>
Chris@49 207 inline static bool schur_dec(Mat<eT>& Z, Mat<eT>& T, const Mat<eT>& A);
Chris@49 208
Chris@49 209 template<typename cT>
Chris@49 210 inline static bool schur_dec(Mat<std::complex<cT> >& Z, Mat<std::complex<cT> >& T, const Mat<std::complex<cT> >& A);
Chris@49 211
Chris@49 212
Chris@49 213 //
Chris@49 214 // syl (solution of the Sylvester equation AX + XB = C)
Chris@49 215
Chris@49 216 template<typename eT>
Chris@49 217 inline static bool syl(Mat<eT>& X, const Mat<eT>& A, const Mat<eT>& B, const Mat<eT>& C);
Chris@49 218
Chris@49 219
Chris@49 220 //
Chris@49 221 // lyap (solution of the continuous Lyapunov equation AX + XA^H + Q = 0)
Chris@49 222
Chris@49 223 template<typename eT>
Chris@49 224 inline static bool lyap(Mat<eT>& X, const Mat<eT>& A, const Mat<eT>& Q);
Chris@49 225
Chris@49 226
Chris@49 227 //
Chris@49 228 // dlyap (solution of the discrete Lyapunov equation AXA^H - X + Q = 0)
Chris@49 229
Chris@49 230 template<typename eT>
Chris@49 231 inline static bool dlyap(Mat<eT>& X, const Mat<eT>& A, const Mat<eT>& Q);
Chris@49 232 };
Chris@49 233
Chris@49 234
Chris@49 235 //! @}