求矩阵特征值算法及程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

求矩阵特征值算法及程序简介

1.幂法

1、幂法规范化算法

(1)输入矩阵A 、初始向量)

0(μ,误差eps ;

(2)1⇐k ; (3)计算)1()

(-⇐k k A V

μ;

(4))max (,)

max ()1(1)

(--⇐⇐k k k k V m V m ;

(5)k k k m V /)()

(⇐μ

(6)如果eps m m k k <--1,则显示特征值1λ和对应的特征向量)1(x )

,终止;

(7)1+⇐k k ,转(3)

注:如上算法中的符号)max(V 表示取向量V 中绝对值最大的分量。本算法使用了数据规范化处理技术以防止计算过程中出现益出错误。

2、规范化幂法程序 Clear[a,u,x];

a=Input["系数矩阵A="];

u=Input["初始迭代向量u(0)="]; n=Length[u];

eps=Input["误差精度eps ="];

nmax=Input["迭代允许最大次数nmax="]; fmax[x_]:=Module[{m=0,m1,m2}, Do[m1=Abs[x[[k]]];

If[m1>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

m0=m1;

m1=fmax[v];

t=Abs[m1-m0]//N;

Print["k=",k," 特征值=",N[m1,10]," 误差=",N[t,10]]; Print[" 特征向量=",N[u,10]]]; If[k ≥nmax,Print["迭代超限"]]

说明:本程序用于求矩阵A 按模最大的特征值及其相应特征向量。程序执行后,先通过键盘输入矩阵A 、迭代初值向量)0(μ、精度控制eps 和迭代允许最大次数max n ,程序即可给出每次迭代的次数和对应的迭代特征值、特征向量及误差序列,它们都按10位有效数输出。其中最后输出的结果即为所求的特征值和特征向量序列。如果迭代超出max n 次还没有求出满足精度的根则输出迭代超限提示,此时可以根据输出序列判别收敛情况。 程序中变量说明 a:存放矩阵A ;

u:初始向量)0(μ和迭代过程中的向量)(k μ及所求特征向量; v:存放迭代过程中的向量)(k V ;

m1:存放所求特征值和迭代过程中的近似特征值; nmax:存放迭代允许的最大次数; eps:存放误差精度;

fmax[x]: 给出向量x 中绝对值最大的分量; k:记录迭代次数; t1:临时变量;

注:迭代最大次数可以修改为其他数字。 3、例题与实验

例1. 用幂法求矩阵⎪⎪⎪

⎫ ⎝⎛---=9068846544

1356133A 的按模最大的特征值及其相应特征向量,要求误差410-

解:执行幂法程序后在输入的四个窗口中按提示分别输入:

{{133,6,135},{44,5,46},{-88,-6,-90}}、{1,1,1}、0.0001、20

每次输入后用鼠标点击窗口的“OK ”按扭,得如下输出结果:

此结果说明迭代6次,求得误差为0.0000101442的按模最大的特征值为44.99999952,及其对应的一个特征向量:{1.000000000,0.3333333371,-0.6666666704}

2.反幂法

1、 反幂法规范化算法

(1)输入矩阵A 、初始向量)

0(μ,误差eps ;

(2)1⇐k ; (3)计算)1()

(-⇐k k AV

μ求出解)(k V ;

(4))max (,)

max ()1(1)

(--⇐⇐k k k k V m V m ;

(5)k k k m V /)()

(⇐μ

(6)如果eps m m k k <--1,则显示特征值1λ和对应的特征向量)1(x )

,终止;

(7)1+⇐k k ,转(3)

注:如上算法中解方程)1()(-⇐k k AV μ可以使用Dololittle 分解法。本算法使用了数据规范化处理技术以防止计算过程中出现益出错误。 2、规范化反幂法程序

Clear[a,u,x];

a=Input["系数矩阵A="];

u=Input["初始迭代向量u(0)="]; n=Length[u];

eps=Input["误差精度eps ="];

nmax=Input["迭代允许最大次数nmax="];

fmax[x_]:=Module[{m=0,m1,m2},Do[m1=Abs[x[[k]]]; If[m1>m,m2=x[[k]];m=m1],{k,1,Length[x]}]; m2]; v=a.u;

a1=Inverse[a]; m0=fmax[u]; m1=fmax[v];

t=Abs[m1-m0]//N; k=0;

While[t>eps&&k

m1=fmax[v];

t=Abs[m1-m0]//N;

t1=Abs[1/m1-1/m0]//N;

Print["k=",k," 特征值=",N[1/m1,10]," 误差=",N[t1,10]]; Print[" 特征向量=",N[u,10]]]; If[k ≥nmax,Print["迭代超限"]]

说明:本程序用于求矩阵A 按模最小的特征值及其相应特征向量。程序执行后,先通过键盘输入矩阵A 、迭代初值向量)0(μ、精度控制eps 和迭代允许最大次数max n ,程序即可给出每次迭代的次数和对应的迭代特征值、特征向量及误差序列,它们都按10位有效数输出。其中最后输出的结果即为所求的特征值和特征向量序。如果迭代超出max n 次还没有求出满足精度的根则输出迭代超限提示,此时可以根据输出序列判别收敛情况。 程序中变量说明 a :存放矩阵A

u :初始向量)0(μ和迭代过程中的向量)(k μ及所求特征向量

相关文档
最新文档