Exemplo n.º 1
0
void Matrix<T>::copy(const MatrixBase<T>& a)
{
  setSize(a.getNumRows(), a.getNumCols());
  for(int i=0; i < a.getNumRows(); i++)
  {
    for(int j=0; j < a.getNumCols(); j++)
    {
      head[i][j] = a(i,j);
    }
  }
}
Vector<T> GaussianElimination<T>::operator()(MatrixBase<T>& A, const Vector<T>& b)
{
  Vector<T> x( b.getSize() );
  
  Matrix<T> newA(A.getNumRows(),A.getNumCols());
  newA = A;
  newA.addColumn(b);
  
  // Forward Elimination
  for(int i=1; i < newA.getNumRows(); i++)
  {
    reduceDown(newA, i);
  }
  // Backward Elimination
  for(int i=newA.getNumRows()-2; i >= 0; i--)
  {
    reduceUp(newA, i);
  }
  // Solve for x
  for(int i=0; i < x.getSize(); i++)
  {
    x[i] = newA(i,newA.getNumCols()-1) / newA(i,i);
  }
  
  return x;
}