键盘输入矩阵A、迭代初值向量u、精度控制eps和迭代允许最大次数nmax,程序即可给出每次迭代的次数和对应的迭代特征值、特征向量及误差序列,它们都按10位有效数输出。其中最后输出的结果即为所求的特征值和特征向量序。如果迭代超出nmax次还没有求出满足精度的根则输出迭代超限提示,此时可以根据输出序列判别收敛情况。
程序中变量说明: a:存放矩阵A
u初始向量u和迭代过程中的向量u
(k)
v: 存放迭代过程中的向量V a1:存放逆矩阵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.892226105 10-6
特征向量={-0.9999995441, 0.9999977112, 1.}
此结果说明迭代21次后得到满足要求的解: k=21 特征值=1.000002059 误差=3.892226105 10 特征向量={-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?aqq,???确定旋转角?,获得旋转矩阵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??aqq??aqq(k?1)sincos22??2apq(k?1)(k?1)sin?cos?sin?cos?2.7aqq?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&&k Print[\迭代次数k=\ Do[If[Abs[a[[i,j]]]>m,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]]; pp=a[[p,p]]*c*c+a[[q,q]]*s*s+2a[[p,q]]*s*c; qq=a[[p,p]]*s*s+a[[q,q]]*c*c-2a[[p,q]]*s*c; Do[a1=a[[p,j]]; a[[p,j]]=c*a[[p,j]]+s*a[[q,j]]; a[[j,p]]=a[[p,j]]; a[[q,j]]=c*a[[q,j]]-s*a1; a[[j,q]]=a[[q,j]], {j,1,n}]; a[[p,p]]=pp;a[[q,q]]=qq;a[[p,q]]=0;a[[q,p]]=0; ea=Sum[a[[i,j]]^2,{i,1,n},{j,1,n}]-Sum[a[[i,i]]^2,{i,1,n}]//N; k=k+1; Print[\误差=\Print[\相似矩阵A=\Print[MatrixForm[a]]; Print[\特征向量J\ Print[MatrixForm[Transpose[bb]]] ]; If[k>=nmax,Print[“迭代超限”]] 说明:本程序用于求对称矩阵A的所有特征值及其相应特征向量。程序执行后,先通过键盘输入矩阵A、矩阵阶数n、精度控制eps和迭代允许最大次数nmax,程序即可给出每次迭代的次数和对应的迭代特征值、特征向量及误差序列。其中最后输出的结果即为所求的特 征值和特征向量。如果迭代超出nmax次还没有求出满足精度的根则输出迭代超限提示。此外,输出的特征值矩阵可以不是真正的对角矩阵,但它们的主对角元素就是满足要求的所有特征值。 程序中变量说明 a:存放矩阵A及其相似变换过程中的Ak bb: 存放特征向量矩阵J的转置 v: 存放迭代过程中的向量V m1: 存放所求特征值和迭代过程中的近似特征值 nmax:存放迭代允许的最大次数 eps: 存放误差精度 k: 记录迭代次数 t1,mu,s,c,ea,p,q,m: 临时变量 a1,qq,pp:临时向量 (k) 例题与实验 例4.用Jacobi方法求矩阵 ?2?A???1?0? ?12?10???1?2??的所有特征值及其相应特征向量,要求误差<10-6。 解:执行Jacobi方法程序后在输入的4个窗口中按提示分别输入 {{2,-1,0},{-1,2,-1},{0,-1,2}},3,0.000001,30 每次输入后用鼠标点击窗口的“OK”按扭,得如下输出结。 迭代次数k=0 误差=2. 相似矩阵A= 1. 0 -0.707107 0 3. -0.707107 -0.707107 -0.707107 2 特征向量J 0.707107 -0.707107 0 0.707107 0.707107 0 0 0 1 迭代次数k=1 误差=1. 相似矩阵A= 0.633975 -0.325058 0 -0.325058 3. -0.627963 0 -0.627963 2.36603 特征向量J 0.627963 -0.707107 -0.325058 0.627963 0.707107 -0.325058 0.459701 0 0.888074 迭代次数k=2 误差=0.211325 相似矩阵A= 0.633975 -0.276837 -0.170364 -0.276837 3.38645 0 -0.170364 0 1.97958 特征向量J 0.627963 -0.431846 -0.647434 0.627963 0.772574 0.0937614 0.459701 -0.465444 0.756332 ………….. 迭代次数k=5 误差=8.30891?10-6 相似矩阵A= 0.585788 0.00203811 -0.0000241542 0.00203811 3.41421 0 -0.0000241542 0 2. 特征向量J 0.499652 -0.50036 -0.707098 0.707616 0.706597 0.0000120684 0.499628 -0.50036 0.707115 迭代次数k=6 误差=1.16685?10-9 相似矩阵A= 0.585786 0 -0.0000241542 0 3.41421 -1.7405 ?10-8 -0.0000241542 -1.7405? 10 2. 特征向量J 0.500012 -0.5 -0.707098 0.707107 0.707107 0.0000120684 -8