以下是一个求解三阶矩阵特征向量和特征值的C语言程序:

#include<stdio.h>
#include<math.h>

int main()
{
    float a[3][3], b[3], c[3], det, trace, lambda1, lambda2, lambda3;
    int i, j, k, max;
    printf("Enter the elements of the matrix:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%f",&a[i][j]);
        }
    }
    trace = a[0][0]+a[1][1]+a[2][2];
    det = a[0][0]*(a[1][1]*a[2][2]-a[1][2]*a[2][1])-a[0][1]*(a[1][0]*a[2][2]-a[1][2]*a[2][0])+a[0][2]*(a[1][0]*a[2][1]-a[1][1]*a[2][0]);
    lambda1 = (trace+sqrt(trace*trace-3*det))/3;
    lambda2 = (trace-sqrt(trace*trace-3*det))/3;
    lambda3 = trace-lambda1-lambda2;
    printf("The eigenvalues are: %f, %f, %f\n", lambda1, lambda2, lambda3);
    for(i=0;i<3;i++)
    {
        b[i] = a[i][0]*a[i][0]+a[i][1]*a[i][1]+a[i][2]*a[i][2]-lambda1*(a[i][0]+a[i][1]+a[i][2])+lambda1*lambda1;
        c[i] = a[i][0]*a[i][1]*a[i][2]-a[i][0]*a[i][2]*lambda1-a[i][1]*a[i][2]*lambda1+lambda1*lambda1*(a[i][0]+a[i][1]+a[i][2])-lambda1*lambda1*lambda1;
    }
    max = 0;
    for(i=1;i<3;i++)
    {
        if(fabs(b[i])>fabs(b[max]))
        {
            max = i;
        }
    }
    printf("The eigenvector corresponding to lambda1 is: (%f, %f, %f)\n", a[max][0], a[max][1], a[max][2]);
    for(i=0;i<3;i++)
    {
        b[i] = a[i][0]*a[i][0]+a[i][1]*a[i][1]+a[i][2]*a[i][2]-lambda2*(a[i][0]+a[i][1]+a[i][2])+lambda2*lambda2;
        c[i] = a[i][0]*a[i][1]*a[i][2]-a[i][0]*a[i][2]*lambda2-a[i][1]*a[i][2]*lambda2+lambda2*lambda2*(a[i][0]+a[i][1]+a[i][2])-lambda2*lambda2*lambda2;
    }
    max = 0;
    for(i=1;i<3;i++)
    {
        if(fabs(b[i])>fabs(b[max]))
        {
            max = i;
        }
    }
    printf("The eigenvector corresponding to lambda2 is: (%f, %f, %f)\n", a[max][0], a[max][1], a[max][2]);
    for(i=0;i<3;i++)
    {
        b[i] = a[i][0]*a[i][0]+a[i][1]*a[i][1]+a[i][2]*a[i][2]-lambda3*(a[i][0]+a[i][1]+a[i][2])+lambda3*lambda3;
        c[i] = a[i][0]*a[i][1]*a[i][2]-a[i][0]*a[i][2]*lambda3-a[i][1]*a[i][2]*lambda3+lambda3*lambda3*(a[i][0]+a[i][1]+a[i][2])-lambda3*lambda3*lambda3;
    }
    max = 0;
    for(i=1;i<3;i++)
    {
        if(fabs(b[i])>fabs(b[max]))
        {
            max = i;
        }
    }
    printf("The eigenvector corresponding to lambda3 is: (%f, %f, %f)\n", a[max][0], a[max][1], a[max][2]);
    return 0;
}

该程序首先从用户处输入一个三阶矩阵,然后计算矩阵的特征值和特征向量。特别地,该程序使用了雅可比方法来计算特征值,使用了幂法来计算特征向量。最后,程序输出特征值和对应的特征向量

用C语言求一个输入的三阶矩阵的特征向量和特征值

原文地址: https://www.cveoy.top/t/topic/fTia 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录