1采用Householder正交化方法求下列方程组的极小最小二乘解
1111123433x145x275x3611
Householder正交化方法源程序如下
function householder
clc
disp('请注意,在输入等式右边向量b时,请输入列向量或者行向量转置')
A=input('请输入系数矩阵A=:');
b=input('请输入向量b=:');
[m,n]=size(A);
C=zeros(m,n+1);
C(1:m,1:n)=A;
C(1:m,n+1)=b;
r=rank(A);
Hk=eye(m);
for j=1:r
fprintf('第%d次求得H',j);
x=C(j:m,j);
u=x-x;
l=length(x);
s=max(abs(x));
x=x/s;
t=x(2:l)'*x(2:l);
u(1)=1;
u(2:l)=x(2:l);
if t==0
p=0;
else
a=sqrt(x(1)^2+t);
if x(1)<=0
u(1)=x(1)-a;
else
u(1)=-t/(x(1)+a);
end
p=2*u(1)^2/(t+u(1)^2);
u=u/u(1);
end
I1=eye(m-j+1);
H1=I1-p*u*u';
H=eye(m);
H(j:m,j:m)=H1
Hk=H*Hk;
C=H*C;
end
disp('最终利用Householder正交化方法分解的Q为')
Q=Hk(1:r,1:m)'
disp('最终利用Householder正交化方法分解的U为')
U=C(1:r,1:n)
disp('利用Householder正交化方法求解为')
x=U'*inv(U*U')*Q'*b
运行结果:
请注意,在输入等式右边向量b时,请输入列向量或者行向量转置
请输入系数矩阵A=:[1 1 3;1 2 4;1 3 5;1 4 6]
请输入向量b=:[3 5 7 11]'
第1次求得H
H =
0.5000 0.5000 0.5000 0.5000
0.5000 0.5000 -0.5000 -0.5000
0.5000 -0.5000 0.5000 -0.5000
0.5000 -0.5000 -0.5000 0.5000
第2次求得H
H =
1.0000 0 0 0
0 -0.8944 -0.4472 0
0 -0.4472 0.8944 0
0 0 0 1.0000
最终利用Householder正交化方法分解的Q为
Q =
0.5000 -0.6708
0.5000 -0.2236
0.5000 0.2236
0.5000 0.6708
最终利用Householder正交化方法分解的U为
U =
2.0000 5.0000 9.0000
0 2.2361 2.2361
利用Householder正交化方法求解为
x =
-0.8667
2.1667
0.4333
因篇幅问题不能全部显示,请点此查看更多更全内容