Ejemplo n.º 1
0
/*
  pA: the pointer of the Matrix A|b
  rowMax,colMax:size of matirx
  pX: solution vector
  return value: -1 solving equation failed
  		 		1 resolve result successfully
*/
int gaussLesung(double *pA, int rowMax,int colMax, double *pX)
{
 	 double *pMatrix = pA;
 	 int i;
 	 double product;
 	 product = 1;
 	 if((1+rowMax)!=colMax) return -1;
 	 
 	 for(i = 0; i < rowMax; i++)
 	 {
  	   int l;
 	   printf("%d,\n",i);
 	   
 	   l = findMax(pMatrix, rowMax, colMax, i,i);
 	   exchangeRow(pMatrix, rowMax, colMax, l, i);
 	   eliminate(pMatrix, rowMax, colMax, i, i);
       outputMatrix(pMatrix, rowMax, colMax);
     }
     
     
     for(i = 0; i < rowMax; i++)product = product * pMatrix[i*colMax+i];
     if(product==0)return -1;
 	 
	  solveX(pMatrix, rowMax,colMax, pX);
	  return 1;
}
Ejemplo n.º 2
0
/*
  input: A m x n matrix
  output: A m x n matrix in reduced row echelon form.
*/
void rref(double **m, int row, int col){
	double pivot;
	int lead;
	for(int i=0; i<row; i++){
		lead = i;					//lead will ALWAYS be >= i
		pivot = m[i][lead];
		
		//find a non-zero pivot in row
		while(pivot == 0 && lead < col){
			//perform exchange
			if(exchangeRow(m, row, col, i)){
				break;	
			}
			else{
				lead++;					//new lead
				pivot = m[i][lead];		//new pivot	
			}	
		}
		
		if(lead < row)					//reduce using row which has atleast 1 non-zero item
			reduce(m, row, col, i, lead);
	}
}