如何在 MATLAB 中用 行代码实现 Gram-Schmidt.pdf

如题所述

   方法利用 n 个独立的向量a1 , … , an (A 的列向量)产生 n 个正交的向量 q1 , … , q n 的列向量) 求得q j 首先要从aj 中去其在前面的 q 的投影, (Q 。 然后除以向量的长度, 得到一个单位矩阵。 内积qT aj 产生一个满足 A=QR 的方阵 R。因为当 i 大于 j 时qT aj =0,所以 R 是上三角形阵 i i (后面的 q 正交于以前的 a,这就是这个方法的要点) 。 下 面 是 由 A 产 生 Q 和 R 的 只 有 9 行 的 MATLAB 的 代 码 。 首 先 执 行 [m,n]=size(A);Q=zeros(m,n);R=zeros(n,m);以使矩阵具有正确的大小。 for j=1:n %Gram-Schmidt 正交化 v=A(:,j); %v 初始化为 A 的第 j 列 for i=1:j-1 R(i,j)=Q(:,i)’*A(:,j); %为提高精确度用 A(:,j)代替 v v=v-R(i,j)*Q(:,i); %减去投影 qT aj qi = (qT v)q i i i end %v 现在和q1 , … , q j?1 正交 R(j,j)=norm(v); Q(:,j)=v/R(j,j); %将 v 规范化使之成为单位向量q j end 如果你重复最后的步骤和中间的步骤你会发现: R(j,j) q j =(v 减去它的投影)=(A 的第 j 列)j?1 i=1 R(i, j)q i 将和移到左侧就是乘积 A=QR 的第 j 列。 第 4 行的“改进的 Gram-Schmidt”在从aj 转换到 v 中作了关键的调整。由运算可知 R(i.j)= qT aj 和qT v相等。 (现在 v 已经从aj 中减去了在q1 , … , q i?1 的投影,但是新的q i 要和这 i i 些方向都正交) 。实际上这种正交状态并不完全正确,计算时便会在 Q 中产生一点误差。多 数情况下在代码中的那一步使用 v。 例 A 是 2 阶方阵。Q 的列经过 规范化后是q1 和q 2 : 5 1 1 4 ?3 5 ?1 4 ?2 = = QR 3 1 5 3 4 0 2 先从 A 的列a1 和a2 计算。Gram-Schmidt 方法将a1 规范为q1 ,再从a2 中去减在q1 上的投 影。步骤如下: A= 1 4 1 ?6 1 ?3 ?2 a2 = v = a2 ? qT a2 q1 = q2 = 1 1 5 3 5 8 5 4 应用这种方法后我们将它们除以 a1 = 5和 v = 2。5 和 2 为 R 的对角线元素,并且 R(1,2)= qT a2 =-1。下面的图表示了每一个向量: 1 a1 = 4 3 q1 = 1 2
温馨提示:答案为网友推荐,仅供参考
相似回答