C语言实现矩阵对称性判断及特征值、特征向量求解
判断矩阵是否为对称矩阵的方法是:判断矩阵A是否等于它的转置矩阵AT,即A=AT。
特征值与特征向量的求解可以使用数学库中的函数,例如使用GNU Scientific Library(GSL)库中的函数来实现。
下面是一个示例代码,使用了GSL库中的函数来求解特征值与特征向量:
#include <stdio.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_eigen.h>
int main()
{
int n; // 矩阵维数
printf("Enter the dimension of the matrix: ");
scanf("%d", &n);
gsl_matrix *A = gsl_matrix_alloc(n, n); // 创建矩阵
printf("Enter the elements of the matrix:
");
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
double x;
scanf("%lf", &x);
gsl_matrix_set(A, i, j, x); // 设置矩阵元素
}
}
// 判断矩阵是否为对称矩阵
int is_symmetric = 1;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(gsl_matrix_get(A, i, j) != gsl_matrix_get(A, j, i))
{
is_symmetric = 0;
break;
}
}
if(is_symmetric == 0)
{
break;
}
}
if(is_symmetric == 1)
{
printf("The matrix is symmetric.
");
// 求解特征值与特征向量
gsl_vector *eval = gsl_vector_alloc(n); // 特征值
gsl_matrix *evec = gsl_matrix_alloc(n, n); // 特征向量
gsl_eigen_symmv_workspace *w = gsl_eigen_symmv_alloc(n); // 工作空间
gsl_eigen_symmv(A, eval, evec, w); // 求解特征值与特征向量
gsl_eigen_symmv_free(w); // 释放工作空间
printf("The eigenvalues are:
");
for(int i=0; i<n; i++)
{
printf("%lf\n", gsl_vector_get(eval, i));
}
printf("The eigenvectors are:
");
for(int i=0; i<n; i++)
{
gsl_vector_view evec_i = gsl_matrix_column(evec, i);
printf("[ ");
for(int j=0; j<n; j++)
{
printf("%lf ", gsl_vector_get(&evec_i.vector, j));
}
printf("]\n");
}
gsl_vector_free(eval);
gsl_matrix_free(evec);
}
else
{
printf("The matrix is not symmetric.
");
}
gsl_matrix_free(A);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/orkI 著作权归作者所有。请勿转载和采集!