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; }
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; }