您好,欢迎来到锐游网。
搜索
您的当前位置:首页Householder正交化方法matlab编程

Householder正交化方法matlab编程

来源:锐游网


1采用Householder正交化方法求下列方程组的极小最小二乘解

1111123433x145x275x3611

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务