コード例 #1
0
ファイル: CPELink.cpp プロジェクト: hyln9/nV
		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));
				}
			}
コード例 #2
0
ファイル: utils.cpp プロジェクト: gogo40/GoGo-Neuro
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];
		}
	}

}