Condition number and ill condition checking
Source Code:
#include< stdio.h>
#include< math.h>
void inverse(float matrix[6][6], int n){
int i,j, k;
float ratio,a;
for(i = 0; i < n; i++){
for(j = n; j < 2*n; j++){
if(i==(j-n))
matrix[i][j] = 1.0;
else
matrix[i][j] = 0.0;
}
}
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
if(i!=j){
ratio = matrix[j][i]/matrix[i][i];
for(k = 0; k < 2*n; k++){
matrix[j][k] -= ratio * matrix[i][k];
}
}
}
}
for(i = 0; i < n; i++){
a = matrix[i][i];
for(j = 0; j < 2*n; j++){
matrix[i][j] /= a;
}
}
for(i = 0; i < n; i++){
for(j = n; j < 2*n; j++){
matrix[i][j-n] = matrix[i][j];
}
}
}
float norms(float matrix[][6],int n){
int i,j;
float sum = 0;
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
sum += pow(matrix[i][j], 2);
}
}
return sqrt(sum);
}
int main(){
float matrix[6][6], cond_no, norm1, norm2, det;
int i,j,n;
printf("Enter order of matrix: ");
scanf("%d",&n);
printf("Enter the matrix: \n");
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
scanf("%f",&matrix[i][j]);
}
}
norm1 = norms(matrix,n);
inverse(matrix,n);
norm2 = norms(matrix,n);
cond_no = norm1*norm2;
printf("\nCondition No: %.2f\n", cond_no);
return 0;
}