
幂法求多项式方程的模最大根matlab实现.docx
4页幂法求多项式方程的模最大根matlab实现幂法求多项式方程的模最大根matlab实现 要求:利用matlab编写通用子程序,利用幂法求多项式方程的解: f(x)=xn+an-1xn-1+¼¼+a1x+a0=0 思想: 1.首先要将多项式转化成矩阵形式通过老师上课讲的内容将上述多项式转化成为如家格式的矩阵: 0¼¼¼¼-a01¼¼¼¼-a2¼¼¼¼¼¼¼¼0¼¼1-an-1此矩阵的特征值,就是上述多项式的解 2.幂法的思想就不多介绍了,书上讲的很详细,主要运用书上6.2.6的迭代公式: yk=Auk-1, mk=mj,yk的模最大分量 (k)uk=yk/mk,实验代码:详见附录1 实验结果: x+x-5x+3=0 32解: 其中m是模最大特征值,x是m对应的特征向量,s是迭代次数15精度为1e-5 x-3x-1=0 结果: 3其中:m是模最大特征值,x是m对应的特征向量,s是迭代次数为57,精度为1e-5. x8+101x7+208.01x6+10891.01x5+9802.08x4+79108.9x-99902x+790x-1000=032结果: 其中:m是模最大特征值,x是m对应的特征向量,s是迭代次数12次,精度为1e-10. 结论:幂法求多项式模最大根的效果还是很不错的,迭代次数也不多,收敛比较快。
附录1 幂法: function [m,x,s]=powermethod(n,a,eps) %A转化后的矩阵 %x0迭代初向量 %l模最大特征值 %n为最高次幂 A=zeros(n); %v为主特征向量 M = 500000; %迭代步数限制 l = 0; for i=1:n A(i,n)=-a(i); end for i=2:n for j=1:n-1 if i-j==1 A(i,j)=1; end end end s=0; n=max(size(A)); u=ones(n,1); y=ones(n,1);%初始化,初始值是多少不重要 beta1=0; eta=norm(u,2); y=u./eta; u=A*y; beta2=y'*u; while s<=M if abs((beta2-beta1)/beta1)>eps beta1=beta2; eta=norm(u,2); y=u./eta; u=A*y; beta2=y'*u; end s=s+1; if(abs((beta2-beta1)/beta1)<=eps) break; end end if s<=M m=beta2; x=y; else m=beta2; x=y; end 。
