数值代数结课论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值代数》课程设计姓名:*****
学号:******
一、理论知识
以Givens 矩阵与Household 矩阵为基础,可以将n 阶实矩阵分解为正交矩阵与上三角矩阵的乘积,即QR 分解
1、Givens 变换
定义:设实数c 和s 满足22=+s c ,形如=
s)(c,ij G I i c s I j s c I i j
⎛⎫
⎪
⎪ ⎪ ⎪ ⎪
⎪- ⎪
⎪ ⎪⎝⎭
(j i ≠)
的矩阵称为Givens 矩阵。
性质1、I G G T =,(c,-s)s)](c,[s)](c,[G T -1ij ij ij G G ==,1s)](c,[G det ij =; 性质2、Givens 变换x ij G y =只改变x 的第i 个和j 个分量;
性质3、设0)x ,x ,(x T n 21≠⋯=x ,则存在有限个Givens 矩阵的乘积G ,使得
1e x Gx =;
性质4、 设x,z ∈1)(n >n R ,且0≠x ,,1=z 则存在有限个Givens 矩阵的乘积G ,
使得z x Gx =,即可以将12
n x x x x ⎡⎤
⎢⎥
⎢⎥=⎢⎥
⎢⎥
⎣⎦
化成0
0i x j ⎡
⎤⎢⎥⎢⎥⎢⎥=⎢⎥
⎢⎥⎢⎥
⎢⎥
⎢⎥⎣
⎦
的形式。
利用Givens 变换,我们可以将A 的对角线下元素逐个消为0。
2、Householder 变换:
定义:设n R ω∈满足21ω=,定义n n H R ⨯∈为
2T H I ωω=-,
则称H 为Householder 变换。
性质1、1det ,,,,12-=====-H H H I H I H H H H T T ; 性质2、
设z x Hx H r Householde R z x n ==≠>∈,使得矩阵则存在且,1z 0, x 1),(n ,; 性质3、对任意的Givens 矩阵G ,都存在两个Householder 矩阵v u H H ,,使得G=v u H H
利用Householder 变换,我们可以将A 的对角线下元素逐列的消为0。
3、QR 分解定理:设()m n A R m n ⨯∈≥,则A 有QR 分解:
0R A Q ⎡⎤=⎢⎥⎣⎦
,
其中m m Q R ⨯∈是正交矩阵,n n R R ⨯∈是具有非负对角元的上三角阵;而且当m n =且A 非奇异时,上述分解还是唯一的。
在这个定理的基础上,我们就可以放心的研究任意矩阵的QR 分解,因为它总是存在的。
二、求解实际问题
在探究最小二乘问题时,我们得出结论,求解最小二乘问题等价于求
2min ||||T T Q Ax Q b -的问题,其中Q 为正交矩阵,因此,可以通过选取适当的正交矩阵Q ,使原问题转化为较易求解的最小二乘问题。
这里,将讨论对任意矩阵
⎪⎪⎪
⎭
⎫ ⎝⎛=504430553A 的QR 分解的方法。
三、实验内容(算法及程序)
模型一:利用householder 变换对矩阵A 进行QR 分解。
1. 用MATLAB 建立m 文件house.m,程序如下: function [v,b]=house(x) n=length(x); v=zeros(n,1); eta=norm(x,inf); x=x/eta; v(1)=1;
v(2:n)=x(2:n);
sig=x(2:n)'*x(2:n); if (sig==0) b==0; else
a=(x(1)*x(1)+sig)^(1/2); if (x(1)<=0) v(1)=x(1)-a; else
v(1)=-sig/(x(1)+a); end
b=2*v(1)*v(1)/(sig+v(1)*v(1)); v=v/v(1); end
2. 用MATLAB 建立m 文件:qr1.m A=input('A='); [m,n]=size(A); for j=1:n if j<=m
[v,b]=house(A(j:m,j))
A(j:m,j:n)=(eye(m-j+1)-b*v*v')*A(j:m,j:n); d(j)=b;
A(j+1:m,j)=v(2:m-j+1); end end
R=A(1:n,1:n); R=triu(R);
Q=eye(m);
for j=1:n
A(j,j)=1;
end
for j=1:n
H=eye(m);
H(j:m,j:m)=eye(m-j+1)-d(j)*A(j:m,j)*A(j:m,j)';
Q=Q*H;
end
Q
R
Q*Q' %这里是为了检验Q是否为正交矩阵
结果
利用Householder变换,我们可以将A的对角线下元素逐列的消为0,从而得到R,每一步中的Householder变换矩阵H的乘积就是我们所求的Q。
模型二:利用givens变换对矩阵A进行QR分解。
1.用MATLAB建立m文件givens.m,程序如下:
function[c,s]=givens (a,b)
if (b==0)
c=1;
s=0;
else if(abs(b)>abs(a))
r=a/b;
s=1/sqrt(1+r*r);
c=s*r;
else
r=b/a;
c=1/sqrt(1+r*r);
s=c*r;
end
end
2. 用MATLAB建立m文件:qr2.m
A=input('A=');
[m,n]=size(A);
Q=eye(m);
for j=1:n
for i=j+1:m
[c,s]=givens(A(j,j),A(i,j)); G=eye(m);
G(j,j)=c;
G(i,i)=c;
G(j,i)=s;
G(i,j)=-s;
A=G*A;
Q=Q*G;
end
end
R=A
QR=A
结果:A=[3 5 5;0 3 4;4 0 5]
R =
5.0000 3.0000 7.0000
0 -5.0000 -3.2000
0 0 -2.6000
QR =
5.0000 3.0000 7.0000
0 -5.0000 -3.2000
0 0 -2.6000
利用Givens变换,我们可以将A的对角线下元素逐个消为0,从而得到R,每一步中的Givens变换矩阵G的乘积就是我们所求的Q。