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