c语言求矩阵特征向量函数 c语言求矩阵的迹

如何用C语言求一般矩阵的特征值和特征向量C语言并没有封装这类函数,只能自己实现 。MATLAB倒是可以直接求 。
自己实现的话可以用雅克比迭代法、高斯-赛戴尔迭代法等算法
如何用C语言求一般矩阵(非对称矩阵)的特征值和特征向量???用C++或者VB编程很烦人的,matlab中命令:[a,b]=eig(A)就是求解矩阵A的特征值和特征值对应的向量,他们分别会构成一个由特征值组成的对角矩阵b和一个由对应特征值的特征列向量组成的a矩阵 。或者命令a=eig[A]就只有特征值组成的对角矩阵a,别去想用C++和VB之类的,这些软件用来求解矩阵和matlab相差太远了 。我之前也想过编程解决,人家一个命令就能解决的问题何不取巧呢?
如何用c语言写求矩阵的特征值和特征向量方法1:推导出det(aA-I)=0的解析式,这应该是个四次方程 , 因为只有4阶,不是很困难的 , 写出后就可以用方程求根的方法求解(如newton迭代法)
方法2:如果你是对角优势阵,也就是对角线上的值的绝对值,比同行所有其他元素的绝对值的和还大,可以通过局部旋转的方法把矩阵“能量”集中到对角线
这个是方法,你可以自己去写一下试试~
如何用C语言编写求对称矩阵的特征值和特征向量的程序//数值计算程序-特征值和特征向量
//////////////////////////////////////////////////////////////
//约化对称矩阵为三对角对称矩阵
//利用Householder变换将n阶实对称矩阵约化为对称三对角矩阵
//a-长度为n*n的数组,存放n阶实对称矩阵
//n-矩阵的阶数
//q-长度为n*n的数组 , 返回时存放Householder变换矩阵
//b-长度为n的数组 , 返回时存放三对角阵的主对角线元素
//c-长度为n的数组,返回时前n-1个元素存放次对角线元素
void eastrq(double a[],int n,double q[],double b[],double c[]);
//////////////////////////////////////////////////////////////
//求实对称三对角对称矩阵的全部特征值及特征向量
//利用变型QR方法计算实对称三对角矩阵全部特征值及特征向量
//n-矩阵的阶数
//b-长度为n的数组,返回时存放三对角阵的主对角线元素
//c-长度为n的数组,返回时前n-1个元素存放次对角线元素
//q-长度为n*n的数组,若存放单位矩阵,则返回实对称三对角矩阵的特征向量组
// 若存放Householder变换矩阵,则返回实对称矩阵A的特征向量组
//a-长度为n*n的数组,存放n阶实对称矩阵
int ebstq(int n,double b[],double c[],double q[],double eps,int l);
//////////////////////////////////////////////////////////////
//约化实矩阵为赫申伯格(Hessen berg)矩阵
//利用初等相似变换将n阶实矩阵约化为上H矩阵
//a-长度为n*n的数组 , 存放n阶实矩阵,返回时存放上H矩阵
//n-矩阵的阶数
void echbg(double a[],int n);
//////////////////////////////////////////////////////////////
//求赫申伯格(Hessen berg)矩阵的全部特征值
//返回值小于0表示超过迭代jt次仍未达到精度要求
//返回值大于0表示正常返回
//利用带原点位移的双重步QR方法求上H矩阵的全部特征值
//a-长度为n*n的数组,存放上H矩阵
//n-矩阵的阶数
//u-长度为n的数组,返回n个特征值的实部
//v-长度为n的数组,返回n个特征值的虚部
//eps-控制精度要求
//jt-整型变量,控制最大迭代次数
int edqr(double a[],int n,double u[],double v[],double eps,int jt);
//////////////////////////////////////////////////////////////
//求实对称矩阵的特征值及特征向量的雅格比法
//利用雅格比(Jacobi)方法求实对称矩阵的全部特征值及特征向量

推荐阅读