#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define siz 100
int det(int a[siz][siz], int n){
int res = 0;
int b[siz][siz];
if(n==1) return a[1][1];
else if(n==2) return a[1][1]*a[2][2]-a[1][2]*a[2][1];
else {
int t, s;
for(int k=1; k<=n; k++){
t = s = 1;
for(int i=2;i<=n;i++){
for(int j=1;j<=n;j++)
if(j==k) continue;
else b[t][s++] = a[i][j];
t++;
s=1;
}
res += (pow(-1,1+k)*a[1][k]*det(b,n-1));
}
return res;
}
}
int main()
{
int n;
int a[siz][siz], transpose[siz][siz];
freopen("input.txt","r",stdin);
while(cin>>n){
//taking input
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
puts("Input Matrix:");
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
puts("");
}
int res = det(a, n);
puts("Determinant:");
cout<<res<<endl;
//transpose
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
transpose[i][j] = a[j][i];
//transpose output
puts("Matrix Transpose:");
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<transpose[i][j]<<" ";
puts("");
}
int t, s, l = 0;
int result[siz];
for(int k=1;k<=n;k++){
for(int m=1; m<=n;m++){
t = s = 1;
int component[siz][siz];
for(int i=1;i<=n;i++){
if(i==k) continue;
for(int j=1;j<=n;j++){
if(m==j) continue;
else component[t][s++] = transpose[i][j];
}
s = 1;
t++;
}
result[l++] = det(component, n-1);
}
}
l = 0;
double inverse[siz][siz];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i%2==0){
if(j%2==0) {
inverse[i][j] = result[l++];
} else {
inverse[i][j] = result[l++]*(-1);
}
} else {
if(j%2==0) {
inverse[i][j] = result[l++]*(-1);
} else {
inverse[i][j] = result[l++];
}
}
inverse[i][j] /= res;
}
}
//inverse output
puts("Matrix Inverse:");
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<inverse[i][j]<<" ";
puts("");
}
}
return 0;
}
Tuesday, July 16, 2013
How to find inverse Matrix using C++
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment