【线性代数】如何寻找一个投影矩阵

引言

想一下,在什么情况下可能需要将一个向量往一个子空间投影。在MIT的线代课程中,Gilbert教授给出了一种场景:即我们想要求解\(Ax=b\),但是\(b\)不在\(A\)的列空间中,此时我们希望在\(A\)的列空间中找一个离\(\overrightarrow{b}\)最近的向量\(\overrightarrow{f}\),求解\(A\hat{x}=f\),借由\(\hat{x}\)给出\(x\)的近似解。
矩阵乘法可以表示向量的线性变换,所以本篇笔记的主要内容是记录找到一个投影矩阵\(P\)的方法,通过左乘它完成向量对某一个子空间的投影,将向量\(\overrightarrow{b}\)转换为另一个向量\(\overrightarrow{f}\)。即:\(P\overrightarrow{b}=\overrightarrow{f}\)

平面上的投影


现在的情况如图所示,我们先来试着推导一下在平面中实现投影的投影矩阵长什么样子。我们想要将向量\(\overrightarrow{b}\)往\(\overrightarrow{a}\)上投影,现在已经在图上做出了投影的结果,即\(\overrightarrow{f}\)。那么,首先因为它俩是共线关系有:\[
\begin{equation}
\overrightarrow{f}=λ\overrightarrow{a}
\end{equation}\]
其次:\[
\begin{equation}
(\overrightarrow{f}-\overrightarrow{b})\perp{\overrightarrow{a}}
\end{equation}\]
知晓这两个关系,我们大概能推导出我们的结果了。将(2)的关系写成矩阵乘法的形式,应该有\[
\begin{equation}
a^{\mathrm{T}}(λa-b)=0
\end{equation}\]
化简一下,去掉括号有\[
\begin{equation}
λa^{\mathrm{T}}a=a^{\mathrm{T}}b
\end{equation}\]
由于\(a^{\mathrm{T}}a\)是一个数,两边除以它可以推出\[
\begin{equation}
λ = \frac{a^{\mathrm{T}}b}{a^{\mathrm{T}}a}
\end{equation}\]
然后再把得到的λ代回到(1)中,我们已经可以写出一个投影矩阵了:\[
\begin{equation}
f = aλ = a\frac{a^{\mathrm{T}}b}{a^{\mathrm{T}}a} = \frac{\ a\ a^{\mathrm{T}}}{a^{\mathrm{T}}a}b
\end{equation}\]
我们已经得到了一个投影矩阵了,那就是\[
\begin{equation}
P = \frac{\ a\ a^{\mathrm{T}}}{a^{\mathrm{T}}a}
\end{equation}\]我们给这个矩阵一个符号\(P\)。不得不说我们上面推导过程中\(a\)和\(b\)放置的位置都是有选择的,要不然不会这么顺利推出投影矩阵。但是好在我们已经得出了结果。

平面上的投影矩阵P

所以现在来看下P的性质:

  1. 观察P我们会发现这是一个对称矩阵,即\(P^{\mathrm{T}}=P\)
  2. \(rank(P)=1\)
  3. \(P\)的列空间是什么,它的列空间是向量\(\overrightarrow{a}\)所在的一条过原点的直线。一个矩阵对应的列空间定义为矩阵内列向量的线性组合,很显然这些线性组合得到的向量都落在这条直线上。
  4. 而且还有一个很有意思的性质,即\(P^2=P\)。实际推导一下很快得出结果,而且从几何角度想,左乘两次P矩阵相当于往\(P\)的列空间投影两次,第一次投影在\(f\)的位置上了,而\(f\)本身就在\(P\)的列空间中,再往\(P\)的列空间投影显然还在\(f\)这个位置,就是它本身。

所以到这里为止,我知道了在\(R^2\)中,一个向量\(\overrightarrow{b}\)左乘上一个投影矩阵\(P\)相当于往投影矩阵\(P\)所在的列空间\(C(P)\)投影,能得到一个处于子空间\(C(P)\)中的向量\(\overrightarrow{f}\)。并且,只要我们知道\(C(P)\)的一组基,就能求出\(P\),比如在上面的例子中,这组基是单个向量\(\overrightarrow{a}\)。

三维空间上的投影

