-->

Numerical Methods: Greatest Eigen value and corresponding Eigen vector using power method in C

Numerical Methods: Greatest Eigen value and corresponding Eigen vector using power method in C

    Source Code:

    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    void matrix_mul(float matrix1[3][3],float matrix2[3][1],float matrix3[3][1]){
        int i,j,k;
        for(i = 0; i < 3; i++){
            for(j = 0; j < 1; j++){
                matrix3[i][j] = 0;
                for(k = 0; k < 3; k++){
                    matrix3[i][j] += matrix1[i][k]*matrix2[k][j];
                }
            }
        }
    }
    float findmax(float array[3][1]){
        int i;
        float  maximum;
        maximum = array[0][0];
        for(i = 0; i < 3; i++){
            if(maximum < array[i][0])
                maximum = array[i][0];
        }
        return maximum;
    }
    int isEqual(float matrix1[3][1], float matrix2[3][1]){
        if(matrix1[0][0] == matrix2[0][0]
        && matrix1[1][0] == matrix2[1][0]
        && matrix1[2][0] == matrix2[2][0])
            return 1;
        return 0;
    }
    int main(){
        float matrix1[3][3], matrix2[3][1],result[3][1];
        float eigenValue;
        int i,j,k;
        printf("Enter 3x3 matrix:\n");
        for(i = 0; i < 3; i++){
            for(j = 0; j < 3; j++){
                scanf("%f",&matrix1[i][j]);
            }
        }
        for(i = 0; i < 3; i++){
            for(j = 0; j < 1; j++){
                matrix2[i][j] = 1.0;
            }
        }
        while(1){
            matrix_mul(matrix1,matrix2,result);
            eigenValue = findmax(result);
            for(i = 0; i < 3; i++){
                result[i][0]/=eigenValue;
            }
            if(isEqual(matrix2,result)==1){
                break;
            }
            for(i = 0; i < 3; i++){
                matrix2[i][0] = result[i][0];
            }
        }
        printf("Greatest Eigen Value = %f", eigenValue);
        printf("\nAny one of Eigen Vector: \n");
        for(i = 0; i < 3; i++){
            for(j = 0; j < 1; j++){
                printf("%.2f",result[i][j]);
                printf("\t");
            }
            printf("\n");
        }
        return 0;
    }
    fardi zayden
    @مرسلة بواسطة
    كاتب ومحرر اخبار اعمل في موقع دراسات تقنية .

    إرسال تعليق