15章 求矩阵特征值和特征向量
第15章求矩阵特征值和特征向量
幂法
幂法规范化算法
1.输入矩阵a、初始向量u,误差eps2.k。1
3.计算v(k)。au(k-1)
4.mk。max(v),mk-1。max(v)5.uk。v(k)/mk
(1)
6.如果|mk-mk-1|m,m2=x[[k]];m=m1],{k,1,length[x]}];m2]v=a.u;m0=fmax[u];m1=fmax[v];t=abs[m1-m0]//n;k=0;
while[t>eps&&k=nmax,print[\迭代超限\
说明。本程序用于求矩阵a按模最大的特征值及其相应特征向量。程序执行后,先通过键盘输入矩阵a、迭代初值向量u(0)、精度控制eps和迭代允许最大次数nmax,程序即可给出每次迭代的次数和对应的迭代特征值、特征向量及误差序列,它们都按10位有效数输出。其中最后输出的结果即为所求的特征值和特征向量序。如果迭代超出nmax次还没有求出满足精度的根则输出迭代超限提示,此时可以根据输出序列判别收敛情况。
程序中变量说明a:存放矩阵a
u:初始向量u和迭代过程中的向量u
(k)
(0)
(k)
及所求特征向量
v:存放迭代过程中的向量v
m1:存放所求特征值和迭代过程中的近似特征值nmax:存放迭代允许的最大次数eps:存放误差精度
fmax[x]:给出向量x中绝对值最大的分量k:记录迭代次数t1:临时变量
注。迭代最大次数可以修改为其他数字。
例题与实验
例1.
用幂法求矩阵
。133。a。。44。。88。
65。6135。。46。。90。。的按模最大的特征值及其相应特征向量,要求误差eps&&k=nmax,print[\迭代超限\
说明。本程序用于求矩阵a按模最小的特征值及其相应特征向量。程序执行后,先通过
键盘输入矩阵a、迭代初值向量u、精度控制eps和迭代允许最大次数nmax,程序即可给出每次迭代的次数和对应的迭代特征值、特征向量及误差序列,它们都按10位有效数输出。其中最后输出的结果即为所求的特征值和特征向量序。如果迭代超出nmax次还没有求出满足精度的根则输出迭代超限提示,此时可以根据输出序列判别收敛情况。
程序中变量说明:a:存放矩阵a
u初始向量u和迭代过程中的向量u
(k)
v:存放迭代过程中的向量va1:存放逆矩阵a-1
m1:存放所求特征值和迭代过程中的近似特征值nmax:存放迭代允许的最大次数
eps:存放误差精度
fmax[x]:给出向量x中绝对值最大的分量k:记录迭代次数t1:临时变量
注。迭代最大次数可以修改为其他数字。
(0)
(k)
(0)
及所求特征向量
例题与实验
例3.用反幂法求矩阵
。2。a。。1。1。。2133。。1。。1。。
的按模最小的特征值及其相应特征向量,要求误差<10-5。
解:执行幂法程序后在输入的4个窗口中按提示分别输入
{{2.,-2.,
3.},{1,
1.,1},{1.,3,-1}},{1,0,1},0.00001,100每次输入后用鼠标点击窗口的“ok”按扭,得如下输出结果。…………………………………………………….
k=12特征值=0.9995193167误差=0.002553354512特征向量={-0.9990991337,
1.,0.9988281951}k=13特征值=1.00052327误差=0.001003953492特征向量={-0.9998950625,0.9994143792,
1.}
k=14特征值=0.9998814738误差=0.0006417963548特征向量={-0.9997696935,
1.,0.9997070364}
k=15特征值=1.000131384误差=0.0002499099059特征向量={-0.9999720617,0.9998535356,
1.}
k=16特征值=0.9999705536误差=0.0001608301282特征向量={-0.9999418581,
1.,0.9999267582}k=17特征值=1.000032909误差=0.00006235517185特征向量={-0.9999928266,0.9999633802,
1.}k=18特征值=0.9999926591误差=0.00004024964909特征向量={-0.9999854018,
1.,0.9999816895}
k=19特征值=1.000008234误差=0.00001557505036特征向量={-0.9999981857,0.9999908448,
1.}
k=20特征值=0.9999981671误差=0.00001006707749特征向量={-0.9999963435,
1.,0.9999954224}
k=21特征值=1.000002059误差=3.89222610510-6
特征向量={-0.9999995441,0.9999977112,
1.}
此结果说明迭代21次后得到满足要求的解:k=21特征值=1.000002059误差=3.89222610510特征向量={-0.9999995441,0.9999977112,
1.}
注意到本题按模最小的特征值为1,因此求解效果较满意。如果将如上输入的迭代初值改为常用的{1,1,1},则得到如下结果。
k=1特征值=3.误差=2.666666667特征向量={1.,
1.,
1.}
k=2特征值=3.误差=2.220446049。10-15特征向量={1.,
1.,
1.}
这个结果是按模最大的特征值,而不是按模最小的特征值,因此选用初值要小心。
-6
jacobi方法
jacobi旋转法算法
1.2.输入矩阵a,误差。fork。1,2,。(k。1)2.1选取apq。maxaiji。j(k。1),记录p,q2.2由tan2。。(k)2apq(k。1)(k。1)(k。1)app。a,。。。确定旋转角。,获得旋转矩阵4(k)(k)j(p,q,。)2.3apj。apj2.4aqj2.5aij(k)(k。1)cos。。aqj(k。1)sin。,ajp。apjcos。,(k)j。p,q(k)。。apj。aij(k。1)sin。。aqj(k。1)ajq。aqjj。p,q(k)(k)(k。1)(k。1)(k。1),i,j。p,q222.6app。app(k)cossin。。a。。a(k。1)sincos22。。2apq(k。1)(k。1)sin。cos。sin。cos。
2.7a。app(k。1)。。2apq2.8计算e(ak)。。(aiji。j(k)2)2.9如果e(ak)。。,输出对角矩阵d。diag(。1,。2,。,。n)和特征向量矩阵j,停止
注。如上算法中ak=(aij(k)),a0=(aij(0))=(aij)。
jacobi旋转法算法程序
clear[a,bb];
a=input[\矩阵a=\;n=input[\矩阵阶数n=\;
eps=input[\误差精度eps=\;
nmax=input[“迭代允许最大次数nmax=”];k=0;
bb=identitymatrix[n];
ea=sum[a[[i,j]]^2,{i,1,n},{j,1,n}]-sum[a[[i,i]]^2,{i,1,n}]//n;while[ea>eps&&km,m=abs[a[[i,j]]];p=i;q=j],{i,1,n},{j,i+1,n}];mu=a[[p,p]]-a[[q,q]];
if[mu==0,thi=pi/4,thi=arctan[2*a[[p,q]]/mu]/2];s=sin[thi]//n;c=sqrt[1-s^2];
a1=bb[[p]];
bb[[p]]=c*bb[[p]]+s*bb[[q]];
bb[[q]]=-s*a1+c*bb[[q]];
。本题的4个特征值为{4.,1.+2.i,
1.-2.i,-1.},可见收敛效果相当满意。
。本题的4个特征值为{4.,1.+2.i,
1.-2.i,-1.},可见收敛效果相当满意。
(未完,全文共7824字,当前显示1433字)
(请认真阅读下面的提示信息)