实 验 报 告
实验人:
学号:
日期:
院(系): 专业(班级):
题目一:
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
设 A=,在
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
MALTAB 中实现基本的 QR 算法。
一、实验目的
对 QR 作进一步的了解,熟悉算法的步骤并理解其
二、实验原理
实数矩阵 A 的 QR 分解是把 A 分解为
这里的 Q 是正交矩阵(意味着 QTQ = I)而 R 是上三角矩阵。类似的,我们可
以定义 A 的 QL, RQ 和 LQ 分解。
更一般的说,我们可以因数分解复数 m×n 矩阵(有着 m ≥ n)为 m×n 酉
矩阵(在 Q∗ Q = I 的意义上)和 n×n 上三角矩阵的乘积。
如果 A 是非奇异的,则这个因数分解为是唯一,当我们要求 R 的对角是正数的
时候。
三、实验结果
四、实验代码
function [Q,R]=qrgv(A)
% 参数说明
% A:需要进行 QR 分解的方阵
% Q:分解得到的正交矩阵
% R:分解得到的上三角阵
% [Q,R]=qr(A) % 调用 MATLAB 自带的 QR 分解函数进行验证
% [q,r]=qrgv(A) % 调用本函数进行 QR 分解
% q*r-A % 验证 A=QR
% q'*q % 验证 q 的正交性
% norm(q) % 验证 q 的标准化,即二范数等于 1
n=size(A,1);
R=A;
Q=eye(n);
for i=1:n-1
for j=2:n-i+1
x=R(i:n,i);
rt=givens(x,1,j);
r=blkdiag(eye(i-1),rt);
Q=Q*r';
R=r*R;
end
End
题目二:
采用带原点位移的 QR 算法计算 A=
敛情况,上一题的实验结果作比较
一、实验目的
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
5.0
的特征值,观察迭代过程的收
熟悉 MATLAB 的用法,并了解带原点位移的 QR 算法的原理和使用方法。
二、实验原理
一般情况下,QR 分解的收敛速度比较慢,因此可通过仿乘幂法将原矩阵先进
行一定长度的位移,可显著加速 QR 算法所得矩阵序列 kA 的收敛。0A=A(A 是原
始矩阵的拟上三角矩阵)
(1) 分解 k-1-1k-1k-1A-uI=RkQ,其中-1uk 即位移量,一般取 A 的某一特
征值的近似值;
实际计算通常取为 k-1A 的右下角元素(k-1)n,na,或取为右下角
22 矩阵特征之中接近(k-1)n,na 者。
(2) 计算 kk-1k-1-1A=+RuIkQ。
(3) 重复过程(1)(2)直到 kA 变为近似舒尔矩阵,对角线元素即为 A 的
近似特征值
三、实验结果
四、结果分析
运行结果看出带位移的 QR 算法与一般的 QR 算法相比具有更好的收敛效 果,
极大地减少了运算量。
五、实验代码
function A=dp_qrfenjie(a)
n=length(a);
A=a;
for i=1:100
A=a-a(n,n)*eye(n);
theta(n-1)=0;
c(n-1)=0;
s(n-1)=0;
Q=1;
for j=1:n-1
theta(j)=atan(A(j+1,j)/A(j,j));
c(j)=cos(theta(j));
s(j)=sin(theta(j));
P=eye(n);
P(j,j)=c(j);
P(j+1,j)=-s(j);
P(j,j+1)=s(j);
P(j+1,j+1)=c(j);
invP=eye(n);
invP(j,j)=c(j);
invP(j+1,j)=s(j);
invP(j,j+1)=-s(j);
invP(j+1,j+1)=c(j);
Q=Q*invP;
R=P*A;
A=R;
end
A=R*Q+a(n,n)*eye(n);
tor=max(abs(diag(A)-diag(a)));
if tor>5*10^-5
a=A;
break;
else
end
end
i,Ak=A;lanmda=diag(A)'
题目三:
编程实现算法 6.3,可利用现成的 QR 分解算法。
一、实验目的
熟悉算法:利用矩阵的 QR 分解求解曲线拟合的最小二乘法。
二、实验原理
对给定数据点{(Xi,Yi)}(i=0,1,…,m),在取定的函数类Φ 中,求
p(x)∈Φ,使误差的平方和 E^2 最小,E^2=∑[p(Xi)-Yi]^2。从几何意义上讲,
就是寻求与给定点 {(Xi,Yi)}(i=0,1,…,m)的距离平方和为最小的曲线
y=p(x)。函数 p(x)称为拟合函数或最小二乘解,求拟合函数 p(x)的方法称为曲
线拟合的最小二乘法。
最小二乘的矩阵形式:Ax=b,其中 A 为 nxk 的矩阵,x 为 kx1 的列向量,b
为 nx1 的列向量。
正常来看,这个方程是没有解的,但在数值计算领域,我们通常是计算 min
||Ax-b||,解出其中的 x。比较直观的做法是求解 A'Ax=A'b,但通常比较低效。
其中一种常见的解法是对 A 进行 QR 分解(A=QR),其中 Q 是 nxk 正交矩阵
(Orthonormal Matrix),R 是 kxk 上三角矩阵(Upper Triangular Matrix),
然后 min ||Ax-b|| = min ||QRx-b|| = min ||Rx-Q'b||,用 MATLAB 命令
x=R\(Q'*b)可解得 x。
三、实验代码
function [c,R2,rout] = fitqr(x,y,basefun)
% fitqr Least-squares fit via solution of overdetermined system with QR
%
%
%
%
%
% Synopsis: c
%
%
%
% Input:
%
%
%
% Output: c = vector of coefficients obtained from the fit
x,y
basefun = (string) name of user-supplied m-file that computes
matrix A. The columns of A are the values of the
basis functions evaluated at the x data points.
= fitqr(x,y,basefun)
[c,R2]
= fitqr(x,y,basefun)
[c,R2,r] = fitqr(x,y,basefun)
Given ordered pairs of data, (x_i,y_i), i=1,...,m, fitqr
returns the vector of coefficients, c_1,...,c_n, such that
F(x) = c_1*f_1(x) + c_2*f_2(x) + ... + c_n*f_n(x)
minimizes the L2 norm of y_i - F(x_i).
= vectors of data to be fit
%
<= 1
%
x
%
R2 = (optional) adjusted coefficient of determination; 0 <= R2
R2 close to 1 indicates a strong relationship between y and
r = (optional) residuals of the fit
if length(y)~= length(x); error('x and y are not compatible'); end
A = feval(basefun,x(:)); % Coefficient matrix of overdetermined system
c = A\y(:);
% Solve overdetermined system with QR factorization
if nargout>1
r = y - A*c;
[m,n] = size(A);
R2 = 1 - (m-1)/(m-n-1)*(norm(r)/norm(y-mean(y)))^2;
if nargout>2, rout = r; end
% Residuals at data points used to obtain the fit
end