二维空间可能并说明不了什么问题,让我们试试三维,凭我们从小到大的数学直觉,一般认为三维比二维空间更有说服力,而且能将一些结论推向高维。下面还是画一个在三维空间的抽象图:

这个图可能不是很好看,反正就是表达有一个平面,一个向量\(\overrightarrow{b}\)对着它投影得到\(\overrightarrow{f}\)。这里的平面是\(R^3\)中的一个子空间,显然它由一组基张成。这组基由两个线性无关的3维向量\(\overrightarrow{a_1},\overrightarrow{a_2}\)组成,将它们写成矩阵的形式为\(A=[\overrightarrow{a_1} \ \overrightarrow{a_2}]\),它是一个3x2的矩阵。那么还是老样子,仿照二维空间得出投影矩阵的流程,我们先要从图中找出向量对应的关系。第一点,\(\overrightarrow{f}\)在\(C(A)\)中,因此\[
\begin{equation}
f=A\hat{x}
\end{equation}\]
写成\(\hat{x}\)是为了与引言对应起来。同时,既然\(\overrightarrow{f}\)为\(\overrightarrow{b}\)的投影向量,\[\begin{equation}
(\overrightarrow{f}-\overrightarrow{b})\perp{C(A)}
\end{equation}\]其中\(C(A)\)是矩阵A对应的列空间,在这里即那个平面。当然也可以表示成\[
\begin{equation}
\left \{
\begin{array}{lr}
a_1^{\mathrm{T}}(b-A\hat{x})=0 \ a_2^{\mathrm{T}}(b-A\hat{x})=0 \\end{array}
\right.
\end{equation}
\]将它重新写回矩阵的形式有\[
\begin{equation}
\left[
\begin{matrix}
a_1^{\mathrm{T}}\a_2^{\mathrm{T}}
\end{matrix}
\right](b-A\hat{x})=\left[
\begin{matrix}
0\0
\end{matrix}
\right]
\end{equation}
\]也就是\[
\begin{equation}
A^{\mathrm{T}}(b-A\hat{x})=0
\end{equation}
\]
酷,我们先不急着展开(12),研究一下这个等式。所以\(b-A\hat{x}\)在哪个向量子空间中?它应该在\(A^{\mathrm{T}}\)的零空间中,也就是在\(A\)的左零空间中。
等等,在这里平面是\(A\)对应的列空间,而\(b-A\hat{x}\)处于\(A\)对应的左零空间。我们知道\(b-A\hat{x}\perp{平面}\),所以矩阵对应的左零空间与列空间正交。而这个本身就是一个性质:矩阵对应的左零空间与列空间是正交的(这个在四个基本子空间的笔记中有证明)。所以我们无意间证明了这个性质。
现在我们可以展开(12)等到我们一直想要知道的投影矩阵了。通过移项我们最终能得到这么一个等式\[
\begin{equation}
\hat{x}=(A^{\mathrm{T}}A)^{-1}A^{\mathrm{T}}b
\end{equation}\]
好吧,我其实省略了一步,为什么\(A^{\mathrm{T}}A\)一定可逆,它会不会不可逆?答案是\(A^{\mathrm{T}}A\)一定可逆。

\(A^{\mathrm{T}}A\)可逆的证明

我们前面已经知道\(rank(A)=2\),即\(A\)的列向量线性无关,所以\(Ax=0\)仅有0解。现在我们试着探究\(A^{\mathrm{T}}A\)的对应的零空间Nul(\(A^{\mathrm{T}}A\))。假设v是零空间中的一员。那么有\[(A^{\mathrm{T}}A)v=0\],那么左边式子左乘\(v^{\mathrm{T}}\)上式仍成立,即\[v^{\mathrm{T}}(A^{\mathrm{T}}A)v=0\]改变括号的位置,我们能得到\[(Av)^{\mathrm{T}}(Av)=0\]要使上式成立,仅在\(Av=0\)下才可能。而在一开始就说了,A的零空间仅有零向量,也就是说v=0时,\((A^{\mathrm{T}}A)v=0\)才会成立。所以\(A^{\mathrm{T}}A\)的零空间也仅有零向量,\(A^{\mathrm{T}}A\)对应的列向量线性无关,\(rank(A^{\mathrm{T}}A)=3\),行列满秩,矩阵可逆。

回到投影矩阵的求解

接着回到上面得到的(13)式,将它代回到(8)中,我们就能得到梦寐已久想知晓的投影矩阵了。我们将这个等式写出来:\[
\begin{equation}
f=A(A^{\mathrm{T}}A)^{-1}A^{\mathrm{T}}b
\end{equation}\]
所以向量b的左边就是我们要求的投影矩阵P了,我们将劳动成果单独写出来\[
\begin{equation}
P=A(A^{\mathrm{T}}A)^{-1}A^{\mathrm{T}}
\end{equation}\]
额,(15)式太复杂了,俺们将它化解一下吧。去掉括号,合并一下,得到了...单位矩阵\(I\)。不,肯定哪里出错了。是的,一开始给定的A是3x2的矩阵,A并不是方阵,所以并不能去掉括号得到\(A^{-1}\)。太好了,我们的成果保住了。

那么再来思考下,我们是在假设A是方阵的情况下,得到投影矩阵化简的最终形式是单位阵。嗯...仔细思考一下,这十分合理。我们一开始就是要将向量\(\overrightarrow{b}\)往A的列空间投影,那么现在A是个3x3的方阵,A张开的列空间就是三维空间\(R^3\)。一个\(R^3\)中的向量往\(R^3\)投影就是它本身,这个解释听起来很合理。

那么看来不能将(15)式化简了。我们再来将它和平面空间中得到的投影矩阵(7)对比一下。它们有相同的性质,比如都是对称矩阵,或者\(P^2=P\)。而且它们的形式也很相近。

好吧,我们最终得到了能将三维空间中将一个向量\(\overrightarrow{b}\)往一个子空间映射的投影矩阵\(P\)。矩阵乘法\(Pb\)的结果就是在这个子空间中有一个向量\(\overrightarrow{f}\),它是由\(\overrightarrow{b}\)投影得到。

总结

这个结论应该能被推向高维,即如果A不是3x2的矩阵,比如是4x3的矩阵。那么投影的过程就是四维空间中的一个向量\(\overrightarrow{b}\)往其中的一个三维子空间投影。这个子空间由3个线性无关的4维向量\(\overrightarrow{e_1},\overrightarrow{e_2},\overrightarrow{e_3}\)张成,将它们写在一起能得到一个矩阵\(A=[e_1,e_2,e_3]\)。再借由(15)我们能得到投影矩阵\(P\),作矩阵乘法,我们就能得到一个向量\(\overrightarrow{f}\),它在子空间中,并且是向量\(\overrightarrow{b}\)往三维子空间投影的结果。

原文地址:https://www.cnblogs.com/shayue/p/10500192.html

时间: 2024-10-11 06:57:33

【线性代数】如何寻找一个投影矩阵的相关文章

【线性代数】最小二乘与投影矩阵

前一篇文章<正交投影>中我们讲述了正交投影,现在我们来从正交投影的角度来看看我们熟悉的最小二乘法.我记得最早知道最小二乘法是在大一上高数课的时候,我们首先回顾一下什么是最小二乘法. 1.最小二乘法 最近机器学习比较火,机器学习中的许多算法都是对信息进行分类,比如说支持向量机就是根据已知信息来分类,神经网络可以找到输入输出的关系(当然,不能给出具体的数学表达式),这两种算法都能找到输入与输出的关系,分类和回归总是相辅相成的.以后有时间也准备写写关于机器学习方面的算法. 言归正传,最小二乘法的作用

【脚下生根】之深度探索安卓OpenGL投影矩阵

世界变化真快,前段时间windows开发技术热还在如火如荼,web技术就开始来势汹汹,正当web呈现欣欣向荣之际,安卓小机器人,咬过一口的苹果,winPhone开发平台又如闪电般划破了混沌的web世界. 相信很多开发者都在疑问,为什么世界不是围着我转?而是我在围着世界转.我的答案是,少林寺的和尚学打架,首先要学会站桩.要练功,先占三年桩.少林寺的和尚打架从来不围着别人转,而是别人围着他转. 世界的原理都是相通的,开发者一样,要做到脚下生根. 最近几天在看OpenGL的投影矩阵,自己也实现了一个投

投影矩阵的推导(Deriving Projection Matrices)

本文乃<投影矩阵的推导>译文,原文地址为: http://www.codeguru.com/cpp/misc/misc/math/article.php/c10123__1/Deriving-Projection-Matrices.htm,由于本人能力有限,有译的不明白的地方大家可以参考原文,谢谢^-^! 译者: 流星上的潴 如需转载,请注明出处,感谢! 在3D图形程序的基本矩阵变换中,投影矩阵是其中比较复杂的.平移和缩放浏览一下就能理解,旋转矩阵只要掌握了三角函数知识也可以理解,但投影矩阵有

(数学概念)矩阵的逆、伪逆、左右逆,最小二乘,投影矩阵

主要内容: 矩阵的逆.伪逆.左右逆 矩阵的左逆与最小二乘 左右逆与投影矩阵 一.矩阵的逆.伪逆.左右逆 1.矩阵的逆 定义: 设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=I. 则我们称B是A的逆矩阵,而A则被称为可逆矩阵. 可逆条件: A是可逆矩阵的充分必要条件是,即可逆矩阵就是非奇异矩阵.(当 时,A称为奇异矩阵) 性质: 矩阵A可逆的充要条件是A的行列式不等于0. 可逆矩阵一定是方阵. 如果矩阵A是可逆的,A的逆矩阵是唯一的. 可逆矩阵也被称为非奇异矩

投影矩阵的推导(Deriving Projection Matrices)(转)

本文乃<投影矩阵的推导>译文,原文地址为: http://www.codeguru.com/cpp/misc/misc/math/article.php/c10123__1/Deriving-Projection-Matrices.htm,由于本人能力有限,有译的不明白的地方大家可以参考原文,谢谢^-^! 在3D图形程序的基本矩阵变换中,投影矩阵是其中比较复杂的.平移和缩放浏览一下就能理解,旋转矩阵只要掌握了三角函数知识也可以理解,但投影矩阵有点棘手.如果你曾经看过投影矩阵,你会发现你的常识不

(数学)最小二乘的几何意义及投影矩阵

主要内容: 什么是最小二乘 最小二乘的几何意义 正交投影矩阵 什么是最小二乘? 假设我们手上有n组成对的数据,{(xi,yi):i=1…n},为了探究y变量与x变量的关系,我们希望用一个多项式来匹配它,可是多项式中的系数怎么确定呢?拿来拼凑肯定是不行的,最小二乘法告诉我们,这个多项式的系数应该让每个点的误差的平方之和最小. (百度百科)最小二乘法(又称最小平方法)是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际

numpy线性代数基础 - Python和MATLAB矩阵处理的不同

http://blog.csdn.net/pipisorry/article/details/39087583 在介绍工具之前先对理论基础进行必要的回顾是很必要的.没有理论的基础,讲再多的应用都是空中楼阁.本文主要设涉及线性代数和矩阵论的基本内容.先回顾这部分理论基础,然后给出MATLAB,继而给出Python的处理.个人感觉,因为Python是面向对象的,操纵起来会更接近人的正常思维:而MATLAB大多是以函数实现的,是向对象施加的一个操作.比如,A是一个矩阵,它有一个属性attr.用Pyth

OpenGL投影矩阵

概述 透视投影 正交投影 概述 计算机显示器是一个2D平面.OpenGL渲染的3D场景必须以2D图像方式投影到计算机屏幕上.GL_PROJECTION矩阵用于该投影变换.首先,它将所有定点数据从观察坐标转换到裁减坐标.接着,这些裁减坐标通过除以w分量的方式转换到归一化设备坐标(NDC). 因此,我们需要记住一点:裁减变换(视锥剔除)与NDC变换都保存在GL_PROJECTION矩阵中.下述章节描述如何从6个限定参数(左.右.下.上.近平面.远平面)构建投影矩阵. 注意,视锥剔除(裁减)在裁减坐标

Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵

我们现在准备好在代码中添加透视投影了.Android的Matrix类为它准备了两个方法------frustumM()和perspectiveM().不幸的是,frustumM()的个缺陷,它会影响某些类型的投影,而perspectiveM()只是从Android的ICS版本开始才被引入,在早期的Android版本里并没有这个方法.我们可以简单地支持ICS及其以上的版本,但是这样会丢掉很大一部分市场,一些用户依然运行早期的Android版本. 作为替代,我们可以创建我们自己的方法来实现投影矩阵.