00001
00003 inline void dgematrix::clear()
00004 {
00005 #ifdef CPPL_VERBOSE
00006 std::cerr << "# [MARK] dgematrix::clear()"
00007 << std::endl;
00008 #endif//CPPL_VERBOSE
00009
00010 #ifdef CPPL_DEBUG
00011 std::cerr << "# [NOTE] dgematrix::clear() "
00012 << " An array at " << Array
00013 << " is going to be cleared." << std::endl;
00014 #endif//CPPL_DEBUG
00015
00016 M =0;
00017 N =0;
00018 delete [] Array;
00019 Array =NULL;
00020 delete [] Darray;
00021 Darray =NULL;
00022 }
00023
00024
00026 inline void dgematrix::zero()
00027 {
00028 #ifdef CPPL_VERBOSE
00029 std::cerr << "# [MARK] dgematrix::zero()"
00030 << std::endl;
00031 #endif//CPPL_VERBOSE
00032
00033 for(long i=0; i<M*N; i++){ Array[i] =0.0; }
00034 }
00035
00036
00038 inline void dgematrix::identity()
00039 {
00040 #ifdef CPPL_VERBOSE
00041 std::cerr << "# [MARK] dgematrix::identity()"
00042 << std::endl;
00043 #endif//CPPL_VERBOSE
00044
00045 #ifdef CPPL_DEBUG
00046 if(M!=N){
00047 std::cerr << "[ERROR] dgematrix::identity()" << std::endl
00048 << "Only square matrix can be a identity matrix." << std::endl
00049 << "The matrix size was " << M << "x" << N << "." << std::endl;
00050 exit(1);
00051 }
00052 #endif//CPPL_DEBUG
00053
00054 for(long i=0; i<M*N; i++){ Array[i] =0.0; }
00055 for(long i=0; i<M; i++){ operator()(i,i) =1.0; }
00056 }
00057
00058
00060 inline void dgematrix::chsign()
00061 {
00062 #ifdef CPPL_VERBOSE
00063 std::cerr << "# [MARK] dgematrix::chsign()"
00064 << std::endl;
00065 #endif//CPPL_VERBOSE
00066
00067 for(long i=0; i<M*N; i++){ Array[i] =-Array[i]; }
00068 }
00069
00070
00072 inline void dgematrix::copy(const dgematrix& mat)
00073 {
00074 #ifdef CPPL_VERBOSE
00075 std::cerr << "# [MARK] dgematrix::copy(const dgematrix&)"
00076 << std::endl;
00077 #endif//CPPL_VERBOSE
00078
00079 #ifdef CPPL_DEBUG
00080 std::cerr << "# [NOTE] dgematrix::copy(const dgematrix&) "
00081 << "A dgematrix at " << Array << " is going to be deleted.";
00082 #endif//CPPL_DEBUG
00083
00084 M =mat.M;
00085 N =mat.N;
00086 delete [] Array;
00087 Array =new double[mat.M*mat.N];
00088 delete [] Darray;
00089 Darray =new double*[N];
00090 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00091
00092 dcopy_(mat.M*mat.N, mat.Array, 1, Array, 1);
00093
00094 #ifdef CPPL_DEBUG
00095 std::cerr << " Then, a COPY of a dgematrix has been cleated at "
00096 << Array << "." << std::endl;
00097 #endif//CPPL_DEBUG
00098 }
00099
00100
00103 inline void dgematrix::shallow_copy(const _dgematrix& mat)
00104 {
00105 #ifdef CPPL_VERBOSE
00106 std::cerr << "# [MARK] dgematrix::shallow_copy(const _dgematrix&)"
00107 << std::endl;
00108 #endif//CPPL_VERBOSE
00109
00110 #ifdef CPPL_DEBUG
00111 std::cerr << "# [NOTE] dgematrix:shallow_copy(const _dgematrix&) "
00112 << "A dgematrix at " << Array << " is going to be deleted, "
00113 << "and point at " << mat.Array << " instead." << std::endl;
00114 #endif//CPPL_DEBUG
00115
00116 M =mat.M;
00117 N =mat.N;
00118 delete [] Array;
00119 Array =mat.Array;
00120 delete [] Darray;
00121 Darray =mat.Darray;
00122 }
00123
00124
00126 inline void dgematrix::resize(const long& _m, const long& _n)
00127 {
00128 #ifdef CPPL_VERBOSE
00129 std::cerr << "# [MARK] dgematrix::resize(const long&, const long&)"
00130 << std::endl;
00131 #endif//CPPL_VERBOSE
00132
00133 #ifdef CPPL_DEBUG
00134 if( _m<0 || _n<0 ){
00135 std::cerr << "[ERROR] dgematrix::resize(const long&, const long&)"
00136 << std::endl
00137 << "Matrix sizes must be positive integers." << std::endl
00138 << "Your input was (" << _m << "," << _n << ")." << std::endl;
00139 exit(1);
00140 }
00141 #endif//CPPL_DEBUG
00142
00143 M =_m;
00144 N =_n;
00145 delete [] Array;
00146 Array =new double[M*N];
00147 delete [] Darray;
00148 Darray =new double*[N];
00149 for(int i=0; i<N; i++){ Darray[i] =&Array[i*M]; }
00150 }
00151
00152
00154 inline void swap(dgematrix& A, dgematrix& B)
00155 {
00156 #ifdef CPPL_VERBOSE
00157 std::cerr << "# [MARK] swap(dgematrix&, dgematrix&)"
00158 << std::endl;
00159 #endif//CPPL_VERBOSE
00160
00161 long A_m(A.M), A_n(A.N);
00162 double* A_array(A.Array);
00163 double** A_darray = A.Darray;
00164 A.M=B.M;
00165 A.N=B.N;
00166 A.Array=B.Array;
00167 A.Darray=B.Darray;
00168 B.M=A_m;
00169 B.N=A_n;
00170 B.Array=A_array;
00171 B.Darray=A_darray;
00172 }
00173
00174
00176 inline _dgematrix _(dgematrix& mat)
00177 {
00178 #ifdef CPPL_VERBOSE
00179 std::cerr << "# [MARK] _(dgematrix&)"
00180 << std::endl;
00181 #endif//CPPL_VERBOSE
00182
00183 _dgematrix newmat;
00184
00185 newmat.M =mat.M;
00186 newmat.N =mat.N;
00187 newmat.Array =mat.Array;
00188 newmat.Darray =mat.Darray;
00189
00190 mat.M =0;
00191 mat.N =0;
00192 mat.Array =NULL;
00193 mat.Darray =NULL;
00194
00195 return newmat;
00196 }