Mercurial > hg > octave-lyh
changeset 1992:5668c00f9c7a
[project @ 1996-03-03 00:40:53 by jwe]
author | jwe |
---|---|
date | Sun, 03 Mar 1996 00:43:53 +0000 |
parents | 413f6a81868f |
children | 1b57120c997b |
files | liboctave/CmplxLU.cc liboctave/CmplxLU.h liboctave/MArray.h liboctave/MArray2.h liboctave/MDiagArray2.h liboctave/dbleLU.cc liboctave/dbleLU.h |
diffstat | 7 files changed, 49 insertions(+), 127 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/CmplxLU.cc +++ b/liboctave/CmplxLU.cc @@ -34,6 +34,15 @@ #include "lo-error.h" #include "mx-inlines.cc" +// Instantiate the base LU class for the types we need. + +#include <base-lu.h> +#include <base-lu.cc> + +template class base_lu <ComplexMatrix, Matrix>; + +// Define the constructor for this particular derivation. + extern "C" { int F77_FCN (zgesv, ZGESV) (const int&, const int&, Complex*, @@ -54,12 +63,11 @@ int n = a_nr; - Array<int> ipvt (n); - + ipvt.resize (n); int *pipvt = ipvt.fortran_vec (); - ComplexMatrix A_fact = a; - Complex *tmp_data = A_fact.fortran_vec (); + a_fact = a; + Complex *tmp_data = a_fact.fortran_vec (); int info = 0; Complex *dummy = 0; @@ -69,43 +77,7 @@ if (f77_exception_encountered) (*current_liboctave_error_handler) ("unrecoverable error in zgesv"); else - { - Array<int> pvt (n); - - for (int i = 0; i < n; i++) - { - ipvt.elem (i) -= 1; - pvt.elem (i) = i; - } - - for (int i = 0; i < n - 1; i++) - { - int k = ipvt.elem (i); - - if (k != i) - { - int tmp = pvt.elem (k); - pvt.elem (k) = pvt.elem (i); - pvt.elem (i)= tmp; - } - } - - l.resize (n, n, 0.0); - u.resize (n, n, 0.0); - p.resize (n, n, 0.0); - - for (int i = 0; i < n; i++) - { - p.elem (i, pvt.elem (i)) = 1.0; - - l.elem (i, i) = 1.0; - for (int j = 0; j < i; j++) - l.elem (i, j) = A_fact.elem (i, j); - - for (int j = i; j < n; j++) - u.elem (i, j) = A_fact.elem (i, j); - } - } + ipvt -= 1; } /*
--- a/liboctave/CmplxLU.h +++ b/liboctave/CmplxLU.h @@ -28,47 +28,30 @@ #pragma interface #endif -class ostream; - +#include "base-lu.h" #include "dMatrix.h" #include "CMatrix.h" class -ComplexLU +ComplexLU : public base_lu <ComplexMatrix, Matrix> { public: - ComplexLU (void) : l (), u (), p () { } + ComplexLU (void) : base_lu <ComplexMatrix, Matrix> () { } ComplexLU (const ComplexMatrix& a); - ComplexLU (const ComplexLU& a) : l (a.l), u (a.u), p (a.p) { } + ComplexLU (const ComplexLU& a) : base_lu <ComplexMatrix, Matrix> (a) { } ComplexLU& operator = (const ComplexLU& a) { if (this != &a) - { - l = a.l; - u = a.u; - p = a.p; - } + base_lu <ComplexMatrix, Matrix> :: operator = (a); + return *this; } ~ComplexLU (void) { } - - ComplexMatrix L (void) const { return l; } - ComplexMatrix U (void) const { return u; } - - Matrix P (void) const { return p; } - - friend ostream& operator << (ostream& os, const ComplexLU& a); - -private: - - ComplexMatrix l; - ComplexMatrix u; - Matrix p; }; #endif
--- a/liboctave/MArray.h +++ b/liboctave/MArray.h @@ -92,6 +92,10 @@ }; #define INSTANTIATE_MARRAY_FRIENDS(T) \ + template MArray<T>& operator += (MArray<T>& a, const T& s); \ + template MArray<T>& operator -= (MArray<T>& a, const T& s); \ + template MArray<T>& operator += (MArray<T>& a, const MArray<T>& b); \ + template MArray<T>& operator -= (MArray<T>& a, const MArray<T>& b); \ template MArray<T> operator + (const MArray<T>& a, const T& s); \ template MArray<T> operator - (const MArray<T>& a, const T& s); \ template MArray<T> operator * (const MArray<T>& a, const T& s); \
--- a/liboctave/MArray2.h +++ b/liboctave/MArray2.h @@ -91,6 +91,10 @@ }; #define INSTANTIATE_MARRAY2_FRIENDS(T) \ + template MArray2<T>& operator += (MArray2<T>& a, const T& s); \ + template MArray2<T>& operator -= (MArray2<T>& a, const T& s); \ + template MArray2<T>& operator += (MArray2<T>& a, const MArray2<T>& b); \ + template MArray2<T>& operator -= (MArray2<T>& a, const MArray2<T>& b); \ template MArray2<T> operator + (const MArray2<T>& a, const T& s); \ template MArray2<T> operator - (const MArray2<T>& a, const T& s); \ template MArray2<T> operator * (const MArray2<T>& a, const T& s); \
--- a/liboctave/MDiagArray2.h +++ b/liboctave/MDiagArray2.h @@ -102,6 +102,8 @@ }; #define INSTANTIATE_MDIAGARRAY_FRIENDS(T) \ + template MDiagArray2<T>& operator += (MDiagArray2<T>& a, const MDiagArray2<T>& b); \ + template MDiagArray2<T>& operator -= (MDiagArray2<T>& a, const MDiagArray2<T>& b); \ template MDiagArray2<T> operator * (const MDiagArray2<T>& a, const T& s); \ template MDiagArray2<T> operator / (const MDiagArray2<T>& a, const T& s); \ template MDiagArray2<T> operator * (const T& s, const MDiagArray2<T>& a); \
--- a/liboctave/dbleLU.cc +++ b/liboctave/dbleLU.cc @@ -34,6 +34,15 @@ #include "lo-error.h" #include "mx-inlines.cc" +// Instantiate the base LU class for the types we need. + +#include <base-lu.h> +#include <base-lu.cc> + +template class base_lu <Matrix, Matrix>; + +// Define the constructor for this particular derivation. + extern "C" { int F77_FCN (dgesv, DGESV) (const int&, const int&, double*, @@ -54,11 +63,11 @@ int n = a_nr; - Array<int> ipvt (n); + ipvt.resize (n); int *pipvt = ipvt.fortran_vec (); - Matrix A_fact = a; - double *tmp_data = A_fact.fortran_vec (); + a_fact = a; + double *tmp_data = a_fact.fortran_vec (); int info = 0; double dummy = 0; @@ -68,42 +77,7 @@ if (f77_exception_encountered) (*current_liboctave_error_handler) ("unrecoverable error in dgesv"); else - { - Array<int> pvt (n); - - for (int i = 0; i < n; i++) - { - ipvt.elem (i) -= 1; - pvt.elem (i) = i; - } - - for (int i = 0; i < n - 1; i++) - { - int k = ipvt.elem (i); - if (k != i) - { - int tmp = pvt.elem (k); - pvt.elem (k) = pvt.elem (i); - pvt.elem (i) = tmp; - } - } - - l.resize (n, n, 0.0); - u.resize (n, n, 0.0); - p.resize (n, n, 0.0); - - for (int i = 0; i < n; i++) - { - p.elem (i, pvt.elem (i)) = 1.0; - - l.elem (i, i) = 1.0; - for (int j = 0; j < i; j++) - l.elem (i, j) = A_fact.elem (i, j); - - for (int j = i; j < n; j++) - u.elem (i, j) = A_fact.elem (i, j); - } - } + ipvt -= 1; } /*
--- a/liboctave/dbleLU.h +++ b/liboctave/dbleLU.h @@ -28,46 +28,29 @@ #pragma interface #endif -class ostream; - +#include "base-lu.h" #include "dMatrix.h" -class LU +class +LU : public base_lu <Matrix, Matrix> { public: - LU (void) : l (), u (), p () { } + LU (void) : base_lu <Matrix, Matrix> () { } LU (const Matrix& a); - LU (const LU& a) : l (a.l), u (a.u), p (a.p) { } + LU (const LU& a) : base_lu <Matrix, Matrix> (a) { } LU& operator = (const LU& a) { if (this != &a) - { - l = a.l; - u = a.u; - p = a.p; - } + base_lu <Matrix, Matrix> :: operator = (a); + return *this; } ~LU (void) { } - - Matrix L (void) const { return l; } - - Matrix U (void) const { return u; } - - Matrix P (void) const { return p; } - - friend ostream& operator << (ostream& os, const LU& a); - -private: - - Matrix l; - Matrix u; - Matrix p; }; #endif