资源描述:
《特征向量求法2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、//数值计算程序-特征值和特征向量////////////////////////////////////////////////////////////////约化对称矩阵为三对角对称矩阵//利用Householder变换将n阶实对称矩阵约化为对称三对角矩阵//a-长度为n*n的数组,存放n阶实对称矩阵//n-矩阵的阶数//q-长度为n*n的数组,返回时存放Householder变换矩阵//b-长度为n的数组,返回时存放三对角阵的主对角线元素//c-长度为n的数组,返回时前n-1个元素存放次对角线元素voideastrq(do
2、ublea[],intn,doubleq[],doubleb[],doublec[]);////////////////////////////////////////////////////////////////求实对称三对角对称矩阵的全部特征值及特征向量//利用变型QR方法计算实对称三对角矩阵全部特征值及特征向量//n-矩阵的阶数//b-长度为n的数组,返回时存放三对角阵的主对角线元素//c-长度为n的数组,返回时前n-1个元素存放次对角线元素//q-长度为n*n的数组,若存放单位矩阵,则返回实对称三对角矩阵的特征向量组/
3、/若存放Householder变换矩阵,则返回实对称矩阵A的特征向量组//a-长度为n*n的数组,存放n阶实对称矩阵intebstq(intn,doubleb[],doublec[],doubleq[],doubleeps,intl);////////////////////////////////////////////////////////////////约化实矩阵为赫申伯格(Hessenberg)矩阵//利用初等相似变换将n阶实矩阵约化为上H矩阵//a-长度为n*n的数组,存放n阶实矩阵,返回时存放上H矩阵//n-矩阵的
4、阶数voidechbg(doublea[],intn);////////////////////////////////////////////////////////////////求赫申伯格(Hessenberg)矩阵的全部特征值//返回值小于0表示超过迭代jt次仍未达到精度要求//返回值大于0表示正常返回//利用带原点位移的双重步QR方法求上H矩阵的全部特征值//a-长度为n*n的数组,存放上H矩阵//n-矩阵的阶数//u-长度为n的数组,返回n个特征值的实部//v-长度为n的数组,返回n个特征值的虚部//eps-控制精度
5、要求//jt-整型变量,控制最大迭代次数intedqr(doublea[],intn,doubleu[],doublev[],doubleeps,intjt);////////////////////////////////////////////////////////////////求实对称矩阵的特征值及特征向量的雅格比法//利用雅格比(Jacobi)方法求实对称矩阵的全部特征值及特征向量//返回值小于0表示超过迭代jt次仍未达到精度要求//返回值大于0表示正常返回//a-长度为n*n的数组,存放实对称矩阵,返回时对角线存放
6、n个特征值//n-矩阵的阶数//u-长度为n*n的数组,返回特征向量(按列存储)//eps-控制精度要求//jt-整型变量,控制最大迭代次数inteejcb(doublea[],intn,doublev[],doubleeps,intjt);//////////////////////////////////////////////////////////////选自<<徐世良数值计算程序集(C)>>每个程序都加上了适当地注释,陆陆续续干了几个月才整理出来的啊。今天都给贴出来了#include"stdio.h"#include"
7、math.h"//约化对称矩阵为三对角对称矩阵//利用Householder变换将n阶实对称矩阵约化为对称三对角矩阵//a-长度为n*n的数组,存放n阶实对称矩阵//n-矩阵的阶数//q-长度为n*n的数组,返回时存放Householder变换矩阵//b-长度为n的数组,返回时存放三对角阵的主对角线元素//c-长度为n的数组,返回时前n-1个元素存放次对角线元素voideastrq(doublea[],intn,doubleq[],doubleb[],doublec[]){inti,j,k,u,v;doubleh,f,g,h2;
8、for(i=0;i<=n-1;i++){for(j=0;j<=n-1;j++){u=i*n+j;q[u]=a[u];}}for(i=n-1;i>=1;i--){h=0.0;if(i>1){for(k=0;k<=i-1;k++){u=i*n+k;h=h+q[u]*