MIT线性代数笔记七 列空间和零空间求解 Ax=0:主变量和特解
上节课具体定义了矩阵的列空间和零空间,那么如何求得这些向量空间呢?本节课是从定义转到算法。今天主要讲的是Ax=0Ax=0Ax=0对应的零空间。
简单来说,零空间是特解的线性组合。特解的个数等于自由变量的个数。
Ax=0→Ux=0→RN=0Ax=0 \rightarrow Ux=0 \rightarrow RN=0Ax=0→Ux=0→RN=0
本节同时提出了秩(rank = #pivot)的概念。Ax=0Ax=0Ax=0本质是求解pivot column(基向量)转换到自由向量的系数。
文章目录
- 1. 计算零空间 Nullspace
- 2. 特解 Special solutions
- 3. 行最简阶梯矩阵 Reduced row echelon form (rref)
1. 计算零空间 Nullspace
矩阵AAA的零空间即满足Ax=0Ax=0Ax=0的所有xxx构成的向量空间。如果把当看作是行向量的拼接,那么每个行向量与xxx的乘积均为0。
取A=[1222246836810]取A=\left[ \begin{array} { c c c c } { 1 } & { 2 } & { 2 } & { 2 } \\ { 2 } & { 4 } & { 6 } & { 8 } \\ { 3 } & { 6 } & { 8 } & { 10 } \end{array} \right]取A=⎣⎡1232462682810⎦⎤
(A 的列空间并不是线性无关的)无论矩阵 A 是否可逆,我们都采用消元法作为计算零空间的算法。
对于矩阵AAA 进行“行操作”并不会改变Ax=bAx=bAx=b的解,因此也不会改变零空间。(但是会改变列空间。)此处不需要应用增广矩阵,因为等号右侧的向量b=0b=0b=0。
第一步消元得到:
A=[1222246836810]→[122200240024]A=\left[ \begin{array} { c c c c } { 1 } & { 2 } & { 2 } & { 2 } \\ { 2 } & { 4 } & { 6 } & { 8 } \\ { 3 } & { 6 } & { 8 } & { 10 } \end{array} \right] \rightarrow \left[ \begin{array} { c c c c } { 1 } & { 2 } & { 2 } & { 2 } \\ { 0 } & { 0 } & { 2 } & { 4 } \\ { 0 } & { 0 } & { 2 } & { 4 } \end{array} \right] A=⎣⎡1232462682810⎦⎤→⎣⎡100200222244⎦⎤
第二列中没有主元,因此主元二是第二行第三列的 2。
[122200240024]→[122200240000]=U\left[ \begin{array} { c c c c } { 1 } & { 2 } & { 2 } & { 2 } \\ { 0 } & { 0 } & { 2 } & { 4 } \\ { 0 } & { 0 } & { 2 } & { 4 } \end{array} \right] \rightarrow \left[ \begin{array} { c c c c } { 1 } & { 2 } & { 2 } & { 2 } \\ { 0 } & { 0 } & { 2 } & { 4 } \\ { 0 } & { 0 } & { 0 } & { 0 } \end{array} \right] = U⎣⎡100200222244⎦⎤→⎣⎡100200220240⎦⎤=U
其中矩阵UUU为阶梯形(echelon)矩阵。其第三行变为零,是因为第三行的行向量本身就是第一行和第二行行向量的线性组合。
rank=numberofpivotsrank = number \ of\ pivotsrank=number of pivots
矩阵的秩(rank)就是矩阵的主元的个数。本例中矩阵 AAA 和UUU的秩均为 2。矩阵中包含主元的列为主元列(pivot column) ,不包含主元的列称为自由列(free column)。
2. 特解 Special solutions
当我们将系数矩阵变换为上三角阵UUU时,就可以用回代求得方程Ux=0Ux=0Ux=0 的解。本例中,包含主元的矩阵第1列和第3列为主元列,而不包含主元的第2列和第4列为自由列。对自由变量(free variable)x2x_2x2 和 x4x_4x4 我们可以进行赋值。例如令 x2=1x_2=1x2=1,x4=0x_4=0x4=0。
2x3+4x4=0→x3=02x_3+4x_4=0 \rightarrow x_3=02x3+4x4=0→x3=0
x1+2x2+2x3+2x4=0→x1=−1x_1+2x_2+2x_3+2x_4=0 \rightarrow x_1=-1x1+2x2+2x3+2x4=0→x1=−1
因此可得解x=[−2100]x=\left[ \begin{array} { c } { - 2 } \\ { 1 } \\ { 0 }\\{0} \end{array} \right]x=⎣⎢⎢⎡−2100⎦⎥⎥⎤,xxx的任意倍数也都是Ax=0Ax=0Ax=0的解,即解均在零空间之中。但它显然并不是整个零空间。
取自由变量中x2=0x_2=0x2=0 而 x4=1x_4=1x4=1,则可得到另一解x=[−202−1]x=\left[ \begin{array} { c } { -2 } \\ { 0 } \\ { 2 }\\{-1} \end{array} \right]x=⎣⎢⎢⎡−202−1⎦⎥⎥⎤。
Q:为什么是对自由列进行one-hot赋值,而不是对pivot列进行one-hot赋值呢?此问题分为两个部分,一个是为什么对自由列进行赋值,第二个是为什么进行one-hot赋值?
A:因为自由列是由pivot列的线性组合构成的。自由列确定了,pivot列对应的系数就能够确定了。反之则不成立。
计算零空间的步骤为:
- 消元->得到阶梯形矩阵
- 得到主列(pivot columns)和自由列->得到主变量和自由变量
- 对自由变量逐一进行one-hot赋值,并求出对应的特解
- 零空间等于特解的线性组合
矩阵AAA的零空间就是这些“特解”向量的线性组合所构成的向量空间。矩阵的秩rrr等于其主元列的数目,因此自由列的数目就等于n−rn-rn−r,即列的数目减去主元列的数目。这个数值等于特解的数目和零空间的维数。
主元列和自由列的一个重要区别就是,自由列可以表示为其左侧所有主元列的线性组合,而主元列则不可以。
在本例中,四个自由变量分别取 1 会得到零空间的四个特解。如果把自由变量都赋值为 0 会怎么样?答案是求得的解为 0 向量。
3. 行最简阶梯矩阵 Reduced row echelon form (rref)
继续消元我们可以将矩阵 UUU 转变为行最简阶梯矩阵形式 RRR, 其中主元为 1,而主元列上下位置皆为 0。在 Matlab中用命令 rref(A)实现这一过程。其中使用Numpy求解rref的代码如下:
import numpy as np
from sympy import Matrix
A = np.array([[2,3,1,0],[1,-2,4,0],[3,8,-2,0],[4,-1,9,0]])
# 将numpy.array转为sympy.Matrix
matrix = Matrix(A)
print(matrix.rref())
U=[122200240000]→[120−200240000]→[120−200120000]=RU=\left[ \begin{array} { c c c c } { 1 } & { 2 } & { 2 } & { 2 } \\ { 0 } & { 0 } & { 2 } & { 4 } \\ { 0 } & { 0 } & { 0 } & { 0 } \end{array} \right]\rightarrow \left[ \begin{array} { c c c c } { 1 } & { 2 } & { 0 } & { -2 } \\ { 0 } & { 0 } & { 2 } & { 4 } \\ { 0 } & { 0 } & { 0 } & { 0 } \end{array} \right] \rightarrow \left[ \begin{array} { c c c c } { 1 } & { 2 } & { 0 } & { -2 } \\ { 0 } & { 0 } & { 1 } & { 2 } \\ { 0 } & { 0 } & { 0 } & { 0 } \end{array} \right] =R U=⎣⎡100200220240⎦⎤→⎣⎡100200020−240⎦⎤→⎣⎡100200010−220⎦⎤=R
在矩阵中主元行和主元列的交汇处存在一个单位阵。通过“列交换”,可以将矩阵RRR 中的主元列集中在左侧,从而在左上角形成这个单位阵,而将自由列集中在矩阵的右侧。如果矩阵AAA中的某些行是线性相关的,则在矩阵RRR的下半部分就会出现一些完全为 0 的行向量。
R=[Ir∗rFr∗(n−r)0(m−r)∗r0(m−r)∗(n−r)]r主元行m−r0向量行R=\left[ \begin{array} { c c } { I_{r*r} } & { F_{r*(n-r)} } \\ { 0_{{(m-r)*r}} } & { 0_{(m-r)*(n-r)} } \end{array} \right] \left. \begin{array} { l } { r主元行 } \\ { m-r \ 0 \ 向量行} \end{array} \right.R=[Ir∗r0(m−r)∗rFr∗(n−r)0(m−r)∗(n−r)]r主元行m−r 0 向量行
r主元列n−r自由列r主元列 \quad\quad n-r自由列r主元列n−r自由列
这里的 III 是一个r∗rr*rr∗r 的方阵。FFF 即自由列消元后组成的部分。
原方程Ax=0Ax=0Ax=0变为求解RRR 的主元行乘以xxx,[IF][xpivot xfree ]=0\left[ \begin{array} { l l } { I } & { F } \end{array} \right] \left[ \begin{array} { l } { x _ { \text { pivot } } } \\ { x _ { \text { free } } } \end{array} \right] = 0[IF][x pivot x free ]=0,则xpivot=−F∗xfreex_{pivot}=-F*x_{free}xpivot=−F∗xfree。令xfree=Ix_{free}=Ixfree=I,则xpivot=−Fx_{pivot}=-Fxpivot=−F。
我们将 Ax=0Ax=0Ax=0的特解作为列向量写成一个矩阵 N,即零空间矩阵。在Matlab中可以用null命令求出。则其形式为 N=[I]N=\left[ \begin{array} { l } { } \\ { I } \end{array} \right]N=[I]。这里的III为一个 (n−r)∗(n−r)(n-r)*(n-r)(n−r)∗(n−r) 的矩阵,就是对n−rn-rn−r 个自由变量分别赋值为 1 所构造出来的,零空间矩阵满足RN=0RN=0RN=0,0 矩阵是一个 m∗(n−r)m*(n-r)m∗(n−r)的矩阵。则从矩阵分块乘法运算可知零空间矩阵上半部分为−F-F−F,即 NNN 最终形式为
N=[−FI]r主变量n−r自由向量N=\left[ \begin{array} { c } { -F } \\ {I } \end{array} \right] \left. \begin{array} { l } { r主变量 } \\ { n-r \ 自由向量} \end{array} \right.N=[−FI]r主变量n−r 自由向量
R=[IF00]R=\left[ \begin{array} { c c } { I } & { F } \\ { 0 } & { 0 } \end{array} \right] R=[I0F0]
为了方便理解,举个例子:A=[1232462682810]A=\left[ \begin{array} { l l l } { 1 } & { 2 } & { 3 } \\ { 2 } & { 4 } & { 6 } \\ { 2 } & { 6 } & { 8 } \\ { 2 } & { 8 } & { 10 } \end{array} \right]A=⎣⎢⎢⎡1222246836810⎦⎥⎥⎤,求A的零空间。
其中零空间为c∗[−1−11]c*\left[ \begin{array} { c } { - 1 } \\ { - 1 } \\ { 1 } \end{array} \right]c∗⎣⎡−1−11⎦⎤。
使用Python求解零空间的代码如下,参考链接为https://scipy-cookbook.readthedocs.io/items/RankNullspace.html
import numpy as np
from numpy.linalg import svddef nullspace(A, atol=1e-13, rtol=0):"""Compute an approximate basis for the nullspace of A.The algorithm used by this function is based on the singular valuedecomposition of `A`.Parameters----------A : ndarrayA should be at most 2-D. A 1-D array with length k will be treatedas a 2-D with shape (1, k)atol : floatThe absolute tolerance for a zero singular value. Singular valuessmaller than `atol` are considered to be zero.rtol : floatThe relative tolerance. Singular values less than rtol*smax areconsidered to be zero, where smax is the largest singular value.If both `atol` and `rtol` are positive, the combined tolerance is themaximum of the two; that is::tol = max(atol, rtol * smax)Singular values smaller than `tol` are considered to be zero.Return value------------ns : ndarrayIf `A` is an array with shape (m, k), then `ns` will be an arraywith shape (k, n), where n is the estimated dimension of thenullspace of `A`. The columns of `ns` are a basis for thenullspace; each element in numpy.dot(A, ns) will be approximatelyzero."""A = np.atleast_2d(A)u, s, vh = svd(A)tol = max(atol, rtol * s[0])nnz = (s >= tol).sum()ns = vh[nnz:].conj().Treturn ns
a = np.array([[1.0, 2.0, 3.0], [2.0, 4.0, 6.0], [2.0, 6.0, 8.0], [2.0, 8.0, 10.0]])
ns = nullspace(a)
print(ns)
MIT线性代数笔记七 列空间和零空间求解 Ax=0:主变量和特解相关推荐
- 列运算_MIT—线性代数笔记06 列空间和零空间
第06讲 列空间和零空间 Column space & Nullspace 网易公开课open.163.com 本节继续研究子空间,特别是矩阵的列空间(column space)和零空间(n ...
- 我总结的120页《图解MIT线性代数笔记.pdf》,都是干货!
作者:丁坤博 北京大学研究生 线性代数在工科学科上的地位是任何学科无可比拟的,MIT的线性代数课程更是线性代数课程中的最佳学习资料,我们本次分享这套课程的图解笔记. 经过最近几个月的整理和总结,我们产 ...
- MIT线性代数笔记三 矩阵的乘法和逆矩阵
文章目录 1. 矩阵乘法 Matrix multiplication 1.1 标准方法(行乘以列) 1.2 列向量的线性组合 1.3 行向量的线性组合 1.4 分块乘法 2. 逆矩阵 2.1 逆矩阵的 ...
- MIT线性代数笔记九 线性无关,基和维度
向量的线性无关意味着什么?如何用线性无关的概念来帮助我们描述包括零空间在内的子空间. 首先我们需要注意的是,线性无关是针对向量组而言的,而不是对矩阵而言的. 重要概念:线性无关(线性相关) ...
- 矩阵论 - 7 - 求解Ax=0:主变量、特解
求解Ax=0:主变量.特解 求零空间(Nullspace) 矩阵 \(A\) 的零空间即满足 \(Ax=0\) 的所有构成 \(x\) 的向量空间. 对于矩阵 \(A\) 进行"行操作&qu ...
- MIT线性代数笔记十七讲 正交矩阵和施密特正交化
本节是"正交"部分的最后内容.Gram-Schmidt 过程可以将原空间的一组基转变为标准正交基. 文章目录 1. 标准正交向量 Orthonormal vectors 2. ...
- MIT线性代数:6.列空间和零向量
1.列空间 该矩阵A是R^4空间的子空间(因为是4*3的矩阵,是四维向量),这个子空间是A的列空间所有列的线性组合.那么他对于每个Ax=b的每个b是否都有解呢?(也就是什么样的b才会使得Ax=b有解) ...
- MIT 18.06 线性代数公开课笔记 Lecture07Ax=0: 主变量, 特解
本节课我们将从定义转换到算法, 如何解出 Ax=0A\mathbf{x}=\mathbf{0}Ax=0 . 取矩阵 A=[1222246836810]A=\begin{bmatrix} 1&2 ...
- 求解Ax=0:主变量、自由变量、特殊解
上一篇简单介绍了列空间(column space)和零空间(null space),这一次主要介绍如何求出零空间内的向量,即主要讨论Ax=0.假设有矩阵A=,略微观察一下其行和列可看出,列2是列1的倍 ...
- opencv求解AX=0
在Ax=0时候是不能用cvsolve来接函数的,但是可以利用一下函数来求解 [cpp] view plaincopyprint? #include<cv.h> #include<io ...
最新文章
- org.hibernate.TypeMismatchException: Provided id of the wrong type for class *** Expected ***
- Docker最全教程——数据库容器化(十一)
- Linux 命令之 let -- bash 中用于计算的工具,用于执行一个或多个表达式
- 前端学习(3248):react的脚手架文件
- NginxJava笔记-Webservice使用HTTPS协议及Spring Boot配置tomcat
- 年薪30万的Java架构师必会的springboot面试题
- python做逻辑回归r2_利用python实现逻辑回归
- Nginx负载均衡服务器实现会话粘贴的几种方式
- active控件和java脚本_Active控件问题小结(附解决办法)
- 九大内置对象及其常用方法
- 如何选择适合你的兴趣爱好(四十六),豫剧
- 高性能计算服务器计算费价格,高性能计算云服务器价格表
- 计算机三级网络技术知识点大全(九)
- 樱花树下的约定歌词用计算机,樱花树下的约定歌词 可泽、夏凌兮_晴格歌词网...
- 【Python】list写入txt文件
- docker安装与重装
- ZigBee网络路由算法设计
- 百度和谷歌:局域网战胜互联网
- 【英语口语】01 - 原子介绍
- 计算机是怎样跑起来的笔记摘要
热门文章
- 斐讯音箱控制扫地机器人_【斐讯 R1 智能音箱使用体验】操作|功能|音质|识别_摘要频道_什么值得买...
- 云平台、面向服务的体系结构和云编程
- python小欢喜(八)俄罗斯方块 (3) 组合对象的旋转
- 关于向量的叉乘右手定则判方向
- 助你成为Java大神的十个建议
- c语言考研必刷题小程序,小程序推荐:大学生必备刷题小程序,内容涵盖各种证书考试题型...
- oracle数据库 同义词读写操作,Oracle数据库之同义词(SYNONYM)使用
- MySQL中的B+树索引结构
- uniapp拍照上传照片流程笔记
- 苹果和华为如何隔空传照片