/* 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; }
/* 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); } }