var GroebnerBasis(Kernel& k,const Tuple& f_){ uint n=f_.size-1; std::vector<var> f_vec(f_.tuple+1,f_.tuple+f_.size); for(uint i=n-1;i+1>0;i--){ if(!isExact(f_vec[i])){ wcerr<<"all polynomials must be Exact\n"; return $.Fail; } if(isNumber(f_vec[i])){ if(!cmpD(f_vec[i].object(), 0.0))//is zero f_vec.erase(f_vec.begin()+i); else return list(new Integer(1L)); } }
void GOGONEURO::gauss(int n, matrixD& A, matrixD& X, matrixD& B, bool& st){ std::vector<int> p(n); matrixD c(n,n), y(n,n); double pv, t, soma; int r, h; st=true; for(int i=0;i<n;i++) p[i]=i; for(int k=0;k<n-1;k++){ pv=fabs(A[k][k]); r=k; for(int i=k+1;i<n;i++) if(cmpD(fabs(A[i][k]),pv)>0){ pv=fabs(A[i][k]); r=i; } if(cmpD(pv,0.0)==0){ st=false; //fprintf(stderr,"Matriz inversa nao existe! Saindo...\n"); for(int i=0;i<n;i++) for(int j=0;j<n;j++) X[i][j]=0.1; return; } if(r!=k){ h=p[k]; p[k]=p[r]; p[r]=h; for(int j=0;j<n;j++){ t=A[k][j]; A[k][j]=A[r][j]; A[r][j]=t; } } for(int i=k+1;i<n;i++){ t=A[i][k]/A[k][k]; A[i][k]=t; for(int j=k+1;j<n;j++) A[i][j]-=t*A[k][j]; } } for(int k=0;k<n;k++){ for(int i=0;i<n;i++){ r=p[i]; c[i][k]=B[r][k]; } for(int i=0;i<n;i++){ soma=0; for(int j=0;j<i;j++) soma+=A[i][j]*y[j][k]; y[i][k]=c[i][k]-soma; } for(int i=n-1;i>-1;i--){ soma=0; for(int j=i+1;j<n;j++) soma+=A[i][j]*X[j][k]; X[i][k]=(y[i][k]-soma)/A[i][i]; } } }