比较gram - schmidt和房主正交化算法

古典gram - schmidt和修改gram - schmidt是两个算法使正交化的一组向量。户主基本反射镜可用于相同的任务。三个算法有非常不同的舍入误差特性。

内容

g·w·斯图尔特(Pete)

我的同事和朋友g·w·斯图尔特是一个杰出的大学名誉教授计算机科学,马里兰大学。每个人都知道他是“皮特”。他从来没有能够令人满意地解释“皮特”的起源。它以某种方式可以追溯到他的父亲他的祖父也许曾祖父,也被称为“皮特”。

彼得写了几本书数值线性代数。为我的博客今天我要依赖于描述和伪代码从他的书“矩阵算法,体积我:基本分解”。他的伪代码是MATLAB准备好了。

经典gram - schmidt

经典gram - schmidt算法首先你想生产一组正交的向量。为每个矢量数据集,将投影数据集,剩下正常化,并将其添加到正交集。这是代码。X是原来的向量的集合,是结果集的正交向量,然后呢R是一组系数,组织成一个上三角矩阵。

类型gs
函数(Q, R)古典gram - schmidt = gs (X) %。(Q, R) = gs (X);% g·w·斯图尔特“矩阵算法,第一卷”,暹罗,1998年。(氮、磷)= (X)大小;Q = 0(氮、磷);R = 0 (p, p);k = 1: p Q (:, k) = X (:, k);如果k ~ = 1 Q R (1: k - 1, k) = (:, k - 1) * Q (:, k);Q (:, k) = Q: k - Q (:, 1: k - 1) * R (1: k - 1 k);结束R (k, k) =规范(Q (:, k)); Q(:,k) = Q(:,k)/R(k,k); end end

X = Q R

整个过程可以通过矩阵乘法,表达与正交Q和上三角R美元美元。

$ $ X = QR $ $

修改gram - schmidt

这是一个完全不同的算法,而不只是一个简单的古典gram - schmidt的修改。这个想法是为了使正交化对新兴向量的集合,而不是对原来的设置。有两个变种,用于和一个row-oriented。他们在不同的顺序产生相同的结果,。这是列版本,

类型毫克
函数(Q, R) =毫克(X) % gram - schmidt修改。(Q, R) =毫克(X);% g·w·斯图尔特“矩阵算法,第一卷”,暹罗,1998年。(氮、磷)= (X)大小;Q = 0(氮、磷);R = 0 (p, p);k = 1: p Q (:, k) = X (:, k);i = 1: k - 1 R (i (k) = Q(:,我)* Q (:, k);问(:,k) = Q: k - R (i (k) * Q(:,我);结束R (k, k) =规范(Q (:, k)); Q(:,k) = Q(:,k)/R(k,k); end end

户主反射

户主反映H变换一个给定的向量x美元美元的多个单位向量e_k美元,同时保留长度,所以下午$ Hx = \ \σe_k $, $ \σ= | | x | | $。

矩阵H美元不会形成。反射是表示为一个一阶修正的身份

$ $ H = I - uu ^ T \ \ mbox{哪里}\ | |你| | = \ sqrt {2} $ $

(使用$ \ sqrt{2} $这是皮特的签名规范化。)

类型housegen
函数(u,ν)= housegen (x) % (u,ν)= housegen (x) %生成户主反射。% g·w·斯图尔特“矩阵算法,第一卷”,暹罗,1998年。% (u,ν)= housegen (x)。% H与Hx = - =我——uu +νe_1 %返回ν(x) =标准。u = x;ν=规范(x);如果ν= = 0 u (1) = sqrt (2);返回u = x /ν结束;如果你(1)> = 0 u (1) = (1) + 1;ν=ν; else u(1) = u(1) - 1; end u = u/sqrt(abs(u(1))); end

现在应用H到其他y美元,美元计算内积

泰$ $ $ $ \τ= u ^

然后减去

$ $ = x -为什么\τu $ $

户主QR分解

这个项目并不实际计算QR正交化,而是计算R和一个矩阵U包含向量生成户主反射镜的产品问。

类型hqrd
函数[U R] = hqrd (X) %户主三角化。[U R] = hqrd (X);%发电机中存储的户主反射,% H_k = I - U (:, k) * (:, k)”。% prod (H_m…H_1) X = [R;0]% m = min(大小(X)) % g·w·斯图尔特“矩阵算法,第一卷”,暹罗,1998年。(氮、磷)= (X)大小;U = 0(大小(X));m = min(氮、磷);R = 0 (m m); for k = 1:min(n,p) [U(k:n,k),R(k,k)] = housegen(X(k:n,k)); v = U(k:n,k)'*X(k:n,k+1:p); X(k:n,k+1:p) = X(k:n,k+1:p) - U(k:n,k)*v; R(k,k+1:p) = X(k,k+1:p); end end

比较

所有这三个算法计算R复制数据,做一个好工作X,这是

  • *R总是接近X对这三种算法。

另一方面,他们的行为产生正交时截然不同。是问‘*问接近身份?

  • 经典gram - schmidt。通常非常贫穷的正交性。
  • gram - schmidt修改。取决于条件X。不完全时X是单数。
  • 户主三角化。总是良好的正交性。
类型compare.m
函数比较(X);%比较(X) %比较三个QR分解,% I =眼睛(大小(X));% %经典克施密特(Q, R) = gs (X);qrerr_gs =规范(Q * r×,正)/规范(X,正);ortherr_gs =规范(Q ' *我,正);% %修改克施密特(Q, R) =毫克(X);qrerr_mgs =规范(Q * r×,正)/规范(X,正);ortherr_mgs =规范(Q ' *我,正);% %户主QR分解(U R) = hqrd (X);QR = R; E = I; for k = size(X,2):-1:1 uk = U(:,k); QR = QR - uk*(uk'*QR); E = E - uk*(uk'*E) - (E*uk)*uk' + uk*(uk'*E*uk)*uk'; end qrerr_h = norm(QR-X,inf)/norm(X,inf); ortherr_h = norm(E-I,inf); %% Report results fprintf('QR error\n') fprintf('Classic: %10.3e\n',qrerr_gs) fprintf('Modified: %10.3e\n',qrerr_mgs) fprintf('Householder: %10.3e\n',qrerr_h) fprintf('\n') fprintf('Orthogonality error\n') fprintf('Classic: %10.3e\n',ortherr_gs) fprintf('Modified: %10.3e\n',ortherr_mgs) fprintf('Householder: %10.3e\n',ortherr_h)

好条件。

比较(魔法(7))
QR错误经典:1.726 e-16修改:6.090 e-17户主:3.654 e-16正交性误差经典:3.201 e + 00修改:1.534 e15汽油户主:1.069 e15汽油

条件很差,非奇异的。

比较(hilb (7))
QR错误经典:5.352 e-17修改:5.352 e-17户主:7.172 e-16正交性误差经典:5.215 e + 00修改:1.219 e-08户主:1.686 e15汽油

单数。

比较(魔法(8))
QR错误经典:1.435 e-16修改:8.540 e-17户主:2.460 e-16正交性误差经典:5.413 e + 00修改:2.162 e + 00户主:2.356 e15汽油

参考

g·w·斯图尔特,”矩阵算法,卷1:基本分解”,暹罗,1998年。

https://www.amazon.com/Matrix-Algorithms-1-Basic-Decompositions/dp/0898714141

发表与MATLAB®R2016a

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。