幂法及其MATLAB程序.docx
《幂法及其MATLAB程序.docx》由会员分享,可在线阅读,更多相关《幂法及其MATLAB程序.docx(75页珍藏版)》请在冰豆网上搜索。
幂法及其MATLAB程序
5.2幂法及其MATLAB程序
5.2.2幂法的MATLAB程序
用幂法计算矩阵
的主特征值和对应的特征向量的MATLAB主程序
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;[mj]=max(abs(Vk));mk=m;
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;
end
k=k+1;Wc=Wc;
end
if(Wc<=jd)
disp('请注意:
迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
')
else
disp('请注意:
迭代次数k已经达到最大迭代次数max1,主特征值的迭代值lambda,主特征向量的迭代向量Vk,相邻两次迭代的误差Wc如下:
')
end
Vk=V;k=k-1;Wc;
例5.2.2用幂法计算下列矩阵的主特征值和对应的特征向量的近似向量,精度
.并把
(1)和
(2)输出的结果与例5.1.1中的结果进行比较.
(1)
;
(2)
;(3)
;(4)
.
解
(1)输入MATLAB程序
>>A=[1-1;24];V0=[1,1]';
[k,lambda,Vk,Wc]=mifa(A,V0,0.00001,100),
[V,D]=eig(A),Dzd=max(diag(D)),wuD=abs(Dzd-lambda),wuV=V(:
2)./Vk,
运行后屏幕显示结果
请注意:
迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
k=lambda=Wc=
333.000001738368048.691862856124999e-007
Vk=V=wuV=
-0.49999942054432-0.707106781186550.44721359549996-0.89442822756294
1.000000000000000.70710678118655-0.89442719099992-0.89442719099992
Dzd=wuD=
31.738368038406435e-006
由输出结果可看出,迭代33次,相邻两次迭代的误差Wc
8.6919e-007,矩阵
的主特征值的近似值lambda
3.00000和对应的特征向量的近似向量Vk
(-0.50000,1.00000
lambda与例5.1.1中
的最大特征值
近似相等,绝对误差约为1.73837e-006,Vk与特征向量
的第1个分量的绝对误差约等于0,第2个分量的绝对值相同.由wuV可以看出,
的特征向量V(:
2)与Vk的对应分量的比值近似相等.因此,用程序mifa.m计算的结果达到预先给定的精度
.
(2)输入MATLAB程序
>>B=[123;213;336];V0=[1,1,1]';
[k,lambda,Vk,Wc]=mifa(B,V0,0.00001,100),[V,D]=eig(B),
Dzd=max(diag(D)),wuD=abs(Dzd-lambda),wuV=V(:
3)./Vk,
运行后屏幕显示结果
请注意:
迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
k=lambda=Wc=Dzd=wuD=
39090
Vk=wuV=
0.500000000000000.81649658092773
0.500000000000000.81649658092773
1.000000000000000.81649658092773
V=
0.707106781186550.577350269189630.40824829046386
-0.707106781186550.577350269189630.40824829046386
0-0.577350269189630.81649658092773
(3)输入MATLAB程序
>>C=[122;1-11;4-121];V0=[1,1,1]';
[k,lambda,Vk,Wc]=mifa(C,V0,0.00001,100),[V,D]=eig(C),
Dzd=max(diag(D)),wuD=abs(Dzd-lambda),
Vzd=V(:
1),wuV=V(:
1)./Vk,
运行后屏幕显示
请注意:
迭代次数k已经达到最大迭代次数max1,主特征值的迭代值lambda,主特征向量的迭代向量Vk,相邻两次迭代的误差Wc如下:
k=lambda=Wc=
1000.090909090909102.37758124193119
Dzd=wuD=
1.000000000000010.90909090909091
Vk=Vzd=wuV=
0.999999999999930.904534033733290.90453403373335
0.999999999999950.301511344577760.30151134457778
1.00000000000000-0.30151134457776-0.30151134457776
由输出结果可见,迭代次数k已经达到最大迭代次数max1=100,并且lambda的相邻两次迭代的误差Wc
2.37758>2,由wuV可以看出,lambda的特征向量Vk与真值Dzd的特征向量Vzd对应分量的比值相差较大,所以迭代序列发散.实际上,实数矩阵C的特征值的近似值为
,并且对应的特征向量的近似向量分别为
=
(0.90453403373329,0.30151134457776,-0.30151134457776)
,
(-0.72547625011001,-0.21764287503300-0.07254762501100i,
0.58038100008801-0.29019050004400i)
,
(-0.72547625011001,-0.21764287503300+0.07254762501100i,
0.58038100008801+0.29019050004400i)
是常数).
(4)输入MATLAB程序
>>D=[-4140;-5130;-102];V0=[1,1,1]';
[k,lambda,Vk,Wc]=mifa(D,V0,0.00001,100),[V,Dt]=eig(D),
Dtzd=max(diag(Dt)),wuDt=abs(Dtzd-lambda),
Vzd=V(:
2),wuV=V(:
2)./Vk,
运行后屏幕显示结果
请注意:
迭代次数k,主特征值的近似值lambda,主特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
k=lambda=Wc=
196.000006539495286.539523793591684e-006
Dtzd=wuDt=
6.000000000000006.539495284840768e-006
Vk=Vzd=wuV=
0.797400480535640.797400480535640.79740048053564
0.714285947838860.569571771811170.79740021980618
-0.24999918247180-0.199********3910.79740308813370
5.3反幂法和位移反幂法及其MATLAB程序
5.3.3原点位移反幂法的MATLAB程序
(一)原点位移反幂法的MATLAB主程序1
用原点位移反幂法计算矩阵
的特征值和对应的特征向量的MATLAB主程序1
function[k,lambdan,Vk,Wc]=ydwyfmf(A,V0,jlamb,jd,max1)
[n,n]=size(A);A1=A-jlamb*eye(n);jd=jd*0.1;RA1=det(A1);
ifRA1==0
disp('请注意:
因为A-aE的n阶行列式hl等于零,所以A-aE不能进行LU分解.')
return
end
lambda=0;
ifRA1~=0
forp=1:
n
h(p)=det(A1(1:
p,1:
p));
end
hl=h(1:
n);
fori=1:
n
ifh(1,i)==0
disp('请注意:
因为A-aE的r阶主子式等于零,所以A-aE不能进行LU分解.')
return
end
end
ifh(1,i)~=0
disp('请注意:
因为A-aE的各阶主子式都不等于零,所以A-aE能进行LU分解.')
k=1;Wc=1;state=1;Vk=V0;
while((k<=max1)&(state==1))
[LU]=lu(A1);Yk=L\Vk;Vk=U\Yk;[mj]=max(abs(Vk));
mk=m;Vk1=Vk/mk;Yk1=L\Vk1;Vk1=U\Yk1;
[mj]=max(abs(Vk1));mk1=m;Vk2=(1/mk1)*Vk1;tzw1=abs((mk-mk1)/mk1);
tzw2=abs(mk1-mk);Txw1=norm(Vk)-norm(Vk1);
Txw2=(norm(Vk)-norm(Vk1))/norm(Vk1);
Txw=min(Txw1,Txw2);tzw=min(tzw1,tzw2);Vk=Vk2;
mk=mk1;Wc=max(Txw,tzw);Vk=Vk2;mk=mk1;state=0;
if(Wc>jd)
state=1;
end
k=k+1;%Vk=Vk2,mk=mk1,
end
if(Wc<=jd)
disp('A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
')
else
disp('A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k已经达到最大迭代次数max1,按模最小特征值的迭代值lambda,特征向量的迭代向量Vk,相邻两次迭代的误差Wc如下:
')
end
hl,RA1
end
end
[V,D]=eig(A,'nobalance'),Vk;k=k-1;Wc;lambdan=jlamb+1/mk1;
例5.3.2用原点位移反幂法的迭代公式(5.28),根据给定的下列矩阵的特征值
的初始值
,计算与
对应的特征向量
的近似向量,精确到0.0001.
(1)
;
(2)
,
;(3)
,
.
解
(1)输入MATLAB程序
>>A=[1-10;-24-2;0-12];V0=[1,1,1]';
[k,lambda,Vk,Wc]=ydwyfmf(A,V0,0.2,0.0001,10000)
运行后屏幕显示结果
请注意:
因为A-aE的各阶主子式都不等于零,所以A-aE能进行LU分解.
A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
k=lambda=Wc=hl=
30.23841.0213e-0070.80001.04000.2720
Vk=V=D=
1.0000-0.2424-1.0000-0.57075.124900
0.76161.0000-0.76160.363300.23840
0.4323-0.3200-0.43231.0000001.6367
(2)输入MATLAB程序
>>A=[1-1;24];V0=[20,1]';
[k,lambda,Vk,Wc]=ydwyfmf(A,V0,2.001,0.0001,100)
运行后屏幕显示结果
请注意:
因为A-aE的各阶主子式都不等于零,所以A-aE能进行LU分解.
A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
k=lambda=Wc=hl=
22.00205.1528e-007-1.0010-0.0010
Vk=V=D=
1.0000-1.00000.500020
-1.00001.0000-1.000003
(3)输入MATLAB程序
>>A=[-11215;2583;153-3];V0=[1,1,-1]';
[k,lambdan,Vk,Wc]=ydwyfmf(A,V0,8.26,0.0001,100)
运行后屏幕显示结果
请注意:
因为A-aE的各阶主子式都不等于零,所以A-aE能进行LU分解.
A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
k=lambdan=Wc=hl=
28.26406.9304e-008-19.2600-961.9924-6.1256
Vk=V=D=
-0.76920.79280.60810.0416-22.524900
0.09120.0030-0.07210.997408.26400
-1.0000-0.60950.79060.05900058.2609
例5.3.3用原点位移反幂法的迭代公式(5.28),计算
的分别对应于特征值
,
,
的特征向量
,
,
的近似向量,相邻迭代误差为0.001.将计算结果与精确特征向量比较.
解
(1)计算特征值
对应的特征向量
的近似向量.输入MATLAB程序
>>A=[011-5;-217-7;-426-10];V0=[1,1,1]';
[k,lambda,Vk,Wc]=ydwyfmf(A,V0,1.001,0.001,100),
[V,D]=eig(A);
Dzd=min(diag(D)),wuD=abs(Dzd-lambda),
VD=V(:
1),wuV=V(:
1)./Vk,
运行后屏幕显示结果
请注意:
因为A-aE的各阶主子式都不等于零,所以A-aE能进行LU分解.
A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
hl=
-1.001000000000005.98500100000000-0.00299600100000
k=lambda=RA1=
51.00200000000000-0.00299600100000
Vk=VD=wuV=
-0.50000000000000-0.408248290463860.81649658092773
-0.50000000000000-0.408248290463860.81649658092773
-1.00000000000000-0.816496580927730.81649658092773
Wc=Dzd=wuD=
1.378794763695562e-0091.000000000000000.00200000000000
从输出的结果可见,迭代5次,特征向量
的近似向量
的相邻两次迭代的误差Wc
1.379e-009,由wuV可以看出,
=Vk与VD的对应分量的比值相等.特征值
的近似值lambda
1.002与初始值
1.001的绝对误差为0.001,而与
的绝对误差为0.002,其中
.
(2)计算特征值
对应特征向量
的近似向量.
输入MATLAB程序
>>A=[011-5;-217-7;-426-10];V0=[1,1,1]';
[k,lambda,Vk,Wc]=ydwyfmf(A,V0,2.001,0.001,100),
[V,D]=eig(A);WD=lambda-D(2,2),VD=V(:
2),wuV=V(:
2)./Vk,
运行后屏幕显示结果
请注意:
因为A-aE的各阶主子式都不等于零,所以A-aE能进行LU分解.
A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
hl=
-2.00100000000000-8.012999000000000.00200099900000
k=Wc=lambda=WD=
23.131363162302120e-0072.002000000000160.00200000000016
Vk=VD=wuV=
-0.249999999999990.21821789023599-0.87287156094401
-0.499999999999990.43643578047198-0.87287156094398
-1.000000000000000.87287156094397-0.87287156094397
从输出的结果可见,迭代2次,特征向量
的近似向量
的相邻两次迭代的误差Wc
3.131e-007,
与
的对应分量的比值近似相等.特征值
的近似值lambda
2.002与初始值
2.001的绝对误差约为0.001,而lambda与
的绝对误差约为0.002,其中
.
(3)计算特征值
对应特征向量
的近似向量.输入MATLAB程序
>>A=[011-5;-217-7;-426-10];V0=[1,1,1]';
[k,lambda,Vk,Wc]=ydwyfmf(A,V0,4.001,0.001,100)
[V,D]=eig(A);WD=lambda-max(diag(D)),VD=V(:
3),wuV=V(:
3)./Vk,
运行后屏幕显示结果
请注意:
因为A-aE的各阶主子式都不等于零,所以A-aE能进行LU分解.
A-aE的秩R(A-aE)和各阶顺序主子式值hl、迭代次数k,按模最小特征值的近似值lambda,特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
hl=
-4.00100000000000-30.00899900000000-0.00600500099999
k=lambda=Wc=WD=
24.001999999999901.996084182914842e-0070.00199999999990
Vk=VD=wuV=
0.40000000000001-0.32444284226153-0.81110710565380
0.60000000000001-0.48666426339229-0.81110710565381
1.00000000000000-0.81110710565381-0.81110710565381
从输出的结果可见,迭代2次,特征向量
的近似向量
的相邻两次迭代的误差Wc
1.996e-007,
与
的对应分量的比值近似相等.特征值
的近似值
的绝对误差近似为
,而lambda与
的绝对误差约为0.002,其中
-0.40000000000000,-0.60000000000000,-1.00000000000000
.
(二)原点位移反幂法的MATLAB主程序2
用原点位移反幂法计算矩阵
的特征值和对应的特征向量的MATLAB主程序2
function[k,lambdan,Vk,Wc]=wfmifa1(A,V0,jlamb,jd,max1)
[n,n]=size(A);jd=jd*0.1;A1=A-jlamb*eye(n);nA1=inv(A1);
lambda1=0;k=1;Wc=1;state=1;U=V0;
while((k<=max1)&(state==1))
Vk=A1\U;[mj]=max(abs(Vk));mk=m;Vk=(1/mk)*Vk;Vk1=A1\Vk;
[m1j]=max(abs(Vk1));mk1=m1,Vk1=(1/mk1)*Vk1;U=Vk1,
Txw=(norm(Vk1)-norm(Vk))/norm(Vk1);
tzw=abs((lambda1-mk1)/mk1);
Wc=max(Txw,tzw);lambda1=mk1;state=0;
if(Wc>jd)
state=1;
end
k=k+1;
end
if(Wc<=jd)
disp('请注意迭代次数k,特征值的近似值lambda,对应的特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
')
else
disp('请注意迭代次数k已经达到最大迭代次数max1,特征值的近似值lambda,对应的特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
')
end
[V,D]=eig(A,'nobalance'),Vk=U;k=k-1;Wc;lambdan=jlamb+1/mk;
例5.3.4用原点位移反幂法的迭代公式(5.27),计算例题5.3.3,并且将这两个例题的计算结果进行比较.再用两种原点位移反幂法的MATLAB主程序,求
对应的特征向量.
解
(1)计算特征值
对应特征向量
的近似向量.
输入MATLAB程序
>>A=[011-5;-217-7;-426-10];V0=[1,1,1]';
[k,lambda,Vk,Wc]=wfmifa1(A,V0,1.001,0.001,100)
运行后屏幕显示结果
请注意迭代次数k,特征值的近似值lambda,对应的特征向量的近似向量Vk,相邻两次迭代的误差Wc如下:
k=lambda=Wc=
51.002000000001381.376344154436924e-006
Vk’=-0.50000000000000-0.50000000000000-1.00000000000000
同理可得,另外与两个特征