Wednesday 13 February 2013

Numerical Methods: Condition number and ill condition checking using C

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;
}

No comments:

Post a Comment

Comment