基于MATLAB的数值分析
数值分析是一门计算量大、算法多、实践性强的应用性数学学科,其中每一种算法都是源于实际计算的需要而寻求数学方法的产物。利用MATLAB软件的数学计算功能和友好的图形界面,对数值分析中涉及到的基本问题进行辅助设计,不仅高效、准确,而且可以直观的看出结果,便于对算法进行整体的描述与分析。基于上述思想,我们可以在MATLAB环境下进行数值分析的研究与应用。
一、幂法的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; [m j]=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;
用幂法计算下列矩阵的主特征值和对应的特征向量的近似向量,精度.并把(1)和(2)输出的结果与例5.1.1中的结果进行比较. (1);(2);(3);(4).
解(1)输入MATLAB程序
>>A=[1 -1;2 4]; 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 = 33 lambda =3.00000173836804
Wc = 8.691862856124999e-007
Vk =-0.49999942054432 -0.70710678118655
0.44721359549996 -0.89442822756294
V = 1.00000000000000 0.70710678118655
wuV =-0.89442719099992 -0.89442719099992
Dzd = 3 wuD = 1.738368038406435e-006
由输出结果可看出,迭代33次,相邻两次迭代的误差Wc 8.69 19e-007,矩阵的主特征值的近似值lambda3.000 00和对应的特征向量的近似向量Vk (-0.500 00,1.000 00, lambda与例5.1.1中的最大特征值近似相等,绝对误差约为1.738 37e-006,Vk与特征向量的第1个分量的绝对误差约等于0,第2个分量的绝对值相同.由wuV 可以看出,的特征向量V(:,2) 与Vk的对应分量的比值近似相等.因此,用程序mifa.m计算的结果达到预先给定的精度.
二、输入MATLAB程序
>>B=[1 2 3;2 1 3;3 3 6]; 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 = 3 lambda = 9 Wc =0 Dzd = 9
wuD = 0
Vk = 0.50000000000000 wuV = 0.81649658092773
0.50000000000000 0.81649658092773
1.00000000000000 0.81649658092773 V =0.70710678118655 0.57735026918963
0.40824829046386 -0.70710678118655
0.57735026918963 0.40824829046386
0.81649658092773 -0.57735026918963
三、输入MATLAB程序
>> C=[1 2 2;1 -1 1;4 -12 1];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 = 100 lambda = 0.09090909090910
Wc = 2.37758124193119
Dzd = 1.00000000000001
wuD = 0.90909090909091
Vk=0.99999999999993 0.90453403373329
0.90453403373335
Vzd = 0.99999999999995 0.30151134457776
0.30151134457778
wuV =1.00000000000000 -0.30151134457776
-0.30151134457776
由输出结果可见,迭代次数k已经达到最大迭代次数max1=100,并且lambda的相邻两次迭代的误差Wc2.377 58>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) , 是常数).
四、输入MATLAB程序
>> D=[-4 14 0;-5 13 0;-1 0 2]; 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 = 19 lambda = 6.00000653949528
Wc = 6.539523793591684e-006
Dtzd =6.00000000000000
wuDt =6.539495284840768e-006
Vk = 0.79740048053564 0.79740048053564
0.79740048053564
Vzd =0.71428594783886 0.56957177181117
0.79740021980618
wuV =-0.24999918247180 -0.19935012013391
0.79740308813370