幂法和反幂法求矩阵特征值课程设计报告书
数值分析试验幂法与反幂法matlab
一、问题的描述及算法设计(一)问题的描述我所要做的课题是:对称矩阵的条件数的求解设计1、求矩阵A 的二条件数问题 A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----210121012 2、设计内容:1)采用幂法求出A 的 错误!未找到引用源。
.2)采用反幂法求出A 的错误!未找到引用源。
.3)计算A 的条件数 ⅡA Ⅱ2* ⅡA -1Ⅱ2=cond2(A )=错误!未找到引用源。
/错误!未找到引用源。
.(精度要求为10-6)3、设计要求1)求出ⅡA Ⅱ2。
2)并进行一定的理论分析。
(二)算法设计1、幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1.(2)计算v )(k =Au )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k(3)若| m k = m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u )(k 作为相应的特征向量)否则置k=k+1,转(2)2、反幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1.(2)对A 作LU 分解,即A=LU(3)解线性方程组 Ly )(k =u )1(-k ,Uv )(k =y )(k(4)计算m k =max(v )(k ), u )(k = v )(k / m k(5)若|m k =m 1-k |<ε,则停止计算(1/m k 作为绝对值最小特征值n λ,u )(k 作为相应的特征向量);否则置k=k+1,转(3).二、算法的流程图(一)幂法算法的流程图为 v )(k = A 1-u )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k (2)2、对于反幂法的定理按式(2)计算出的m k 和u )(k 满足:∞>-k lim m k =nλ1, ∞>-k lim u )(k =)max (n n x x 在式(2)中,需要用到A 1-,这给计算带来很大的不方便,因此,把(2)式的第一式改为求解线性方程组A v )(k = u )1(-k (3) 但由于在反幂法中,每一步迭代都需求解线性方程组(3)式,迭代做了大量的重复计算,为了节省工作量,可事先把矩阵A 作LU 分解,即 A=LU所以线性方程组(3)改为Ly )(k =u )1(-k ,Uv )(k =y )(k 四、相关的数值结果(一)幂法程序的运行结果m = 3.4142 u = -0.7071 index = 11.0000-0.7071(二)反幂法程序的运行结果m 0 = 0.5858 u = 0.7071 index = 11.00000.7071(三)矩阵A 的二条件数的结果ⅡA Ⅱ2* ⅡA -1Ⅱ2=cond2(A )=m/ m 0=3.4142/0.5858=5.828269五、数值计算结果的分析求n阶方阵A的特征值和特征向量,是实际计算中常常碰到的问题。
数值分析之幂法及反幂法C语言程序实例
数值分析之幂法及反幂法C 语言程序实例1、算法设计方案:①求1λ、501λ和s λ的值:s λ:s λ表示矩阵的按模最小特征值,为求得s λ直接对待求矩阵A 应用反幂法即可。
1λ、501λ:已知矩阵A 的特征值满足关系 1n λλ<<,要求1λ、及501λ时,可按如下方法求解: a . 对矩阵A 用幂法,求得按模最大的特征值1m λ。
b . 按平移量1m λ对矩阵A 进行原点平移得矩阵1m BA I λ=+,对矩阵B 用反幂法求得B 的按模最小特征值2m λ。
c . 321m m m λλλ=-则:113min(,)m m λλλ=,13max(,)n m m λλλ=即为所求。
②求和A 的与数5011140k k λλμλ-=+最接近的特征值ik λ(k=0,1,…39):求矩阵A 的特征值中与k μ最接近的特征值的大小,采用原点平移的方法:先求矩阵 B=A-k μI 对应的按模最小特征值k β,则k β+k μ即为矩阵A 与k μ最接近的特征值。
重复以上过程39次即可求得ik λ(k=0,1,…39)的值。
③求A 的(谱范数)条件数2cond()A 和行列式det A :在(1)中用反幂法求矩阵A 的按模最小特征值时,要用到Doolittle 分解方法,在Doolittle 分解完成后得到的两个矩阵分别为L 和U ,则A 的行列式可由U 阵求出,即:det(A)=det(U)。
求得det(A)不为0,因此A 为非奇异的实对称矩阵,则: max 2()scond A λλ=,max λ和s λ分别为模最大特征值与模最小特征值。
2、程序源代码:#include<stdio.h>#include<stdio.h>#include<math.h>#define N 501 //列#define M 5 //行#define R 2 //下带宽#define S 2 //上带宽#define K 39#define e 1.0e-12 //误差限float A[M][N]; //初始矩阵float u[N]; //初始向量float y[N],yy[N];float maximum,value1,value2,value_1,value_N,value_s,value_abs_max;const float b=0.16f,c=-0.064f;int max_sign,max_position;void Init_matrix_A() //初始化矩阵A{int i;for(i=2;i<N;i++){A[0][i]= c;}for(i=1;i<N;i++){A[1][i]= b;}for(i=0;i<N;i++){A[2][i]= (1.64-0.024*(i+1))*sin(0.2*(i+1))-0.64*exp(0.1/(i+1));}for(i=0;i<N-1;i++){A[3][i]= b;}for(i=0;i<N-2;i++){A[4][i]= c;}}void Init_u() //初始化迭代向量{int i;for(i=0;i<N;i++)u[i]=1.0;}void Get_max() //获得绝对值最大的数值的模{int i;max_position=0;maximum=fabs(u[0]);for(i=1;i<N;i++){if(maximum<fabs(u[i])){max_position=i;maximum=fabs(u[i]);}}if(u[max_position]<0)max_sign=-1;else max_sign=1;}void Get_y() //单位化迭代向量{int i;for(i=0;i<N;i++)y[i]=u[i]/maximum;}void Get_u() //获得新迭代向量{int i;u[0]=A[2][0]*y[0]+A[1][1]*y[1]+A[0][2]*y[2];u[1]=A[3][0]*y[0]+A[2][1]*y[1]+A[1][2]*y[2]+A[0][3]*y[3];u[N-2]=A[4][N-4]*y[N-4]+A[3][N-3]*y[N-3]+A[2][N-2]*y[N-2]+A[1][N-1]*y[N-1];u[N-1]=A[4][N-3]*y[N-3]+A[3][N-2]*y[N-2]+A[2][N-1]*y[N-1];for(i=2;i<N-2;i++)u[i]=A[4][i-2]*y[i-2]+A[3][i-1]*y[i-1]+A[2][i]*y[i]+A[1][i+1]*y[i+1]+A[0][i+2]*y[i+2]; }void Get_value() //获得迭代后特征值{value2=value1;value1=max_sign*u[max_position];}void Check_value() //幂法第二迭代格迭代{Init_u();Get_max();Get_y();Get_u();Get_value();while(1){Get_max();Get_y();Get_u();Get_value();if(fabs((value2-value1)/value1)<e)break;}}void The_value() //获取绝对值最大的特征值λ_501 {Check_value();value_abs_max=value1;}void The_Other_value() //获取特征值λ_1{int i;float value_temp=value1;for(i=0;i<N;i++){A[2][i]-=value_temp;}Check_value();value1+=value_temp;if(value1<value_temp){value_1=value1;value_N=value_temp;}else{value_N=value1;value_1=value_temp;}}int min(int a,int b) //两值中取最小{if(a<b)return a;elsereturn b;}int max(int a,int b) //两值中取最大{if(a<b)return b;elsereturn a;}void Resolve_LU(){int k,i,j,t;float temp;for(k=1;k<=N;k++){for(j=k;j<=min(k+S,N);j++){temp=0;for(t=max(max(1,k-R),j-S);t<=k-1;t++)temp+=A[k-t+S][t-1]*A[t-j+S][j-1];A[k-j+S][j-1]=A[k-j+S][j-1]-temp;}for(i=k+1;i<=min(k+R,N);i++){temp=0;for(t=max(max(1,i-R),k-S);t<=k-1;t++)temp+=A[i-t+S][t-1]*A[t-k+S][k-1];A[i-k+S][k-1]=(A[i-k+S][k-1]-temp)/A[S][k-1];}}}void Back_substitution()//方程组回代过程{int i,t;float temp=0;for(i=2;i<N+1;i++){for(t=max(1,i-R);t<i;t++)y[i-1]-=A[i-t+S][t-1]*y[t-1];}u[N-1]=y[N-1]/A[S][N-1];for(i=N-1;i>0;i--){temp=0;for(t=i+1;t<=min(i+S,N);t++)temp+=A[i-t+S][t-1]*u[t-1];u[i-1]=(y[i-1]-temp)/A[S][i-1];}}double Det_matrix() //求矩阵行列式值{int i;double det=1;Init_matrix_A();Resolve_LU();for(i=0;i<N;i++)det=det*A[2][i];return det;}float Get_norm() //获得迭代向量模{int i;float normal=0;for(i=0;i<N;i++)normal+=u[i]*u[i];normal=sqrt(normal);return normal;}void Get_yy(float normal) //迭代向量单位化{int i;for(i=0;i<N;i++){y[i]=u[i]/normal;yy[i]=y[i];}}void Get_value_s() //获得绝对值最小的特征值{int i;value2=value1;value1=0;for(i=0;i<N;i++)value1+=yy[i]*u[i];value1=1/value1;}void Value_min() //反幂法求绝对值最小的特征值{float norm=0;int count=0;value1=0,value2=0;Init_u();norm=Get_norm();Get_yy(norm);Back_substitution();Get_value_s();while(count<10000){count++;norm=Get_norm();Get_yy(norm);Back_substitution();Get_value_s();if(fabs((value2-value1)/value1)<e)break;}value_s=value1;}float Get_cond_A() //求矩阵条件数{float cond1;cond1=fabs(value_abs_max/value_s);return cond1;}void Value_translation_min() //偏移条件下反幂法求特征值{int i,k;float tr;for(k=1;k<K+1;k++){tr=value_1+k*(value_N-value_1)/40;Init_matrix_A();for(i=0;i<N;i++)A[2][i]-=tr;Resolve_LU();Value_min();value_s+=tr;printf("k=%d =>>>λi%d=%.13e\n",k,k,value_s);}}void main(){float cond;double value_det;printf("Contactme:****************\n");Init_matrix_A(); //初始化矩阵AThe_value(); //获取绝对值最大的特征值λ_501 The_Other_value(); //获取特征值λ_1printf("λ1=%.13e\n",value_1);printf("λ501=%.13e\n",value_N);value_det=Det_matrix(); //求矩阵行列式值Value_min(); //反幂法求绝对值最小的特征值printf("λs=%.13e\n",value_s);cond=Get_cond_A(); //求矩阵条件数Value_translation_min();//偏移条件下反幂法求特征值printf("cond_A=%.13e\n",cond);printf("value_det=%.13e\n",value_det);}3、程序运行结果:4、迭代初始向量的选取对计算结果的影响:本次计算实习求矩阵A的具有某些特征的特征值,主要用到的方法是幂法和反幂法,这两种方法从原理上看都是迭代法,因此迭代初始向量的选择对计算结果会产生一定影响,主要表现在收敛速度上。
七、矩阵特征值的乘幂方法和反乘幂方法
1、用幂法计算矩阵A的主特征值和对应的特征向量。
function [k,lambda,Vk,Wc]=mifa(A,V0,jd,max1)lambda=0;k=1;Wc=1;jd=jd*0.1;state=1;V=V0;while((k<=max1)&(state==1))Vk=A*V;[m j]=max(abs(Vk));mk=m*sign(Vk(j));tzw=abs(lambda-mk);Vk=(1/mk)*Vk;txw=norm(V-Vk);Wc=max(txw,tzw);V=Vk;lambda=mk;state=0;if(Wc>jd)state=1;endk=k+1;endif(Wc<=jd)disp('迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:')elsedisp('迭代次数k已经达到最大迭代次数max1,主特征值的迭代值lambda,主特征向量的迭代向量Vk,相邻两次迭代的误差Wc如下:')endVk=V;k=k-1;Wc;>> A=[1 -1;2 4];>> V0=[1,1]';>> [k,lambda,Vk,Wc]=mifa(A,V0,0.00001,100)迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:k =33lambda =3.0000Vk =-0.50001.0000Wc =8.6919e-007>> [V,D]=eig(A)V =-0.7071 0.44720.7071 -0.8944D =2 00 3>> Dzd=max(diag(D))Dzd =3>> wuD=abs(Dzd-lambda)wuD =1.7384e-006>> wuV=V(:,2)./VkwuV =-0.8944-0.8944>> A=[1 2 3;2 1 3;3 3 6];>> V0=[1 1 1]';>> [k,lambda,Vk,Wc]=mifa(A,V0,0.00001,100)迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:k =3lambda =9Vk =0.50000.50001.0000Wc =>> [V,D]=eig(A)V =0.7071 0.5774 0.4082-0.7071 0.5774 0.40820 -0.5774 0.8165D =-1.0000 0 00 -0.0000 00 0 9.0000>> Dzd=max(diag(D))Dzd =9>> wuD=abs(Dzd-lambda)wuD =>> wuV=V(:,2)./VkwuV =1.15471.1547-0.5774>> A=[1 2 2;1 -1 1;4 -12 1];>> V0=[1 1 1]';>> [k,lambda,Vk,Wc]=mifa(A,V0,0.00001,100)迭代次数k已经达到最大迭代次数max1,主特征值的迭代值lambda,主特征向量的迭代向量Vk,相邻两次迭代的误差Wc如下:k =100lambda =-0.0909Vk =1.00001.00001.0000Wc =1.9582>> [V,D]=eig(A)V =0.9045 -0.7255 -0.72550.3015 -0.2176 - 0.0725i -0.2176 + 0.0725i-0.3015 0.5804 - 0.2902i 0.5804 + 0.2902iD =1.0000 0 00 -0.0000 + 1.0000i 00 0 -0.0000 - 1.0000i>> Dzd=max(diag(D))Dzd =1.0000>> wuD=abs(Dzd-lambda)wuD =1.0909>> wuV=V(:,2)./VkwuV =-0.7255-0.2176 - 0.0725i0.5804 - 0.2902i(4)>> A=[-4 14 0;-5 13 0;-1 0 2];>> V0=[1 1 1]';>> [k,lambda,Vk,Wc]=mifa(A,V0,0.00001,100)迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:k =22lambda =6.0000Vk =1.00000.7143-0.2500Wc =8.1744e-007>> [V,D]=eig(A)V =0 0.7974 0.66670 0.5696 0.33331.0000 -0.1994 -0.6667D =2.0000 0 00 6.0000 00 0 3.0000>> Dzd=max(diag(D))Dzd =6.0000>> wuD=abs(Dzd-lambda)wuD =8.1744e-007>> wuV=V(:,2)./VkwuV =0.79740.79740.79742、用原点位移反幂法计算矩阵A的特征值和对应的特征向量。
幂法-反幂法求解矩阵最大最小特征值及其对应的特征向量
幂法-反幂法求解矩阵最大最小特征值及其对应的特征向量数值计算解矩阵的按模最大最小特征值及对应的特征向量一.幂法1. 幂法简介:当矩阵A 满足一定条件时,在工程中可用幂法计算其主特征值(按模最大)及其特征向量。
矩阵A 需要满足的条件为: (1) 的特征值为A i n λλλλ,0||...||||21≥≥≥>(2) 存在n 个线性无关的特征向量,设为n x x x ,...,,211.1计算过程:i ni i i u xx αα,1)0()0(∑==,有对任意向量不全为0,则有1111112211211111111011)()(...u u a u a u λu λαu αA x A Ax x k n n k n k k ni ik i i ni i i k )(k (k))(k αλλλλλα++++=+=+++≈?+++======∑∑Λ 可见,当||12λλ越小时,收敛越快;且当k 充分大时,有1)1111)11111λαλαλ===+++(k )(k k(k k )(k x x u x u x ,对应的特征向量即是)(k x 1+。
2 算法实现.,, 3,,1 , ).5()5(,,,,||).4();max(,).3()(max(;0,1).2(,).1()()()(停机否则输出失败信息转置若转否则输出若计算最大迭代次数,误差限,初始向量输入矩阵βλβεβλβλε←+←<<-←←=←←k k N k y x Ay x x abs x y k N x A k k k3 matlab 程序代码function [t,y]=lpowerA,x0,eps,N) % t 为所求特征值,y是对应特征向量k=1;z=0; % z 相当于λy=x0./max(abs(x0)); % 规范化初始向量x=A*y; % 迭代格式b=max(x); % b 相当于βif abs(z-b)<="">t=max(x);return;endwhile abs(z-b)>eps && k<n< p="">k=k+1;z=b;y=x./max(abs(x));x=A*y;b=max(x);end[m,index]=max(abs(x)); % 这两步保证取出来的按模最大特征值t=x(index); % 是原值,而非其绝对值。
幂法求矩阵特征值
一. 问题描述用幂法与反幂法求解矩阵特征值求n 阶方阵A 的特征值和特征向量,是实际计算中常常碰到的问题,如:机械、结构或电磁振动中的固有值问题等。
对于n 阶矩阵A ,若存在数λ和n 维向量x 满足 Ax=λx (1) 则称λ为矩阵A 的特征值,x 为相应的特征向量。
由线性代数知识可知,特征值是代数方程 |λI-A|=λn+a 1λ1-n +…+a 1-n λ+a n =0 (2)的根。
从表面上看,矩阵特征值与特征向量的求解问题似乎很简单,只需求解方程(2)的根,就能得到特征值λ,再解齐次方程组(λI-A )x=0 (3) 的解,就可得到相应的特征向量。
上述方法对于n 很小时是可以的。
但当n 稍大时,计算工作量将以惊人的速度增大,并且由于计算带有误差,方程(2)未必是精确的特征方程,自然就不必说求解方程(2)与(3)的困难了。
幂法与反幂法是一种计算矩阵主特征值及对应特征向量的迭代方法, 特别是用于大型稀疏矩阵。
这里用幂法与反幂法求解带状稀疏矩阵A[501][501]的特征值。
二. 算法设计1. 幂法(1)取初始向量u )0((例如取u)0(=(1,1,…1)T),置精度要求ε,置k=1.(2)计算v)(k =Au)1(-k , m k =max(v)(k ), u)(k = v)(k / m k(3)若| m k -m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u )(k 作为相应的特征向量)否则置k=k+1,转(2) 2. 反幂法 (1)取初始向量u)0((例如取u)0(=(1,1,…1)T),置精度要求ε,置k=1.(2)对A 作LU 分解,即A=LU (3)解线性方程组 Ly )(k =u)1(-k ,Uv)(k =y)(k(4)计算mk =max(v)(k), u)(k= v)(k/ mk(5)若|mk -m1-k|<ε,则停止计算(1/m k作为绝对值最小特征值nλ,u)(k作为相应的特征向量);否则置k=k+1,转(3).三.程序框图1.主程序2.子程序(1). 幂法迭代程序框图(2). 反幂法迭代程序框图四. 结果显示计算结果如下:矩阵A 的按模最大特征值为:-1.070011361487e+001 矩阵A 的按模最小特征值为:-5.557910794230e-003 矩阵A 最大的特征值为:9.724634101479e+000 矩阵A 最小的特征值为:-1.070011361487e+001与各k μ(1,2,...,39)k =最接近的ik λ(用[]V k 表示)的值如下:v[ 1]=-1.018293403315e+001 u[ 1]=-1.018949492196e+001 v[ 2]=-9.585707425068e+000 u[ 2]=-9.678876229054e+000 v[ 3]=-9.172672423928e+000 u[ 3]=-9.168257536145e+000v[ 4]=-8.652284007898e+000 u[ 4]=-8.657638843237e+000 v[ 5]=-8.0934********e+000 u[ 5]=-8.147020150328e+000 v[ 6]=-7.659405407692e+000 u[ 6]=-7.636401457419e+000 v[ 7]=-7.119684648691e+000 u[ 7]=-7.125782764510e+000 v[ 8]=-6.611764339397e+000 u[ 8]=-6.615164071601e+000 v[ 9]=-6.0661********e+000 u[ 9]=-6.104545378693e+000 v[10]=-5.585101052628e+000 u[10]=-5.593926685784e+000 v[11]=-5.114083529812e+000 u[11]=-5.0833********e+000 v[12]=-4.578872176865e+000 u[12]=-4.572689299966e+000 v[13]=-4.096470926260e+000 u[13]=-4.062070607058e+000 v[14]=-3.554211215751e+000 u[14]=-3.551451914149e+000 v[15]=-3.0410********e+000 u[15]=-3.040833221240e+000 v[16]=-2.533970311130e+000 u[16]=-2.530214528331e+000 v[17]=-2.003230769563e+000 u[17]=-2.019595835422e+000 v[18]=-1.503557611227e+000 u[18]=-1.508977142514e+000 v[19]=-9.935586060075e-001 u[19]=-9.983584496049e-001 v[20]=-4.870426738850e-001 u[20]=-4.877397566962e-001 v[21]=2.231736249575e-002 u[21]=2.287893621262e-002 v[22]=5.324174742069e-001 u[22]=5.334976291214e-001 v[23]=1.052898962693e+000 u[23]=1.044116322030e+000 v[24]=1.589445881881e+000 u[24]=1.554735014939e+000 v[25]=2.060330460274e+000 u[25]=2.065353707848e+000 v[26]=2.558075597073e+000 u[26]=2.575972400756e+000 v[27]=3.080240509307e+000 u[27]=3.086591093665e+000 v[28]=3.613620867692e+000 u[28]=3.597209786574e+000 v[29]=4.0913********e+000 u[29]=4.107828479483e+000 v[30]=4.603035378279e+000 u[30]=4.618447172392e+000 v[31]=5.132924283898e+000 u[31]=5.129065865300e+000 v[32]=5.594906348083e+000 u[32]=5.639684558209e+000 v[33]=6.080933857027e+000 u[33]=6.150303251118e+000 v[34]=6.680354092112e+000 u[34]=6.660921944027e+000 v[35]=7.293877448127e+000 u[35]=7.171540636935e+000 v[36]=7.717111714236e+000 u[36]=7.682159329844e+000 v[37]=8.225220014050e+000 u[37]=8.192778022753e+000 v[38]=8.648666065193e+000 u[38]=8.703396715662e+000 v[39]=9.254200344575e+000 u[39]=9.214015408571e+000五.程序#include<stdio.h>#include<math.h>#define N 501void main(){double Q[5][501];double mifa(double A[5][501]);double fanmifa(double A[5][501]);double lm,lmax,lmin,ls,delta,u[39],v[39];int i,j,k;double A[5][501];A[0][0]=A[0][1]=A[1][0]=A[3][500]=A[4][499]=A[4][500]=0.0;//输入*501矩阵for(i=2;i<N;i++)A[0][i]=-0.064;for(i=1;i<N;i++)A[1][i]=0.16;for(i=0;i<N;i++)A[2][i]=(1.64-0.024*(i+1))*sin(0.2*(i+1))-0.64*exp(0.1/(i+1));for(i=0;i<500;i++)A[3][i]=0.16;for(i=0;i<499;i++)A[4][i]=-0.064;for(i=0;i<5;i++)//保存Afor(j=0;j<501;j++)Q[i][j]=A[i][j];lm=mifa(A);//按模最大特征值,函数mifa()不会改变矩阵A的值,不需还原for(i=0;i<N;i++) //平移A{A[2][i]=A[2][i]-lm;}lmax=mifa(A);//平移后A的按模最大特征值lmax=lmax+lm;//最大特征值或最小特征值if(lmax<lm){lmin=lmax;lmax=lm;}elselmin=lm;for(i=0;i<N;i++)//还原Afor(j=0;j<5;j++)A[j][i]=Q[j][i];ls=fanmifa(A);//按模最小特征值for(i=0;i<N;i++)//还原Afor(j=0;j<5;j++)A[j][i]=Q[j][i];for(k=0;k<39;k++)//计算u1-u39u[k]=lmin+(k+1)*((lmax-lmin)/40);for(k=0;k<39;k++){for(j=0;j<N;j++)A[2][j]=A[2][j]-u[k];v[k]=fanmifa(A)+u[k];for(i=0;i<N;i++)//还原Afor(j=0;j<5;j++)A[j][i]=Q[j][i];}printf("矩阵的按模最大特征值为:%.12e",lm);printf("\n");printf("矩阵的按模最小特征值为:%.12e",ls);printf("\n");printf("矩阵最大的特征值为:%.12e",lmax);printf("\n");printf("矩阵最小的特征值为:%.12e",lmin);printf("\n");for(k=0;k<39;k++){printf("v[%2d]=%.12e ",k+1,v[k]);printf("u[%2d]=%.12e",k+1,u[k]);printf("\n");}}double sgn(double a)//符号函数{if(a>0)return 1;else if(a=0)return 0;else return -1;}int max2(int a,int b){return a>b?a:b;}int max3(int a,int b,int c)return max2(a,b)>c?max2(a,b):c;}int min(int a,int b){return a<b?a:b;}void LU(double A[5][501],double u[501],double B[501])//LU分解法{double X[501];int i,j,k,t,l;double m=0,n=0;for(k=1;k<=N;k++)//求L,U{for(j=k;j<=min(N,k+2);j++)//U{m=0;for(t=max3(1,k-2,j-2);t<=k-1;t++){m+=A[k-t+2][t-1]*A[t-j+2][j-1];}A[k-j+2][j-1]=A[k-j+2][j-1]-m;}for(i=k+1;i<=min(N,k+2);i++)//Lif(k<N){n=0;for(l=max3(1,i-2,k-2);l<=k-1;l++){n+=A[i-l+2][l-1]*A[l-k+2][k-1];}A[i-k+2][k-1]=(A[i-k+2][k-1]-n)/A[2][k-1];}}for(i=2;i<=N;i++)//回代过程{m=0;for(t=max2(1,i-2);t<=i-1;t++)m+=A[i-t+2][t-1]*B[t-1];B[i-1]=B[i-1]-m;}X[N-1]=B[N-1]/A[2][N-1];//回代过程for(i=N-1;i>=1;i--){n=0;for(t=i+1;t<=min(N,i+2);t++)n+=A[i-t+2][t-1]*X[t-1];X[i-1]=(B[i-1]-n)/A[2][i-1];}for(i=1;i<=N;i++)//输出方程结果{u[i-1]=X[i-1];}}double mifa(double A[5][501])//幂法{int i,j,l=0;double u[501],t[501];double y[501];double h,b,c;c=0;for(i=0;i<N;i++)//幂法初始向量u[i]=1;while(1){for(i=0;i<N;i++)t[i]=0;h=u[0];for(i=0;i<N;i++)//无穷范数{if(fabs(h)<fabs(u[i])){h=u[i];l=i;}}for(i=0;i<N;i++)y[i]=u[i]/fabs(h);for(i=2;i<499;i++){for(j=i-2;j<=i+2;j++){t[i]=t[i]+A[i-j+2][j]*y[j];}u[i]=t[i];u[0]=A[2][0]*y[0]+A[1][1]*y[1]+A[0][2]*y[2];u[1]=A[3][0]*y[0]+A[2][1]*y[1]+A[1][2]*y[2]+A[0][3]*y[3];u[499]=A[4][497]*y[497]+A[3][498]*y[498]+A[2][499]*y[499]+A[1][N-1]*y[N-1];u[N-1]=A[4][498]*y[498]+A[3][499]*y[499]+A[2][N-1]*y[N-1];b=sgn(h)*u[l];if((fabs(b-c)/fabs(b))<=1e-12){//printf("幂法成功!");//printf("\n");break;}c=b;}return b;}double fanmifa(double A[5][501])//反幂法{double u[501],y[501];double P[5][501],Y[501];//LU分解前用于保存A和y的值double m=0,n=0,b=0,c=0;int i,j;for(i=0;i<N;i++)//反幂法初始向量u[0]=1;while(1){b=0;n=0;for(i=0;i<N;i++)n=n+u[i]*u[i];n=sqrt(n);for(i=0;i<N;i++)y[i]=u[i]/n;for(i=0;i<N;i++)//保存A和y{Y[i]=y[i];for(j=0;j<5;j++){P[j][i]=A[j][i];}}LU(A,u,y);//LU分解法,会改变A,y,u的值(目的只需求出u)for(i=0;i<N;i++)//还原A和yy[i]=Y[i];for(j=0;j<5;j++){A[j][i]=P[j][i];}}for(i=0;i<N;i++)b=b+y[i]*u[i];if((fabs(b-c)/fabs(b))<=1e-12){//printf("反幂法成功!");//printf("\n");break;}c=b;}return 1/b;}。
幂法,反幂法求解矩阵最大最小特征值及其对应的特征向量(DOC)
数值计算解矩阵的按模最大最小特征值及对应的特征向量一.幂法1. 幂法简介:当矩阵A 满足一定条件时,在工程中可用幂法计算其主特征值(按模最大)及其特征向量。
矩阵A 需要满足的条件为: (1) 的特征值为A i n λλλλ,0||...||||21≥≥≥>(2) 存在n 个线性无关的特征向量,设为n x x x ,...,,21 1.1计算过程:i ni i i u xx αα,1)0()0(∑==,有对任意向量不全为0,则有1111112211211111111011)()(...u u a u a u λu λαu αA x A Ax x k n n k n k k ni ik i i ni i i k )(k (k))(k αλλλλλα++++=+=+++≈⎥⎦⎤⎢⎣⎡+++======∑∑ 可见,当||12λλ越小时,收敛越快;且当k 充分大时,有1)1111)11111λαλαλ=⇒⎪⎩⎪⎨⎧==+++(k )(k k(k k )(k x x u x u x ,对应的特征向量即是)(k x 1+。
2 算法实现.,, 3,,1 , ).5()5(,,,,||).4();max(,).3()(max(;0,1).2(,).1()()()(停机否则输出失败信息转置若转否则输出若计算最大迭代次数,误差限,初始向量输入矩阵βλβεβλβλε←+←<<-←←=←←k k N k y x Ay x x abs x y k N x A k k k3 matlab 程序代码function [t,y]=lpowerA,x0,eps,N) % t 为所求特征值,y是对应特征向量k=1;z=0; % z 相当于λy=x0./max(abs(x0)); % 规范化初始向量x=A*y; % 迭代格式b=max(x); % b 相当于βif abs(z-b)<eps % 判断第一次迭代后是否满足要求t=max(x);return;endwhile abs(z-b)>eps && k<Nk=k+1;z=b;y=x./max(abs(x));x=A*y;b=max(x);end[m,index]=max(abs(x)); % 这两步保证取出来的按模最大特征值t=x(index); % 是原值,而非其绝对值。
数值分析试验幂法与反幂法matlab教程文件
数值分析试验幂法与反幂法m a t l a b一、问题的描述及算法设计(一)问题的描述我所要做的课题是:对称矩阵的条件数的求解设计1、求矩阵A 的二条件数问题 A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----210121012 2、设计内容:1)采用幂法求出A 的. 2)采用反幂法求出A 的.3)计算A 的条件数 ⅡA Ⅱ2* ⅡA -1Ⅱ2=cond2(A )=/.(精度要求为10-6)3、设计要求1)求出ⅡA Ⅱ2。
2)并进行一定的理论分析。
(二)算法设计1、幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1.(2)计算v )(k =Au )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k(3)若| m k = m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u )(k 作为相应的特征向量)否则置k=k+1,转(2)2、反幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1.(2)对A 作LU 分解,即A=LU(3)解线性方程组 Ly )(k =u )1(-k ,Uv )(k =y )(k(4)计算m k =max(v )(k ), u )(k = v )(k / m k(5)若|mk =m1-k|<ε,则停止计算(1/mk作为绝对值最小特征值nλ,u)(k作为相应的特征向量);否则置k=k+1,转(3).二、算法的流程图(一)幂法算法的流程图(二)反幂法算法的流程图三、算法的理论依据及其推导(一)幂法算法的理论依据及推导幂法是用来确定矩阵的主特征值的一种迭代方法,也即,绝对值最大的特征值。
稍微修改该方法,也可以用来确定其他特征值。
幂法的一个很有用的特性是它不仅可以生成特征值,而且可以生成相应的特征向量。
实际上,幂法经常用来求通过其他方法确定的特征值的特征向量。
幂法与反幂法
幂法与反幂法1 功能 幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法, 特别是用于大型稀疏矩阵。
反幂法用来计算矩阵按模最小的特征值及其特征向量,也可用来计算对应与一个给定近似特征值的特征向量。
2算法描述2.1 幂法(1)取初始向量u)0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1. (2)计算v )(k =Au )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k(3)若| m k = m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u)(k 作为相应的特征向量)否则置k=k+1,转(2) 2.2 反幂法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T),置精度要求ε,置k=1. (2)对A 作LU 分解,即A=LU(3)解线性方程组 Ly)(k =u )1(-k ,Uv )(k =y )(k (4)计算m k =max(v )(k ), u )(k = v )(k / m k(5)若|m k =m 1-k |<ε,则停止计算(1/m k 作为绝对值最小特征值n λ,u)(k 作为相应的特征向量);否则置k=k+1,转(3).3 Matlab 程序的实现3.1 幂法function [m,u]=pow(A,ep,N)%A 为矩阵;ep 为精度要求;N 为最大迭代次数;m 为绝对值最大的特征值;u 为对应最大特征值的特征向量。
N=100;ep=1e-6;n=length(A);u=ones(n,1);index=0;k=0;m1=0;while k<=Nv=A*u;[vmax,i]=max(abs(v));m=v(i);u=v/m;if abs(m-m1)<epindex=1;break;endm1=m;k=k+1;end输入:A=[7 3 -2;3 4 -1;-2 -1 3];[m,u]=pow(A,1e-6) Enter结果:m = 9.6056u =1.00000.6056-0.39444.2 反幂法function[m ,u]=pow_inv(A,ep,N)%A为矩阵;ep为精度要求;N为最大迭代次数;m为绝对值最大的特征值;u为对应最大特征值的特征向量。
数值方法课程设计幂法反幂法计算矩阵特征值和特征向量-附Matlab程序
矩阵的特征值与特征向量的计算摘要物理,力学,工程技术中的很多问题在数学上都归结于求矩阵特征值的问题,例如振动问题(桥梁的振动,机械的振动,电磁振动等)、物理学中某些临界值的确定问题以及理论物理中的一些问题。
矩阵特征值的计算在矩阵计算中是一个很重要的部分,本文使用幂法和反幂法分别求矩阵的按模最大,按模最小特征向量及对应的特征值。
幂法是一种计算矩阵主特征值的一种迭代法,它最大的优点是方法简单,对于稀疏矩阵比较合适,但有时收敛速度很慢。
其基本思想是任取一个非零的初始向量。
由所求矩阵构造一向量序列。
再通过所构造的向量序列求出特征值和特征向量。
反幂法用来计算矩阵按模最小特征向量及其特征值,及计算对应于一个给定近似特征值的特征向量。
本文中主要使用反幂法计算一个矩阵的按模最小特征向量及其对应的特征值。
计算矩阵按模最小特征向量的基本思想是将其转化为求逆矩阵的按模最大特征向量。
然后通过这个按模最大的特征向量反推出原矩阵的按模最小特征向量。
关键词:矩阵;特征值;特征向量;冥法;反冥法THE CALCULATIONS OF EIGENVALUE AND EIGENVECTOR OF MATRIXABSTRACTPhysics, mechanics, engineering technology in a lot of problems in mathematics are attributed to matrix eigenvalue problem, such as vibration (vibration of the bridge, mechanical vibration, electromagnetic vibration, etc.) in physics, some critical values determine problems and theoretical physics in some of the problems. Matrix eigenvalue calculation is a very important part in matrix computation. In this paper, we use the power method and inverse power method to calculate the maximum of the matrix, according to the minimum characteristic vector and the corresponding characteristic value.Power method is an iterative method to calculate the eigenvalues of a matrix. It has the advantage that the method is simple and suitable for sparse matrices, but sometimes the convergence rate is very slow. The basic idea is to take a non - zero initial vector. Construct a vector sequence from the matrix of the matrix. Then the eigenvalues and eigenvectors are obtained by using the constructed vector sequence.The inverse power method is used to calculate the minimum feature vectors and their eigenvalues of the matrix, and to calculate the eigenvalues of the matrix. In this paper, we use the inverse power method to calculate the minimum eigenvalue of a matrix and its corresponding eigenvalues. The basic idea of calculating the minimum characteristic vector of a matrix is to transform it to the maximumc haracteristic vector of the modulus of the inverse matrix. Then, according to the model, the minimum feature vector of the original matrix is introduced.Key words: Matrix ;Eigenvalue ;Eigenvector ;Iteration methods;目录1引言 (1)2相关定理。
幂法和反幂法求矩阵特征值课程知识讲解
v (k ) =Au (k 1) ,m =max(v (k ) ), u (k ) = v (k ) / m
k
k
(3)若|
m= k
m k 1 |<
,则停止计算(m k 作为绝对值最大特征值 1 ,u (k) 作为
相应的特征向量)否则置 k=k+1,转(2)
2、反幂法算法
(1)取初始向量 u (0) (例如取 u (0) =(1,1,…1) T ),置精度要求 ,置 k=1.
要
2.选择合适问题求解的数值计算方法;
求
3.设计程序并进行计算;
4.对结果进行解释说明;
对于幂法和反幂法求解矩阵特征值和特征向量的问题将从问题分析,算 法设计和流程图,理论依据,程序及结果进行阐述该问题。
一.问题的分析:
求 n 阶方阵 A 的特征值和特征向量,是实际计算中常常碰到的问题,如:
采
机械、结构或电磁振动中的固有值问题等。对于 n 阶矩阵 A,若存在数 和
按式(1)计算出 m 和 u (k ) 满足 k
lim
k
m
k
=
1
,
lim u (k ) = x1
k
max( x1 )
(二)反幂法算法的理论依据及推导
反幂法是用来计算绝对值最小的特征值忽然相应的特征向量的方法。是对 幂法的修改,可以给出更快的收敛性。 1、反幂法的迭代格式与收敛性质
设 A 是非奇异矩阵,则零不是特征值,并设特征值为 | 1 |≥| 2 |≥…≥| n1|>| n |
则按 A 1 的特征值绝对值的大小排序,有
| 1 |>| 1 |≥…≥| 1 |
n
n 1
1
用幂法求解矩阵特征值和特征向量
x= -0.3930 -0.9774 0.2921 1.0000 第五题 A=[-1 2 1; 2 -4 1; 1 1 -6 ]; v0=[1 1 1]'; tol=1e-4; [lda,x]=mifa(A,v0,tol) lda = -6.4209
第4页
数值分析实验指导
x= -0.0463 -0.3746 000
( 1, 0, 1, 0, 0, 1 )T 105
1 21.30525 6 1.62139 x1 0.8724,0.5401,0.9973,0.5644,0.4972,1.0 T
第1页
数值分析实验指导
2 1 1 2 1 (3) A= 1 2 1 1 2 1 1 2 T 0 104 取 =( 1, 1, 1, 1, 1 ) 参考结果: 3.7321 3 4 2 1 1 3 1 5 (4) A= 3 1 6 2 4 5 2 1 T 2 取 0 =( 1, 1, 1, 1 ) , 10 。
第3页
数值分析实验指导
x= 0.5000 -0.8660 1.0000 -0.8660 0.5000 第四题 A=[2 1 3 4; 1 -3 1 5; 3 1 6 -2; 4 5 -2 -1 ]; v0=[1 1 1 1]'; tol=1e-2; [lda,x]=mifa(A,v0,tol) lda = -8.0136
下面再考虑主特征值 1 的的计算,用 (vk )i 表示 vk 的第 i 个分量,则
( x ) ( k 1 )i (vk 1 )i 1 1 1 i , (vk )i 1 ( x1 )i ( k )i
故
北航数值分析报告第一次大作业(幂法反幂法)
一、问题分析与算法描述1. 问题的提出:〔1〕用幂法、反幂法求矩阵的按摸最大和最小特征值,并求出相应的特征向量。
其中要求:迭代精度达到。
〔2〕用带双步位移的QR法求上述的全部特征值,并求出每一个实特征值相应的特征向量。
2. 算法的描述:(1) 幂法幂法主要用于计算矩阵的按摸为最大的特征值和相应的特征向量。
其迭代格式为:终止迭代的控制选用。
幂法的使用条件为实矩阵A具有n个线性无关的特征向量,其相应的特征值满足不等式或幂法收敛速度与比值或有关,比值越小,收敛速度越快。
(2) 反幂法反幂法用于计算实矩阵A按摸最小的特征值,其迭代格式为:每迭代一次都要求解一次线性方程组。
当k足够大时,,可近似的作为矩阵A的属于的特征向量。
比值越小,收敛的越快。
反幂法要求矩阵A非奇异。
(3) 带双步位移的QR分解法QR方法适用于计算一般实矩阵的全部特征值,尤其适用于计算中小型实矩阵的全部特征值。
本算例中采用带双步位移的QR方法,可加速收敛,其迭代格式为:二、计算结果与分析1. 计算结果:(1) 幂法:初始条件:最大迭代次数L=1000;向量计算结果:第1次迭代结果:最大特征值:0.00000e+000第2次迭代结果:最大特征值:2.48910e+000 相对误差:1.00000e+000 第3次迭代结果:最大特征值:1.67719e+000 相对误差:第4次迭代结果:最大特征值:-2.10960e+000 相对误差:1.79503e+000 第5次迭代结果:最大特征值:-6.13203e-001 相对误差:2.44030e+000 ……第794次迭代结果:最大特征值:-1.97638e+000 相对误差:最大特征值:-1.97638e+000 相对误差:********************最终迭代结果***************特征值:-1.97638e+000 相对误差:迭代次数:795(2) 反幂法:初始条件:最大迭代次数L=1000;向量运行结果:第1次迭代结果:最大特征值:1.07542e+000第2次迭代结果:最大特征值:-3.66550e+000 相对误差:1.29339e+000 第3次迭代结果:最大特征值:1.22709e+001 相对误差:1.29871e+000 第4次迭代结果:最大特征值:-1.03421e+000 相对误差:1.28650e+001 第5次迭代结果:最大特征值:相对误差:……第995次迭代结果:最大特征值:相对误差:第996次迭代结果:最大特征值:相对误差:最大特征值:相对误差:第998次迭代结果:最大特征值:相对误差:第999次迭代结果:最大特征值:相对误差:第1000次迭代结果:最大特征值:相对误差:******************************超过最大设定迭代次数,迭代失败!(3) 带双步位移的QR法:初始条件:最大迭代次数L=1000;向量运行结果:全部特征值:特征向量〔经谱X数归一化〕:实特征值对应特征向量:-0.062705 -0.022368 0.304372 0.064466 0.521833 -0.157024 0.136942 -0.218108 0.250264 -0.043064 -0.228688 -0.184632 -0.072871 0.124721 0.029070 0.102566 -0.136358 0.167727 0.085747 0.546165 实特征值对应特征向量:-0.018001 0.019652 0.273447 0.070528 0.274896 -0.144015 0.048385 0.376439 -0.583051 -0.054008 -0.168682 -0.113430 -0.034709 0.009204 0.472291 0.125664 -0.190617 0.113145 0.046278 0.059871 实特征值对应特征向量:0.106861 0.087709 -0.024967 -0.020897 0.064302 0.034047 0.535143 0.046383 0.028832 0.003479-0.097276 -0.383801 0.089445 -0.039560 -0.036928 -0.021330 0.014811 0.705836 -0.108904 0.082022 实特征值对应特征向量:-0.055201 0.003399 0.242191 0.102847 0.372470 -0.372826 0.113953 0.240659 -0.310401 -0.076590 -0.244632 -0.192549 -0.077259 0.263328 0.201662 0.154166 -0.407814 0.186782 0.094649 0.173302 实特征值对应特征向量:0.427828 -0.546801 0.007822 -0.382580 0.025199 0.012788 0.033241 0.005389 -0.004065 0.043524 -0.032112 -0.044233 0.135395 -0.006564 0.001214 0.020165 0.011678 0.050001 -0.585765 0.013115 实特征值对应特征向量:0.236032 -0.139250 -0.008143 0.638527 -0.009049 -0.002911 -0.001307 0.003054 0.006515 -0.030134 0.012712 0.011368 -0.018792 -0.001753 -0.005749 -0.014290 -0.005292 -0.014591 0.717590 0.001369 实特征值对应特征向量:-0.227404 -0.048154 0.022615 0.297305 0.070372 0.039927 0.078503 0.015822 -0.012182 0.605334 -0.083616 -0.106270 -0.573963 -0.019907 0.003839 0.051362 0.036567 0.115613 0.332707 0.036954 实特征值对应特征向量:-0.027768 -0.051081 -0.159642 -0.054573 -0.084441 0.118378 0.029553 0.211088 0.203867 0.0486272. 结果分析以上三种方法中,幂法计算共进展了795次迭代才达到收敛,计算量较大,收敛性不好;反幂法计算结果未能收敛,通过进一步分析发现,这是因为反幂法迭代程序未考虑按模最小特征值为复数的情况,造成迭代失败。
矩阵特征值与特征向量的计算
第九章矩阵特征值与特征向量的计算教学目的与要求:掌握用幂法和反幂法求矩阵特征值与特征向量的方法,了解 Jacobi 方法的适用范围和使用方法。
重点和难点:幂法和反幂法■ 教学内容:§1 幂法和反幂法一、幂法幂法的基本思想是给定初始向量(00≠x , 由迭代公式产生向量序列(1( (0,1, 2, +==L k k x Ax k {}(k x :上述向量称为迭代向量。
(1(0(22(0( (0 ⎧=⎪=⎪⎪⎨⎪=⎪⎪⎩LLLLk k x Ax x A x x A x 于是由上式得(1 ( 1(01111( λ++++k i u ======∑∑nnk k k k i i i i i i x Ax A x A a u a 11121112211[]λλλλλ+++⎛⎞⎛⎞=+++⎜⎟⎜⎟⎝⎠⎝⎠L k k k n n n a u a u a u设 ,由10a ≠1(2,3, , i i n λλ>=L 得 1 1lim 0λλ+→∞⎛⎞=⎜⎟⎝⎠k i i i k a u ,于是 121lim 0λλ+→∞=⎛⎞=⎜⎟⎝⎠∑k ni i i k i a u故只要 k 充分大,就有 (1111111121[]λλλ+++=⎛⎞=+≈⎜⎟⎝⎠∑nk k k i i i i 1λx a u a u a u 因此, 可以近似作为与(1 +k x 1λ相应的特征向量。
下面我们通过特征向量来计算特征值1λ。
用 ( k i x 表示的第 i 个分量,由于( k x (1 1111(111( ( λλ++≈k k i i k k i i x a x a u u ,所以 (11( (1,2, , λ+≈=L k i k ix i n x 上式这种由已知非零向量及矩阵 (0x A 的乘幂构造向量序列 kA {}( k x 用来计算矩阵 A 按模最大的特征值1λ与对应的特征向量的方法称为幂法。
例 1 用幂法的规范运算求矩阵的按模最大的特征值及对应的特征向量。
数值分析课程设计+幂法与反幂法MATLAB
一、问题的描述及算法设计(一)问题的描述本次课程设计我所要做的课题是:对称矩阵的条件数的求解设计 1、求矩阵A 的二条件数问题 A=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----210121012 2、设计内容: 1)采用幂法求出A 的. 2)采用反幂法求出A 的.3)计算A 的条件数 ⅡA Ⅱ2* ⅡA -1Ⅱ2=cond2(A )=/.(精度要求为10-6)3、设计要求 1)求出ⅡA Ⅱ2。
2)并进行一定的理论分析。
(二)算法设计1、幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1. (2)计算v )(k =Au )1(-k ,m k =max(v )(k ), u )(k = v )(k / m k(3)若| m k = m 1-k |<ε,则停止计算(m k 作为绝对值最大特征值1λ,u )(k 作为相应的特征向量)否则置k=k+1,转(2) 2、反幂法算法(1)取初始向量u )0((例如取u )0(=(1,1,…1)T ),置精度要求ε,置k=1. (2)对A 作LU 分解,即A=LU(3)解线性方程组 Ly )(k =u )1(-k ,Uv )(k =y )(k (4)计算m k =max(v )(k ), u )(k = v )(k / m k(5)若|m k =m 1-k |<ε,则停止计算(1/m k 作为绝对值最小特征值n λ,u )(k 作为相应的特征向量);否则置k=k+1,转(3).二、算法的流程图(一)幂法算法的流程图(二)反幂法算法的流程图三、算法的理论依据及其推导(一)幂法算法的理论依据及推导幂法是用来确定矩阵的主特征值的一种迭代方法,也即,绝对值最大的特征值。
稍微修改该方法,也可以用来确定其他特征值。
幂法的一个很有用的特性是它不仅可以生成特征值,而且可以生成相应的特征向量。
实际上,幂法经常用来求通过其他方法确定的特征值的特征向量。
数值分析之幂法及反幂法C语言程序实例
数值分析之幂法及反幂法C 语言程序实例1、算法设计方案:①求1λ、501λ和s λ的值:s λ:s λ表示矩阵的按模最小特征值,为求得s λ直接对待求矩阵A 应用反幂法即可。
1λ、501λ:已知矩阵A 的特征值满足关系 1n λλ<<L ,要求1λ、及501λ时,可按如下方法求解:a . 对矩阵A 用幂法,求得按模最大的特征值1m λ。
b . 按平移量1m λ对矩阵A 进行原点平移得矩阵1m BA I λ=+,对矩阵B 用反幂法求得B 的按模最小特征值2m λ。
c . 321m m m λλλ=-则:113min(,)m m λλλ=,13max(,)n m m λλλ=即为所求。
②求和A 的与数5011140k k λλμλ-=+最接近的特征值ik λ(k=0,1,…39):求矩阵A 的特征值中与k μ最接近的特征值的大小,采用原点平移的方法: 先求矩阵 B=A-k μI 对应的按模最小特征值k β,则k β+k μ即为矩阵A 与k μ最接近的特征值。
重复以上过程39次即可求得ik λ(k=0,1,…39)的值。
③求A 的(谱范数)条件数2cond()A 和行列式det A :在(1)中用反幂法求矩阵A 的按模最小特征值时,要用到Doolittle 分解方法,在Doolittle 分解完成后得到的两个矩阵分别为L 和U ,则A 的行列式可由U 阵求出,即:det(A)=det(U)。
求得det(A)不为0,因此A 为非奇异的实对称矩阵,则: max 2()scond A λλ=,max λ和s λ分别为模最大特征值与模最小特征值。
2、程序源代码:#include<>#include<>#include<>#define N 501 3e\n",k,k,value_s);}}void main(){float cond;double value_det;printf("Contact me\n");Init_matrix_A(); 3e\n",value_1);printf("λ501=%.13e\n",value_N);value_det=Det_matrix(); 3e\n",value_s);cond=Get_cond_A(); 3e\n",cond);printf("value_det=%.13e\n",value_det); }3、程序运行结果:4、迭代初始向量的选取对计算结果的影响:本次计算实习求矩阵A的具有某些特征的特征值,主要用到的方法是幂法和反幂法,这两种方法从原理上看都是迭代法,因此迭代初始向量的选择对计算结果会产生一定影响,主要表现在收敛速度上。
关于幂法与反幂法的研究
东北大学秦皇岛分校数值计算课程设计报告幂法及反幂法学院数学与统计学院专业信息与计算科学学号******姓名***指导教师*** ***成绩教师评语:指导教师签字:2014年07月07日1 绪论1.1 课题的背景矩阵特征值的数值算法,在科学和工程技术中很多问题在数学上都归结为矩阵的特征值问题。
例如,结构的振动波形和频率可分别由适当矩阵的特征向量和特征值来决定,结构的稳定性由特征值决定;又如机械和机件的振动问题,无线电工及光学系统第电磁振荡问题和物理学中各种临界值都牵涉到特征值计算。
所以说研究利用数学软件解决求特征值的问题是非常必要的。
求矩阵特征值的一种方法是从原始矩阵出发,求出其特征多项式及其根,即得到矩阵的特征值。
但高次多项式求根问题尚有困难,而且重根的计算精度较低。
另外,原始矩阵求特征多项式系数的过程,对舍入误差非常敏感,对最终结果影响很大。
所以,从数值计算的观点来看,这种求矩阵特征值的方法不够好。
实际问题中,有时需要的并不是所有的特征根,而是最大最小的实特征根。
称模最大的特征根为主特征值。
解决特征值计算的算法有很多种,古老的雅可比方法、兰乔斯方法以及较为常用的幂法、QR方法。
QR方法是一种变换法,可求全部的特征值;幂法和反幂法是迭代法,只求模最大与模最小的特征值及特征向量。
下面主要来研究一下幂法、反幂法,利用MATLAB解决矩阵特征值问题。
幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法,特别适用于大型稀疏矩阵。
反幂法是计算海森伯格阵或三对角阵的对应一个给定近似特征值的特征向量的有效方法之一。
1.2 概念的认识对于n阶矩阵A,若存在数λ和n维向量x满足:x=,则称λ为矩阵A的特征值,Axλx为相应的特征向量。
病态矩阵:求解方程组时对数据的小扰动很敏感的矩阵。
例如希尔伯特矩阵就是一类著名的病态矩阵。
本次课题不对病态矩阵做深入研究。
非亏损矩阵:矩阵存在n个线性无关的特征向量,即有一个完全的特征向量组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
反幂法流程图
三、算法的理论依据及其推导
(一)幂法算法的理论依据及推导
幂法是用来确定矩阵的主特征值的一种迭代方法,也即,绝对值最大的特征值。稍微修改该方法,也可以用来确定其他特征值。幂法的一个很有用的特性是它不仅可以生成特征值,而且可以生成相应的特征向量。实际上,幂法经常用来求通过其他方法确定的特征值的特征向量。
Ax= x (1)
则称 为矩阵A的特征值,x为相应的特征向量。
由高等代数知识可知,特征值是代数方程
| I-A|= +a +…+a +a =0 (2)
的根。从表面上看,矩阵特征值与特征向量的求解问题似乎很简单,只需求解方程(2)的根,就能得到特征值 ,再解齐次方程组
( I-A)x=0 (3)
的解,就可得到相应的特征向量。
则按A 的特征值绝对值的大小排序,有
| |>| |≥…≥| |
对A 实行幂法,就可得A 的绝对值最大的特征值1/ 和相应的特征向量,即A的绝对值最小的特征值和相应的特征向量。
由于用A 代替A作幂法计算,因此该方法称为反幂法,反幂法的迭代格式为 v = A u ,m =max(v ), u = v / m (2)
所以线性方程组(3)改为
Ly =u ,Uv =y
四、算法程序设计代码
幂法程序,在matlab中建立一个M文件并保存。
%pow.m
function [m,u,index,k]=pow(A,u,ep,it_max)
if nargin<4
it_max=1000;
end
if nargin<3
ep=1e-5;
反幂法程序设计代码:
在matlab中建立一个M文件并保存。
%pow_inv.m
function[m,u,index,k]=pow_inv(A,u,ep,it_max)
if nargin<4
it_max=1000;
end
if nargin<3
ep=1e-5;
end
n=length(A);
index=0;
题目
幂法和反幂法求矩阵特征值课程设计
具
体
容
随机产生一对称矩阵,对不同的原点位移和初值(至少取3个)分别使用幂法求计算矩阵的主特征值及主特征向量,用反幂法求计算矩阵的按模最小特征值及特征向量,并比较不同的原点位移和初值说明收敛。
要求
1.认真读题,了解问题的数学原形;
2.选择合适问题求解的数值计算方法;
2、对于幂法的定理
按式(1)计算出m 和u 满足
m = , u =
(二)反幂法算法的理论依据及推导
反幂法是用来计算绝对值最小的特征值忽然相应的特征向量的方法。是对幂法的修改,可以给出更快的收敛性。
1、反幂法的迭代格式与收敛性质
设A是非奇异矩阵,则零不是特征值,并设特征值为
| |≥| |≥…≥| |>| |
二.算法设计及流程图
1、幂法算法
(1)取初始向量u (例如取u =(1,1,…1) ),置精度要求 ,置k=1.
(2)计算
v =Au ,m =max(v ), u = v / m
(3)若| m = m |< ,则停止计算(m 作为绝对值最大特征值 ,u 作为相应的特征向量)否则置k=k+1,转(2)
2、对于反幂法的定理
按式(2)计算出的m 和u 满足:
m = , u =
在式(2)中,需要用到A ,这给计算带来很大的不方便,因此,把(2)式的第一式改为求解线性方程组
A v = u (3)
但由于在反幂法中,每一步迭代都需求解线性方程组(3)式,迭代做了大量的重复计算,为了节省工作量,可事先把矩阵A作LU分解,即 A=LU
3.设计程序并进行计算;
4.对结果进行解释说明;
采用方法
及结果
说明
对于幂法和反幂法求解矩阵特征值和特征向量的问题将从问题分析,算法设计和流程图,理论依据,程序及结果进行阐述该问题。
一.问题的分析:
求n阶方阵A的特征值和特征向量,是实际计算中常常碰到的问题,如:机械、结构或电磁振动中的固有值问题等。对于n阶矩阵A,若存在数 和n维向量x满足
k=0;
m1=0;
m0=0;
I=eye(n);
T=A-m0*I;
invT=inv(T);
while k<=it_max
v=invT*u;
[vmax,i]=max(abs(v));
m=v(i);
u=v/m;
if abs(m-m1)<ep
index=1;
m1=m;
k=k+1;
end
在matlab输入面板,输入
A=rand(4);%产生一个4维随机矩阵
B=A+A’;
u=[1 1 1 1]’;%设立初始向量
[m,u,index,k]=pow(B,u,ep,it_max)%最多可省略2个参数
程序结束。
在M文件中可以通过改变m0的值改变原点位移,从而达到原点位移加速。
上述方法对于n很小时是可以的。但当n稍大时,计算工作量将以惊人的速度增大,并且由于计算带有误差,方程(2)未必是精确的特征方程,自然就不必说求解方程(2)与(3)的困难了。幂法是一种计算矩阵主特征值(矩阵按模最大的特征值)及对应特征向量的迭代方法,特别是用于大型稀疏矩阵。反幂法是计算海森伯格阵或三角阵的对应一个给定近似特征值的特征向量的有效方法之一。
end
n=length(A);
index=0;
k=0;
m1=0;
m0=0;
I=eye(n);
T=A-m0*I;
while k<=it_max
v=T*u;
[vmax,i]=max(abs(v));
m=v(i);
u=v/m;
if abs(m-m1)<ep;
index=1;
break;
end
m=m+m0;
2、反幂法算法
(1)取初始向量u (例如取u =(1,1,…1) ),置精度要求 ,置k=1.
(2)对A作LU分解,即A=LU
(3)解线性方程组 Ly =u ,Uv =y
(4)计算
m =max(v ), u = v / m
(5)若|m =m |< ,则停止计算(1/m 作为绝对值最小特征值 ,u 作为相应的特征向量);否则置k=k+1,转(3).
1、幂法的迭代格式与收敛性质
设n阶矩阵A的特征值 , ,…, 是按绝对值大小编号的,x (i=1,2,…,n)为对应 的特征向量,且 为单根,即
| |>| |≥…≥| |
则计算最大特征值与特征向量的迭代格式为
v =Au ,m =max(v ), u = v / m (1)
其中max(v )表示向量v 绝对值的最大分量。