2、j,a:2,•••,xk_{,—c,0,•••,0)TgR"算法:(1)输入X,若X为零向量,则报错(2)将x规范化,M=max
3、
4、x1
5、,
6、x2
7、,---,
8、xj}如果M=0,则报错同吋转出停机否则旺JxjM.i=1,2,…,n(3)计算(7=
9、
10、x
11、
12、2,如果“VO,则G--O(4)p=(7((7+X])(5)计算11=X,U(1)=X,4-(7(6)H=I-/7_lUUr(7)y=(—Mcr,O,…,0)(&)按要求输出,结束1.变量说明:x—输入的n维向量;n—n维向量x的维数;M-M是向量x的无穷范数
13、,即x中绝对值最大的一项的绝对值;p—Householder初等变换阵的系数P;u—Householder初等变换阵的向量Us—向量x的二范数;x—输入的n维向量;n—n维向量x的维数;p—Householder初等变换阵的系数P;u—Householder初等变换阵的向量Uk一数k,H*x=y,使得y的第k+1项到最后项全为零;2.程序代码:(1)function[p,u]=holder2(x)%H0LDER2给定向量xHO,计算Householder初等变换阵的p,u%程序功能:两数holder2给定向量x
14、HO,计算Householder初等变换阵的p,u;%输入:n维向量x;%输出:p是Householder初等变换阵的系数P,%u是Householder初等变换阵的向量U。n=length(x);%得到n维向量x的维数;p=l;u=0;%初始化p,u;M=max(abs(x));%得到向量X的无穷范数,即X屮绝对值最大的一项的绝对值讦M==0%如果x=0,提示出错,程序终止;disp(rError:M=0');return;elsex=x/M;%规范化end;s=norm(x);%求X的二范数ifx(l)<0
15、%首项为负,S值要变号s=-s;endu=x;%除首项外,其余各项X,u相同u(l)=s+x(l);%计算U的首项p=s*u(l);%计算Pifn==lu=0;end%若x是1X1维向量,贝lju=o(2)functionH=holderk(x,k)%HOLDERK给定向量xHO,数k,计算初等反射阵Hk,使HkX=Y,其中Y的笫k+1项到最后项全为零;%程序功能:函数holderk给定向量xHO,数k,计算初等反射阵Hk,使HkX二Y,%程序功能:函数holder2给定向量xHO,计算Householder初
16、等变换阵的p,u;%输入:n维向量x,数k;%输出:HoH是Householder初等变换阵,H*x二y,使得y的第k+1项到最后项全为零;%引用函数:holder2;n=length(x);%得到n维向量x的维数;ifk>n%如果k值溢!11,报错;disp('Error:k>n');%初始化H,并使H(l:k,l:k)=I;%得到计算Householde初等变换阵的系数P、向量U;%计算H(k:n,k:n)=I-pu*u,;endH=eye(n);[p,u]=holder2(x(k:n));H(k:n,k
17、:n)=eye(n-k+l)-pu*u';1.使用示例:情形1:X为零向量»x=[0,0,0,0]';»H=holderk(x,l)Error:M=0000情形2:K值溢出:»x=[123,4]:»H=holderk(x,5)Error:k>nK值为1:»x=2345f;»H=holderk(x,l)0001•0.2722-0.4082-0.5443-0.6804-0.40820.8690-0.1747-0.2184-0.5443・0.17470.7671・0.2911-0.6804-0.2184-0.291
18、10.6361检验:»det(H)ans=-1.0000»H*x-7.3485().00000.00000.0000情形4:(1)K值为3:»x=[4,3,2,l]';»H=holderk(x,3)1.0000001.000000检验:0000-0.8944-0.4472■0.44720.8944»det(H)ans=-1»H*xans=4.00003.0000-2.23610⑵K值为