qavrg 0.0.28
Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes
QavrgMatrix Class Reference

#include <qavrgmatrix.h>

List of all members.

Public Member Functions

 QavrgMatrix (int nr, int nc, QObject *parent=0)
void fill (double val)
void resize (int nr, int nc)
int size (int indx)
double & operator() (int r, int c)
QavrgMatrixoperator= (const QavrgMatrix &m)
void dump ()

Static Public Member Functions

static void test ()
static void gaussj (QavrgMatrix &a, QVector< double > &b)

Private Attributes

QVector< double > m_Matrix
int m_NRows
int m_NCols
double m_Dummy

Static Private Attributes

static int m_Errors = 0

Detailed Description

Definition at line 7 of file qavrgmatrix.h.


Constructor & Destructor Documentation

QavrgMatrix::QavrgMatrix ( int  nr,
int  nc,
QObject *  parent = 0 
)

Definition at line 8 of file qavrgmatrix.cpp.

  : QObject(parent),
  m_Matrix(nr*nc),
  m_NRows(nr),
  m_NCols(nc)
{
}

Member Function Documentation

void QavrgMatrix::dump ( )

Definition at line 53 of file qavrgmatrix.cpp.

References m_NCols, and m_NRows.

Referenced by test().

{
  printf("QavrgMatrix = (%d,%d) {\n", m_NRows, m_NCols);

  for (int i=0; i<m_NRows; i++) {
    if (i) printf(",\n");
    printf(" { ");
    for (int j=0; j<m_NCols; j++) {
      if (j) printf(",\t");
      printf("%g",operator()(i,j));
    }
    printf(" }");
  }

  printf("\n}\n");
}
void QavrgMatrix::fill ( double  val)

Definition at line 48 of file qavrgmatrix.cpp.

References m_Matrix.

{
  m_Matrix.fill(val);
}
void QavrgMatrix::gaussj ( QavrgMatrix a,
QVector< double > &  b 
) [static]

Definition at line 85 of file qavrgmatrix.cpp.

References m_Errors, size(), and SWAP.

Referenced by QavrgFitter::performCalculation().

{
  int n1= a.size(1);
  int n2= a.size(2);
  int n = b.size();

  if (n == n1 && n == n2) {
    int irow, icol;
    QVector<int> indxc(n), indxr(n), ipiv(n);
    ipiv.fill(-1);

    for (int i=0; i<n; i++) {
      double big=0;

      for (int j=0; j<n; j++) {
        if (ipiv[j] != 0) {
          for (int k=0; k<n; k++) {
            if (ipiv[k] == -1) {
              if (fabs(a(j,k)) >= big) {
                big = fabs(a(j,k));
                irow=j;
                icol=k;
              }
            } else if (ipiv[k] > 0) {
              if (m_Errors < 10) {
                m_Errors++;
                printf("gaussj: Singular Matrix-1\n");
              }

              return;
            }
          }
        }
      }

      ++(ipiv[icol]);
      
      if (irow != icol) {
        for (int l=0; l<n; l++) {
          SWAP(a(irow,l),a(icol,l));
        }
        SWAP(b[irow],b[icol]);
      }

      indxr[i]=irow;
      indxc[i]=icol;

      if (a(icol,icol) == 0.0) {
        if (m_Errors < 10) {
          m_Errors++;
          printf("gaussj: Singular Matrix-2\n");
        }

        return;
      }

      double pivinv = 1.0/a(icol,icol);
      a(icol,icol) = 1.0;

      for (int l=0; l<n; l++) {
        a(icol,l) *= pivinv;
      }
      b[icol] *= pivinv;

      for (int ll=0; ll<n; ll++) {
        if (ll != icol) {
          double dum = a(ll,icol);
          a(ll,icol) = 0.0;

          for (int l=0; l<n; l++) {
            a(ll,l) -= a(icol,l)*dum;
          }

          b[ll] -= b[icol]*dum;
        }
      }
    }

    for (int l=n-1; l>=0; l--) {
      if (indxr[l] != indxc[l]) {
        for (int k=0; k<n; k++) {
          SWAP(a(k,indxr[l]), a(k,indxc[l]));
        }
      }
    }
  }
}
double & QavrgMatrix::operator() ( int  r,
int  c 
)

Definition at line 24 of file qavrgmatrix.cpp.

References m_Dummy, m_Matrix, m_NCols, and m_NRows.

{
  if (r >= 0 && r < m_NRows && c >= 0 && c < m_NCols) {
    return m_Matrix[r*m_NCols+c];
  } else {
    printf("Array access (%d,%d) outside bounds (%d,%d)\n", r,c, m_NRows, m_NCols);
    return m_Dummy;
  }
}
QavrgMatrix & QavrgMatrix::operator= ( const QavrgMatrix m)

Definition at line 41 of file qavrgmatrix.cpp.

References m_Matrix.

                                   {
  m_Matrix = m.m_Matrix;

  return *this;
}
void QavrgMatrix::resize ( int  nr,
int  nc 
)

Definition at line 16 of file qavrgmatrix.cpp.

References m_Matrix, m_NCols, and m_NRows.

{
  m_NRows = nr;
  m_NCols = nc;

  m_Matrix.resize(nr*nc);
}
int QavrgMatrix::size ( int  indx)

Definition at line 34 of file qavrgmatrix.cpp.

References m_NCols, and m_NRows.

Referenced by gaussj().

{
  if (d==1) return m_NRows;
  if (d==2) return m_NCols;
  return 0;
}
void QavrgMatrix::test ( ) [static]

Definition at line 70 of file qavrgmatrix.cpp.

References dump().

{
  QavrgMatrix m(5,5);

  for (int i=0; i<5; i++) {
    for (int j=0; j<5; j++) {
      m(i,j) = 10*i+j;
    }
  }

  m.dump();
}

Member Data Documentation

double QavrgMatrix::m_Dummy [private]

Definition at line 30 of file qavrgmatrix.h.

Referenced by operator()().

int QavrgMatrix::m_Errors = 0 [static, private]

Definition at line 31 of file qavrgmatrix.h.

Referenced by gaussj().

QVector<double> QavrgMatrix::m_Matrix [private]

Definition at line 27 of file qavrgmatrix.h.

Referenced by fill(), operator()(), operator=(), and resize().

int QavrgMatrix::m_NCols [private]

Definition at line 29 of file qavrgmatrix.h.

Referenced by dump(), operator()(), resize(), and size().

int QavrgMatrix::m_NRows [private]

Definition at line 28 of file qavrgmatrix.h.

Referenced by dump(), operator()(), resize(), and size().


The documentation for this class was generated from the following files: