예제 #1
0
void RowEchelon<T>::getAllSolutions(VectorT& x0,MatrixT& N) const
{
  getNullspace(N);

  VectorT* N0 = new VectorT[N.n];
  for(int i=0;i<N.n;i++) N.getColRef(i,N0[i]);
  backSub(x0);
  Orthogonalize(x0,N0,N.n);
  delete [] N0;
}
예제 #2
0
int gaussJordan(Matrix *mat) {
    int i, j,k, i_max;
    double tmp;
    for (k = 0; k < mat -> size; k++) {
        i_max = pivMax(mat, k);
        //printf("i_max: %d k: %d\n",i_max,k);
        assert(accessMat(mat, k, i_max) != 0);
        if(k != i_max) swapRow(mat, k, i_max);
        for (j = k + 1; j < mat -> size; j++) {
            for (i = k + 1; i < mat -> size * 2; i++) {
                tmp = accessMat(mat, i, j) - accessMat(mat, i, k) * (accessMat(mat, k, j) / accessMat(mat, k, k));
                insertMat(mat, i, j, tmp);
            }
            insertMat(mat,k,j,0);
        }
    }
    backSub(mat);
    inverse(mat);
    return 0;
}