Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I think this may work. I wrote it when I studied a numerical analysis course. This is not only the determinant but other functions related to matrices.</p> <p>First, copy and save this code as <code>Matrix.h</code>:</p> <pre><code>//Title: Matrix Header File //Writer: Say OL //This is a beginner code not an expert one //No responsibilty for any errors //Use for your own risk using namespace std; int row,col,Row,Col; double Coefficient; //Input Matrix void Input(double Matrix[9][9],int Row,int Col) { for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=Col;col++) { cout&lt;&lt;"e["&lt;&lt;row&lt;&lt;"]["&lt;&lt;col&lt;&lt;"]="; cin&gt;&gt;Matrix[row][col]; } } //Output Matrix void Output(double Matrix[9][9],int Row,int Col) { for(row=1;row&lt;=Row;row++) { for(col=1;col&lt;=Col;col++) cout&lt;&lt;Matrix[row][col]&lt;&lt;"\t"; cout&lt;&lt;endl; } } //Copy Pointer to Matrix void CopyPointer(double (*Pointer)[9],double Matrix[9][9],int Row,int Col) { for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=Col;col++) Matrix[row][col]=Pointer[row][col]; } //Copy Matrix to Matrix void CopyMatrix(double MatrixInput[9][9],double MatrixTarget[9][9],int Row,int Col) { for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=Col;col++) MatrixTarget[row][col]=MatrixInput[row][col]; } //Transpose of Matrix double MatrixTran[9][9]; double (*(Transpose)(double MatrixInput[9][9],int Row,int Col))[9] { for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=Col;col++) MatrixTran[col][row]=MatrixInput[row][col]; return MatrixTran; } //Matrix Addition double MatrixAdd[9][9]; double (*(Addition)(double MatrixA[9][9],double MatrixB[9][9],int Row,int Col))[9] { for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=Col;col++) MatrixAdd[row][col]=MatrixA[row][col]+MatrixB[row][col]; return MatrixAdd; } //Matrix Subtraction double MatrixSub[9][9]; double (*(Subtraction)(double MatrixA[9][9],double MatrixB[9][9],int Row,int Col))[9] { for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=Col;col++) MatrixSub[row][col]=MatrixA[row][col]-MatrixB[row][col]; return MatrixSub; } //Matrix Multiplication int mRow,nCol,pCol,kcol; double MatrixMult[9][9]; double (*(Multiplication)(double MatrixA[9][9],double MatrixB[9][9],int mRow,int nCol,int pCol))[9] { for(row=1;row&lt;=mRow;row++) for(col=1;col&lt;=pCol;col++) { MatrixMult[row][col]=0.0; for(kcol=1;kcol&lt;=nCol;kcol++) MatrixMult[row][col]+=MatrixA[row][kcol]*MatrixB[kcol][col]; } return MatrixMult; } //Interchange Two Rows double RowTemp[9][9]; double MatrixInter[9][9]; double (*(InterchangeRow)(double MatrixInput[9][9],int Row,int Col,int iRow,int jRow))[9] { CopyMatrix(MatrixInput,MatrixInter,Row,Col); for(col=1;col&lt;=Col;col++) { RowTemp[iRow][col]=MatrixInter[iRow][col]; MatrixInter[iRow][col]=MatrixInter[jRow][col]; MatrixInter[jRow][col]=RowTemp[iRow][col]; } return MatrixInter; } //Pivote Downward double MatrixDown[9][9]; double (*(PivoteDown)(double MatrixInput[9][9],int Row,int Col,int tRow,int tCol))[9] { CopyMatrix(MatrixInput,MatrixDown,Row,Col); Coefficient=MatrixDown[tRow][tCol]; if(Coefficient!=1.0) for(col=1;col&lt;=Col;col++) MatrixDown[tRow][col]/=Coefficient; if(tRow&lt;Row) for(row=tRow+1;row&lt;=Row;row++) { Coefficient=MatrixDown[row][tCol]; for(col=1;col&lt;=Col;col++) MatrixDown[row][col]-=Coefficient*MatrixDown[tRow][col]; } return MatrixDown; } //Pivote Upward double MatrixUp[9][9]; double (*(PivoteUp)(double MatrixInput[9][9],int Row,int Col,int tRow,int tCol))[9] { CopyMatrix(MatrixInput,MatrixUp,Row,Col); Coefficient=MatrixUp[tRow][tCol]; if(Coefficient!=1.0) for(col=1;col&lt;=Col;col++) MatrixUp[tRow][col]/=Coefficient; if(tRow&gt;1) for(row=tRow-1;row&gt;=1;row--) { Coefficient=MatrixUp[row][tCol]; for(col=1;col&lt;=Col;col++) MatrixUp[row][col]-=Coefficient*MatrixUp[tRow][col]; } return MatrixUp; } //Pivote in Determinant double MatrixPiv[9][9]; double (*(Pivote)(double MatrixInput[9][9],int Dim,int pTarget))[9] { CopyMatrix(MatrixInput,MatrixPiv,Dim,Dim); for(row=pTarget+1;row&lt;=Dim;row++) { Coefficient=MatrixPiv[row][pTarget]/MatrixPiv[pTarget][pTarget]; for(col=1;col&lt;=Dim;col++) { MatrixPiv[row][col]-=Coefficient*MatrixPiv[pTarget][col]; } } return MatrixPiv; } //Determinant of Square Matrix int dCounter,dRow; double Det; double MatrixDet[9][9]; double Determinant(double MatrixInput[9][9],int Dim) { CopyMatrix(MatrixInput,MatrixDet,Dim,Dim); Det=1.0; if(Dim&gt;1) { for(dRow=1;dRow&lt;Dim;dRow++) { dCounter=dRow; while((MatrixDet[dRow][dRow]==0.0)&amp;(dCounter&lt;=Dim)) { dCounter++; Det*=-1.0; CopyPointer(InterchangeRow(MatrixDet,Dim,Dim,dRow,dCounter),MatrixDet,Dim,Dim); } if(MatrixDet[dRow][dRow]==0) { Det=0.0; break; } else { Det*=MatrixDet[dRow][dRow]; CopyPointer(Pivote(MatrixDet,Dim,dRow),MatrixDet,Dim,Dim); } } Det*=MatrixDet[Dim][Dim]; } else Det=MatrixDet[1][1]; return Det; } //Matrix Identity double MatrixIdent[9][9]; double (*(Identity)(int Dim))[9] { for(row=1;row&lt;=Dim;row++) for(col=1;col&lt;=Dim;col++) if(row==col) MatrixIdent[row][col]=1.0; else MatrixIdent[row][col]=0.0; return MatrixIdent; } //Join Matrix to be Augmented Matrix double MatrixJoin[9][9]; double (*(JoinMatrix)(double MatrixA[9][9],double MatrixB[9][9],int Row,int ColA,int ColB))[9] { Col=ColA+ColB; for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=Col;col++) if(col&lt;=ColA) MatrixJoin[row][col]=MatrixA[row][col]; else MatrixJoin[row][col]=MatrixB[row][col-ColA]; return MatrixJoin; } //Inverse of Matrix double (*Pointer)[9]; double IdentMatrix[9][9]; int Counter; double MatrixAug[9][9]; double MatrixInv[9][9]; double (*(Inverse)(double MatrixInput[9][9],int Dim))[9] { Row=Dim; Col=Dim+Dim; Pointer=Identity(Dim); CopyPointer(Pointer,IdentMatrix,Dim,Dim); Pointer=JoinMatrix(MatrixInput,IdentMatrix,Dim,Dim,Dim); CopyPointer(Pointer,MatrixAug,Row,Col); for(Counter=1;Counter&lt;=Dim;Counter++) { Pointer=PivoteDown(MatrixAug,Row,Col,Counter,Counter); CopyPointer(Pointer,MatrixAug,Row,Col); } for(Counter=Dim;Counter&gt;1;Counter--) { Pointer=PivoteUp(MatrixAug,Row,Col,Counter,Counter); CopyPointer(Pointer,MatrixAug,Row,Col); } for(row=1;row&lt;=Dim;row++) for(col=1;col&lt;=Dim;col++) MatrixInv[row][col]=MatrixAug[row][col+Dim]; return MatrixInv; } //Gauss-Jordan Elemination double MatrixGJ[9][9]; double VectorGJ[9][9]; double (*(GaussJordan)(double MatrixInput[9][9],double VectorInput[9][9],int Dim))[9] { Row=Dim; Col=Dim+1; Pointer=JoinMatrix(MatrixInput,VectorInput,Dim,Dim,1); CopyPointer(Pointer,MatrixGJ,Row,Col); for(Counter=1;Counter&lt;=Dim;Counter++) { Pointer=PivoteDown(MatrixGJ,Row,Col,Counter,Counter); CopyPointer(Pointer,MatrixGJ,Row,Col); } for(Counter=Dim;Counter&gt;1;Counter--) { Pointer=PivoteUp(MatrixGJ,Row,Col,Counter,Counter); CopyPointer(Pointer,MatrixGJ,Row,Col); } for(row=1;row&lt;=Dim;row++) for(col=1;col&lt;=1;col++) VectorGJ[row][col]=MatrixGJ[row][col+Dim]; return VectorGJ; } //Generalized Gauss-Jordan Elemination double MatrixGGJ[9][9]; double VectorGGJ[9][9]; double (*(GeneralizedGaussJordan)(double MatrixInput[9][9],double VectorInput[9][9],int Dim,int vCol))[9] { Row=Dim; Col=Dim+vCol; Pointer=JoinMatrix(MatrixInput,VectorInput,Dim,Dim,vCol); CopyPointer(Pointer,MatrixGGJ,Row,Col); for(Counter=1;Counter&lt;=Dim;Counter++) { Pointer=PivoteDown(MatrixGGJ,Row,Col,Counter,Counter); CopyPointer(Pointer,MatrixGGJ,Row,Col); } for(Counter=Dim;Counter&gt;1;Counter--) { Pointer=PivoteUp(MatrixGGJ,Row,Col,Counter,Counter); CopyPointer(Pointer,MatrixGGJ,Row,Col); } for(row=1;row&lt;=Row;row++) for(col=1;col&lt;=vCol;col++) VectorGGJ[row][col]=MatrixGGJ[row][col+Dim]; return VectorGGJ; } //Matrix Sparse, Three Diagonal Non-Zero Elements double MatrixSpa[9][9]; double (*(Sparse)(int Dimension,double FirstElement,double SecondElement,double ThirdElement))[9] { MatrixSpa[1][1]=SecondElement; MatrixSpa[1][2]=ThirdElement; MatrixSpa[Dimension][Dimension-1]=FirstElement; MatrixSpa[Dimension][Dimension]=SecondElement; for(int Counter=2;Counter&lt;Dimension;Counter++) { MatrixSpa[Counter][Counter-1]=FirstElement; MatrixSpa[Counter][Counter]=SecondElement; MatrixSpa[Counter][Counter+1]=ThirdElement; } return MatrixSpa; } </code></pre> <p>In my method, I convert the matrix to upper triangular matrix using elementary row operations. And the determinant is the product of the diagonal elements.</p> <p>Here is the sample code:</p> <pre><code>#include&lt;iostream&gt; #include&lt;conio.h&gt; #include"Matrix.h" int Dim; double Matrix[9][9]; int main() { cout&lt;&lt;"Enter matrix dimension: "; cin&gt;&gt;Dim; cout&lt;&lt;"Enter matrix elements:"&lt;&lt;endl; Input(Matrix,Dim,Dim); cout&lt;&lt;"Your matrix:"&lt;&lt;endl; Output(Matrix,Dim,Dim); cout&lt;&lt;"The determinant: "&lt;&lt;Determinant(Matrix,Dim)&lt;&lt;endl; getch(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload