{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 第十七讲:正交矩阵和Gram-Schmidt正交化法\n", "\n", "## 标准正交矩阵\n", "\n", "定义标准正交向量(orthonormal):$q_i^Tq_j=\\begin{cases}0\\quad i\\neq j\\\\1\\quad i=j\\end{cases}$\n", "\n", "我们将标准正交向量放入矩阵中,有$Q=\\Bigg[q_1 q_2 \\cdots q_n\\Bigg]$。\n", "\n", "上一讲我们研究了$A^A$的特性,现在来观察$Q^TQ=\\begin{bmatrix} & q_1^T & \\\\ & q_2^T & \\\\ & \\vdots & \\\\ & q_n^T & \\end{bmatrix}\\Bigg[q_1 q_2 \\cdots q_n\\Bigg]$\n", "\n", "根据标准正交向量的定义,计算$Q^TQ=\\begin{bmatrix}1&0&\\cdots&0\\\\0&1&\\cdots&0\\\\\\vdots&\\vdots&\\ddots&\\vdots\\\\0&0&\\cdots&1\\end{bmatrix}=I$,我们也把$Q$成为标准正交矩阵(orthonormal matrix)。\n", "\n", "特别的,当$Q$恰好是方阵时,由于正交性,易得$Q$是可逆的,又$Q^TQ=I$,所以$Q^T=Q^{-1}$。\n", "\n", "* 举个置换矩阵的例子:$Q=\\begin{bmatrix}0&1&0\\\\1&0&0\\\\0&0&1\\end{bmatrix}$,则$Q^T=\\begin{bmatrix}0&1&0\\\\0&0&1\\\\1&0&0\\end{bmatrix}$,易得$Q^TQ=I$。\n", "* 使用上一讲的例子$Q=\\begin{bmatrix}\\cos\\theta&-\\sin\\theta\\\\\\sin\\theta&\\cos\\theta\\end{bmatrix}$,列向量长度为$1$,且列向量相互正交。\n", "* 其他例子$Q=\\frac{1}{\\sqrt 2}\\begin{bmatrix}1&1\\\\1&-1\\end{bmatrix}$,列向量长度为$1$,且列向量相互正交。\n", "* 使用上一个例子的矩阵,令$Q'=c\\begin{bmatrix}Q&Q\\\\Q&-Q\\end{bmatrix}$,取合适的$c$另列向量长度为$1$也可以构造标准正交矩阵:$Q=\\frac{1}{2}\\begin{bmatrix}1&1&1&1\\\\1&-1&1&-1\\\\1&1&-1&-1\\\\1&-1&-1&1\\end{bmatrix}$,这种构造方法以阿德玛(Adhemar)命名,对$2, 4, 16, 64, \\cdots$阶矩阵有效。\n", "* 再来看一个例子,$Q=\\frac{1}{3}\\begin{bmatrix}1&-2&2\\\\2&-1&-2\\\\2&2&1\\end{bmatrix}$,列向量长度为$1$,且列向量相互正交。格拉姆-施密特正交化法的缺点在于,由于要求得单位向量,所以我们总是除以向量的长度,这导致标准正交矩阵中总是带有根号,而上面几个例子很少有根号。\n", "\n", "再来看标准正交化有什么好处,假设要做投影,将向量$b$投影在标准正交矩阵$Q$的列空间中,根据上一讲的公式得$P=Q(Q^TQ)^{-1}Q^T$,易得$P=QQ^T$。我们断言,当列向量为标准正交基时,$QQ^T$是投影矩阵。极端情况,假设矩阵是方阵,而其列向量是标准正交的,则其列空间就是整个向量空间,而投影整个空间的投影矩阵就是单位矩阵,此时$QQ^T=I$。可以验证一下投影矩阵的两个性质:$(QQ^T)^T=(Q^T)^TQ^T=QQ^T$,得证;$(QQ^T)^2=QQ^TQQ^T=Q(Q^TQ)Q^T=QQ^T$,得证。\n", "\n", "我们计算的$A^TA\\hat x=A^Tb$,现在变为$Q^TQ\\hat x=Q^Tb$,也就是$\\hat x=Q^Tb$,分解开来看就是 $\\underline{\\hat x_i=q_i^Tb}$,这个式子在很多数学领域都有重要作用。当我们知道标准正交基,则解向量第$i$个分量为基的第$i$个分量乘以$b$,在第$i$个基方向上的投影就等于$q_i^Tb$。\n", "\n", "## Gram-Schmidt正交化法\n", "\n", "我们有两个线性无关的向量$a, b$,先把它们化为正交向量$A, B$,再将它们单位化,变为单位正交向量$q_1=\\frac{A}{\\left\\|A\\right\\|}, q_2=\\frac{B}{\\left\\|B\\right\\|}$:\n", "\n", "* 我们取定$a$向量的方向,$a=A$;\n", "* 接下来将$b$投影在$A$的法方向上得到$B$,也就是求子空间投影一讲中,我们提到的误差向量$e=b-p$,即$B=b-\\frac{A^Tb}{A^TA}A$。检验一下$A\\bot B$,$A^TB=A^Tb-A^T\\frac{A^Tb}{A^TA}A=A^Tb-\\frac{A^TA}{A^TA}A^Tb=0$。($\\frac{A^Tb}{A^TA}A$就是$A\\hat x=p$。)\n", "\n", "如果我们有三个线性无关的向量$a, b, c$,则我们现需要求它们的正交向量$A, B, C$,再将它们单位化,变为单位正交向量$q_1=\\frac{A}{\\left\\|A\\right\\|}, q_2=\\frac{B}{\\left\\|B\\right\\|}, q_3=\\frac{C}{\\left\\|C\\right\\|}$:\n", "\n", "* 前两个向量我们已经得到了,我们现在需要求第三个向量同时正交于$A, B$;\n", "* 我们依然沿用上面的方法,从$c$中减去其在$A, B$上的分量,得到正交与$A, B$的$C$:$C=c-\\frac{A^Tc}{A^TA}A-\\frac{B^Tc}{B^TB}B$。\n", "\n", "现在我们试验一下推导出来的公式,$a=\\begin{bmatrix}1\\\\1\\\\1\\end{bmatrix}, b=\\begin{bmatrix}1\\\\0\\\\2\\end{bmatrix}$:\n", "\n", "* 则$A=a=\\begin{bmatrix}1\\\\1\\\\1\\end{bmatrix}$;\n", "* 根据公式有$B=a-hA$,$h$是比值$\\frac{A^Tb}{A^TA}=\\frac{3}{3}$,则$B=\\begin{bmatrix}1\\\\1\\\\1\\end{bmatrix}-\\frac{3}{3}\\begin{bmatrix}1\\\\0\\\\2\\end{bmatrix}=\\begin{bmatrix}0\\\\-1\\\\1\\end{bmatrix}$。验证一下正交性有$A\\cdot B=0$。\n", "* 单位化,$q_1=\\frac{1}{\\sqrt 3}\\begin{bmatrix}1\\\\1\\\\1\\end{bmatrix},\\quad q_2=\\frac{1}{\\sqrt 2}\\begin{bmatrix}1\\\\0\\\\2\\end{bmatrix}$,则标准正交矩阵为$Q=\\begin{bmatrix}\\frac{1}{\\sqrt 3}&0\\\\\\frac{1}{\\sqrt 3}&-\\frac{1}{\\sqrt 2}\\\\\\frac{1}{\\sqrt 3}&\\frac{1}{\\sqrt 2}\\end{bmatrix}$,对比原来的矩阵$D=\\begin{bmatrix}1&1\\\\1&0\\\\1&2\\end{bmatrix}$,有$D, Q$的列空间是相同的,我们只是将原来的基标准正交化了。\n", "\n", "我们曾经用矩阵的眼光审视消元法,有$A=LU$。同样的,我们也用矩阵表达标准正交化,$A=QR$。设矩阵$A$有两个列向量$\\Bigg[a_1 a_2\\Bigg]$,则标准正交化后有$\\Bigg[a_1 a_2\\Bigg]=\\Bigg[q_1 q_2\\Bigg]\\begin{bmatrix}a_1^Tq_1&a_2^Tq_1\\\\a_1^Tq_2&a_2^Tq_2\\end{bmatrix}$,而左下角的$a_1^Tq_2$始终为$0$,因为Gram-Schmidt正交化总是使得$a_1\\bot q_2$,后来构造的向量总是正交于先前的向量。所以这个$R$矩阵是一个上三角矩阵。" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }