00001
00002
00003
00006
00007
00008
00009 #ifndef NEWMATAP_LIB
00010 #define NEWMATAP_LIB 0
00011
00012 #include "newmat.h"
00013
00014 #ifdef use_namespace
00015 namespace NEWMAT {
00016 #endif
00017
00018
00019
00020
00021
00022 void QRZT(Matrix&, LowerTriangularMatrix&);
00023
00024 void QRZT(const Matrix&, Matrix&, Matrix&);
00025
00026 void QRZ(Matrix&, UpperTriangularMatrix&);
00027
00028 void QRZ(const Matrix&, Matrix&, Matrix&);
00029
00030 inline void HHDecompose(Matrix& X, LowerTriangularMatrix& L)
00031 { QRZT(X,L); }
00032
00033 inline void HHDecompose(const Matrix& X, Matrix& Y, Matrix& M)
00034 { QRZT(X, Y, M); }
00035
00036 void updateQRZT(Matrix& X, LowerTriangularMatrix& L);
00037
00038 void updateQRZ(Matrix& X, UpperTriangularMatrix& U);
00039
00040 inline void UpdateQRZT(Matrix& X, LowerTriangularMatrix& L)
00041 { updateQRZT(X, L); }
00042
00043 inline void UpdateQRZ(Matrix& X, UpperTriangularMatrix& U)
00044 { updateQRZ(X, U); }
00045
00046
00047
00048
00049
00050 void extend_orthonormal(Matrix& A, int n);
00051
00052
00053 ReturnMatrix Cholesky(const SymmetricMatrix&);
00054
00055 ReturnMatrix Cholesky(const SymmetricBandMatrix&);
00056
00057
00058
00059
00060 void update_Cholesky(UpperTriangularMatrix& chol, RowVector x);
00061 inline void UpdateCholesky(UpperTriangularMatrix& chol, const RowVector& x)
00062 { update_Cholesky(chol, x); }
00063
00064
00065
00066 void downdate_Cholesky(UpperTriangularMatrix &chol, RowVector x);
00067 inline void DowndateCholesky(UpperTriangularMatrix &chol, const RowVector& x)
00068 { downdate_Cholesky(chol, x); }
00069
00070
00071
00072
00073 void right_circular_update_Cholesky(UpperTriangularMatrix &chol, int k, int l);
00074 inline void RightCircularUpdateCholesky(UpperTriangularMatrix &chol,
00075 int k, int l) { right_circular_update_Cholesky(chol, k, l); }
00076
00077
00078
00079
00080 void left_circular_update_Cholesky(UpperTriangularMatrix &chol, int k, int l);
00081 inline void LeftCircularUpdateCholesky(UpperTriangularMatrix &chol,
00082 int k, int l) { left_circular_update_Cholesky(chol, k, l); }
00083
00084
00085 void SVD(const Matrix&, DiagonalMatrix&, Matrix&, Matrix&,
00086 bool=true, bool=true);
00087
00088 void SVD(const Matrix&, DiagonalMatrix&);
00089
00090 inline void SVD(const Matrix& A, DiagonalMatrix& D, Matrix& U,
00091 bool withU = true) { SVD(A, D, U, U, withU, false); }
00092
00093 void SortSV(DiagonalMatrix& D, Matrix& U, bool ascending = false);
00094
00095 void SortSV(DiagonalMatrix& D, Matrix& U, Matrix& V, bool ascending = false);
00096
00097 void Jacobi(const SymmetricMatrix&, DiagonalMatrix&);
00098
00099 void Jacobi(const SymmetricMatrix&, DiagonalMatrix&, SymmetricMatrix&);
00100
00101 void Jacobi(const SymmetricMatrix&, DiagonalMatrix&, Matrix&);
00102
00103 void Jacobi(const SymmetricMatrix&, DiagonalMatrix&, SymmetricMatrix&,
00104 Matrix&, bool=true);
00105
00106 void eigenvalues(const SymmetricMatrix&, DiagonalMatrix&);
00107
00108 void eigenvalues(const SymmetricMatrix&, DiagonalMatrix&, SymmetricMatrix&);
00109
00110 void eigenvalues(const SymmetricMatrix&, DiagonalMatrix&, Matrix&);
00111
00112 inline void EigenValues(const SymmetricMatrix& A, DiagonalMatrix& D)
00113 { eigenvalues(A, D); }
00114
00115 inline void EigenValues(const SymmetricMatrix& A, DiagonalMatrix& D,
00116 SymmetricMatrix& S) { eigenvalues(A, D, S); }
00117
00118 inline void EigenValues(const SymmetricMatrix& A, DiagonalMatrix& D, Matrix& V)
00119 { eigenvalues(A, D, V); }
00120
00121 class SymmetricEigenAnalysis
00122
00123 {
00124 public:
00125 SymmetricEigenAnalysis(const SymmetricMatrix&);
00126 private:
00127 DiagonalMatrix diag;
00128 DiagonalMatrix offdiag;
00129 SymmetricMatrix backtransform;
00130 FREE_CHECK(SymmetricEigenAnalysis)
00131 };
00132
00133 void sort_ascending(GeneralMatrix&);
00134
00135 void sort_descending(GeneralMatrix&);
00136
00137 inline void SortAscending(GeneralMatrix& gm) { sort_ascending(gm); }
00138
00139 inline void SortDescending(GeneralMatrix& gm) { sort_descending(gm); }
00140
00142 class FFT_Controller
00143 {
00144 public:
00145 static bool OnlyOldFFT;
00146 static bool ar_1d_ft (int PTS, Real* X, Real *Y);
00147 static bool CanFactor(int PTS);
00148 };
00149
00150 void FFT(const ColumnVector&, const ColumnVector&,
00151 ColumnVector&, ColumnVector&);
00152
00153 void FFTI(const ColumnVector&, const ColumnVector&,
00154 ColumnVector&, ColumnVector&);
00155
00156 void RealFFT(const ColumnVector&, ColumnVector&, ColumnVector&);
00157
00158 void RealFFTI(const ColumnVector&, const ColumnVector&, ColumnVector&);
00159
00160 void DCT_II(const ColumnVector&, ColumnVector&);
00161
00162 void DCT_II_inverse(const ColumnVector&, ColumnVector&);
00163
00164 void DST_II(const ColumnVector&, ColumnVector&);
00165
00166 void DST_II_inverse(const ColumnVector&, ColumnVector&);
00167
00168 void DCT(const ColumnVector&, ColumnVector&);
00169
00170 void DCT_inverse(const ColumnVector&, ColumnVector&);
00171
00172 void DST(const ColumnVector&, ColumnVector&);
00173
00174 void DST_inverse(const ColumnVector&, ColumnVector&);
00175
00176 void FFT2(const Matrix& U, const Matrix& V, Matrix& X, Matrix& Y);
00177
00178 void FFT2I(const Matrix& U, const Matrix& V, Matrix& X, Matrix& Y);
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195 class MultiRadixCounter
00196 {
00197 const SimpleIntArray& Radix;
00198
00199
00200 SimpleIntArray& Value;
00201 const int n;
00202 int reverse;
00203 int product;
00204 int counter;
00205 bool finish;
00206 public:
00207 MultiRadixCounter(int nx, const SimpleIntArray& rx,
00208 SimpleIntArray& vx);
00209 void operator++();
00210 bool Swap() const { return reverse < counter; }
00211 bool Finish() const { return finish; }
00212 int Reverse() const { return reverse; }
00213 int Counter() const { return counter; }
00214 };
00215
00216
00217 ReturnMatrix Helmert(int n, bool full=false);
00218 ReturnMatrix Helmert(const ColumnVector& X, bool full=false);
00219 ReturnMatrix Helmert(int n, int j, bool full=false);
00220 ReturnMatrix Helmert_transpose(const ColumnVector& Y, bool full=false);
00221 Real Helmert_transpose(const ColumnVector& Y, int j, bool full=false);
00222 ReturnMatrix Helmert(const Matrix& X, bool full=false);
00223 ReturnMatrix Helmert_transpose(const Matrix& Y, bool full=false);
00224
00225
00226
00227
00228 #ifdef use_namespace
00229 }
00230 #endif
00231
00232
00233
00234 #endif
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00249
00250