您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 幂法求矩阵A按模最大的特征值及其特征向量
数值分析幂法求矩阵A按模最大的特征值及其特征向量幂法的主要思想设nnijRaA)(,其特征值为i,对应特征向量为),,,1(nixi即iiixAx),,1(ni,且x1,······,xn线性无关。求矩阵A的主特征值及对应的特征向量。幂法的基本思想:任取一个非零初始向量v0∈Rn且v0≠0,由矩阵A的乘幂构造一向量序列:称{vk}为迭代向量,A特征值中λ1为强占优,即▕λ1▕>▏λ2▏>······>▏λn▏,{x1,x2,······,xn}线性无关,即{x1,x2,······,xn}为Rn中的一个基,于是对任意的初始向量v0∈Rn且v0≠0有展开式。(v0用{xi}的线性组合表示)(且设01)则当k=2,3,…时,vk=Avk-1=Akv001Avv0212vAAvv011vAAvvkkk),,1,0(nkniiixv10)(221101nnxxxAvAvnnxAxAxA2211nnnxxx222111)(111xkk其中由假设▕λ1▕>▏λ2▏>······>▏λn▏,得,从而即,0limkk且收敛速度由比值||12r确定。所以有说明,当k充分大时,有111xvkk,或kkv1越来越接近特征向量规范化幂法的算法①输入矩阵A、初始向量v(0),误差eps,实用中一般取v(0)=(1,1,···,1)T;②k←1;③计算v(k)←Au(k-1);④mk←max{v(k)},mk-1←{v(k-1)};⑤u(k)←v(k)/mk;⑥如果▕mk-mk-1▕<eps,则显示特征值λ1←和对应的特征向量x(1),终止;⑦k=k+1,转③。nknnkkxx)()(12122),,2(1||1nii),,,2(0)(lim1nikik111limxvkkk。11x幂法-C语言程序#includestdio.h#includemath.hvoidLOOP(floata[20][20],floatu[20],int);//矩阵最高阶数是20,可以更改最高阶数floatMAX(floatu[20],int);voidmain(void){floata[20][20],u[20],x[20],y,z;inti,j,n;printf(请输入方阵阶数:\n);scanf(%d,&n);printf(请按行输入各矩阵元素值:);for(i=0;i=n-1;i++){for(j=0;j=n-1;j++){scanf(%f,&a[i][j]);}}printf(请输入初次迭代向量:);for(i=0;i=n-1;i++){scanf(%f,&u[i]);}y=MAX(u,n);do{z=y;LOOP(a,u,n);y=MAX(u,n);for(i=0;i=n-1;i++){x[i]=u[i]/y;u[i]=x[i];}}while(fabs(z-y)=0.0000005);printf(矩阵特征值λ=%f\n,y);printf(矩阵特征向量x:\n);for(i=0;i=n-1;i++){printf(%10f\n,x[i]);}}voidLOOP(floata[20][20],floatu[20],intn){floatS,U[20];inti,j;for(i=0;i=n-1;i++){U[i]=u[i];}for(i=0;i=n-1;i++){S=0.0;for(j=0;j=n-1;j++){S=S+a[i][j]*U[j];}u[i]=S;}}floatMAX(floatu[20],intn){floatmax;inti;max=u[0];for(i=0;i=n-1;i++){if(u[i]max){max=u[i];}}return(max);}幂法-C语言程序检验(见书P89页)【例4-1】得出的结果与书上结果相同!创新点:本程序可以更改矩阵大小,使其更加符合选择性,还可以改变误差的范围,程序简单易懂,运用数组解决矩阵输入的问题,简化了C语言程序。结语通过本次数值分析实验的研究,我发现我收获颇多:这次研究不仅加深了我对幂法以及相关求矩阵的特征值及其特征向量方法的了解,还使我对数值分析这门课有了更深的领悟:数值分析在计算机使用方面有很强的实用性。一个问题,只要给出一个算法,就可以编出一个完美的程序,而且程序在算法结构以及误差分析方面有很高的准确度。我在C语言方面也得到了很大的提高,编程更加流畅且出现错误的机会大大减少,查错的能力也有很大的进步。
本文标题:幂法求矩阵A按模最大的特征值及其特征向量
链接地址:https://www.777doc.com/doc-1809476 .html