55 SetMatrix(iRows,iCols,afEntry);
63 SetMatrix(iRows,iCols,aafMatrix);
95 for (
int iRow = 0; iRow <
m_iRows; iRow++)
101 template <
class Real>
108 template <
class Real>
112 if (iRows > 0 && iCols > 0)
129 template <
class Real>
136 template <
class Real>
142 template <
class Real>
148 template <
class Real>
154 template <
class Real>
160 template <
class Real>
166 template <
class Real>
173 template <
class Real>
180 template <
class Real>
186 template <
class Real>
193 template <
class Real>
202 template <
class Real>
206 for (
int iCol = 0; iCol <
m_iCols; iCol++)
212 template <
class Real>
217 for (
int iCol = 0; iCol <
m_iCols; iCol++)
224 template <
class Real>
228 for (
int iRow = 0; iRow <
m_iRows; iRow++)
234 template <
class Real>
239 for (
int iRow = 0; iRow <
m_iRows; iRow++)
246 template <
class Real>
250 if (iRows > 0 && iCols > 0)
269 template <
class Real>
273 if (iRows > 0 && iCols > 0)
279 for (
int iRow = 0; iRow <
m_iRows; iRow++)
281 for (
int iCol = 0; iCol <
m_iCols; iCol++)
283 m_aafEntry[iRow][iCol] = aafEntry[iRow][iCol];
297 template <
class Real>
300 for (
int iRow = 0, i = 0; iRow <
m_iRows; iRow++)
302 for (
int iCol = 0; iCol <
m_iCols; iCol++)
309 template <
class Real>
322 for (
int iRow = 0; iRow <
m_iRows; iRow++)
324 for (
int iCol = 0; iCol <
m_iCols; iCol++)
342 template <
class Real>
348 template <
class Real>
354 template <
class Real>
360 template <
class Real>
366 template <
class Real>
372 template <
class Real>
378 template <
class Real>
384 template <
class Real>
395 template <
class Real>
406 template <
class Real>
412 for (
int iRow = 0; iRow < kProd.
m_iRows; iRow++)
414 for (
int iCol = 0; iCol < kProd.
m_iCols; iCol++)
416 for (
int iMid = 0; iMid <
m_iCols; iMid++)
426 template <
class Real>
437 template <
class Real>
443 if (fScalar != (Real)0.0)
445 Real fInvScalar = ((Real)1.0)/fScalar;
462 template <
class Real>
473 template <
class Real>
477 const Real* afMEntry = rkM;
478 Real* afPEntry = kProd;
481 afPEntry[i] = fScalar*afMEntry[i];
486 template <
class Real>
496 template <
class Real>
506 template <
class Real>
516 template <
class Real>
521 if (fScalar != (Real)0.0)
523 Real fInvScalar = ((Real)1.0)/fScalar;
540 template <
class Real>
544 for (
int iRow = 0; iRow <
m_iRows; iRow++)
546 for (
int iCol = 0; iCol <
m_iCols; iCol++)
554 template <
class Real>
560 for (
int iRow = 0; iRow < kProd.
m_iRows; iRow++)
562 for (
int iCol = 0; iCol < kProd.
m_iCols; iCol++)
564 for (
int iMid = 0; iMid <
m_iRows; iMid++)
574 template <
class Real>
580 for (
int iRow = 0; iRow < kProd.
m_iRows; iRow++)
582 for (
int iCol = 0; iCol < kProd.
m_iCols; iCol++)
584 for (
int iMid = 0; iMid <
m_iCols; iMid++)
594 template <
class Real>
599 for (
int iRow = 0; iRow <
m_iRows; iRow++)
601 for (
int iCol = 0; iCol <
m_iCols; iCol++)
603 kProd[iRow] +=
m_aafEntry[iRow][iCol]*rkV[iCol];
610 template <
class Real>
615 Real* afPEntry = kProd;
616 for (
int iCol = 0; iCol < rkM.
GetColumns(); iCol++)
618 for (
int iRow = 0; iRow < rkM.
GetRows(); iRow++)
620 afPEntry[iCol] += rkV[iRow]*rkM[iRow][iCol];
626 template <
class Real>
631 return rkU.
Dot((*
this)*rkV);
634 template <
class Real>
646 int* aiColIndex =
new int[iSize];
647 int* aiRowIndex =
new int[iSize];
648 bool* abPivoted =
new bool[iSize];
649 memset(abPivoted,0,iSize*
sizeof(
bool));
651 int i1, i2, iRow = 0, iCol = 0;
655 for (
int i0 = 0; i0 < iSize; i0++)
658 Real fMax = (Real)0.0;
659 for (i1 = 0; i1 < iSize; i1++)
663 for (i2 = 0; i2 < iSize; i2++)
679 if (fMax == (Real)0.0)
688 abPivoted[iCol] =
true;
697 aiRowIndex[i0] = iRow;
698 aiColIndex[i0] = iCol;
701 Real fInv = ((Real)1.0)/rkInverse[iCol][iCol];
702 rkInverse[iCol][iCol] = (Real)1.0;
703 for (i2 = 0; i2 < iSize; i2++)
705 rkInverse[iCol][i2] *= fInv;
709 for (i1 = 0; i1 < iSize; i1++)
713 fSave = rkInverse[i1][iCol];
714 rkInverse[i1][iCol] = (Real)0.0;
715 for (i2 = 0; i2 < iSize; i2++)
717 rkInverse[i1][i2] -= rkInverse[iCol][i2]*fSave;
724 for (i1 = iSize-1; i1 >= 0; i1--)
726 if (aiRowIndex[i1] != aiColIndex[i1])
728 for (i2 = 0; i2 < iSize; i2++)
730 fSave = rkInverse[i2][aiRowIndex[i1]];
731 rkInverse[i2][aiRowIndex[i1]] =
732 rkInverse[i2][aiColIndex[i1]];
733 rkInverse[i2][aiColIndex[i1]] = fSave;
746 template <
class Real>
758 template <
class Real>
767 template <
class Real>
773 template <
class Real>
782 size_t uiSize =
m_iSize*
sizeof(Real);
788 uiSize = (
m_iSize-1-i)*
sizeof(Real);
794 uiSize = (
m_iSize-1-i)*
sizeof(Real);
801 template <
class Real>
807 template <
class Real>
813 template <
class Real>
819 template <
class Real>
825 template <
class Real>
831 template <
class Real>
838 template <
class Real>
849 template <
class Real>
860 template <
class Real>
867 template <
class Real>
878 template <
class Real>
889 template <
class Real>
894 int iBand = iCol - iRow;
902 else if ( iBand < 0 )
915 static Real s_fDummy = (Real)0.0;
919 template <
class Real>
924 int iBand = iCol - iRow;
932 else if ( iBand < 0 )
948 template <
class Real>
967 template <
class Real>
980 memset(
m_aafLBand[i],0,(m_iSize-1-i)*
sizeof(Real));
985 memset(
m_aafUBand[i],0,(m_iSize-1-i)*
sizeof(Real));
989 template <
class Real>
1030 template <
class Real>
void SetRow(int iRow, const moDVector< Real > &rkV)
moDMatrix TransposeTimes(const moDMatrix &rkM) const
void GetSize(int &riRows, int &riCols) const
moDVector< Real > GetRow(int iRow) const
moDBandedMatrix(int iSize, int iLBands, int iUBands)
void SetMatrix(int iRows, int iCols, const Real *afEntry)
Real operator()(int iRow, int iCol) const
moDMatrix & operator+=(const moDMatrix &rkM)
moDMatrix TimesTranspose(const moDMatrix &rkM) const
bool operator<=(const moDMatrix &rkM) const
void GetColumnMajor(Real *afCMajor) const
void SetSize(int iRows, int iCols)
int CompareArrays(const moDMatrix &rkM) const
moDMatrix operator/(Real fScalar) const
Clase base abstracta de donde deben derivar los objetos [virtual pura].
moDBandedMatrix & operator=(const moDBandedMatrix &rkM)
int GetUBandMax(int i) const
bool operator>=(const moDMatrix &rkM) const
moDMatrix & operator*=(Real fScalar)
bool operator==(const moDMatrix &rkM) const
moDMatrix(int iRows=0, int iCols=0)
void Allocate(bool bSetToZero)
moDMatrix operator*(const moDMatrix &rkM) const
moDMatrix & operator/=(Real fScalar)
bool GetInverse(moDMatrix< Real > &rkInverse) const
moDMatrix operator-() const
moDVector< Real > GetColumn(int iCol) const
moDMatrix & operator=(const moDMatrix &rkM)
int GetLBandMax(int i) const
Real QForm(const moDVector< Real > &rkU, const moDVector< Real > &rkV) const
void SwapRows(int iRow0, int iRow1)
bool operator<(const moDMatrix &rkM) const
moDMatrix operator+(const moDMatrix &rkM) const
static Real FAbs(Real fValue)
moDMatrix Transpose() const
bool operator>(const moDMatrix &rkM) const
moDMatrix & operator-=(const moDMatrix &rkM)
Real & operator()(int iRow, int iCol)
Real Dot(const moDVector &rkV) const
const Real * operator[](int iRow) const
bool operator!=(const moDMatrix &rkM) const
void SetColumn(int iCol, const moDVector< Real > &rkV)