上节课具体定义了矩阵的列空间和零空间,那么如何求得这些向量空间呢?本节课是从定义转到算法。今天主要讲的是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=⎣⎡​123​246​268​2810​⎦⎤​

  (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=⎣⎡​123​246​268​2810​⎦⎤​→⎣⎡​100​200​222​244​⎦⎤​

  第二列中没有主元,因此主元二是第二行第三列的 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⎣⎡​100​200​222​244​⎦⎤​→⎣⎡​100​200​220​240​⎦⎤​=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列对应的系数就能够确定了。反之则不成立。

  计算零空间的步骤为

  1. 消元->得到阶梯形矩阵
  2. 得到主列(pivot columns)和自由列->得到主变量和自由变量
  3. 对自由变量逐一进行one-hot赋值,并求出对应的特解
  4. 零空间等于特解的线性组合

  矩阵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=⎣⎡​100​200​220​240​⎦⎤​→⎣⎡​100​200​020​−240​⎦⎤​→⎣⎡​100​200​010​−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∗r​0(m−r)∗r​​Fr∗(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[I​F​][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=[I0​F0​]

  为了方便理解,举个例子: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=⎣⎢⎢⎡​1222​2468​36810​⎦⎥⎥⎤​,求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:主变量和特解相关推荐

  1. 列运算_MIT—线性代数笔记06 列空间和零空间

    第06讲 列空间和零空间 Column space & Nullspace 网易公开课​open.163.com 本节继续研究子空间,特别是矩阵的列空间(column space)和零空间(n ...

  2. 我总结的120页《图解MIT线性代数笔记.pdf》,都是干货!

    作者:丁坤博 北京大学研究生 线性代数在工科学科上的地位是任何学科无可比拟的,MIT的线性代数课程更是线性代数课程中的最佳学习资料,我们本次分享这套课程的图解笔记. 经过最近几个月的整理和总结,我们产 ...

  3. MIT线性代数笔记三 矩阵的乘法和逆矩阵

    文章目录 1. 矩阵乘法 Matrix multiplication 1.1 标准方法(行乘以列) 1.2 列向量的线性组合 1.3 行向量的线性组合 1.4 分块乘法 2. 逆矩阵 2.1 逆矩阵的 ...

  4. MIT线性代数笔记九 线性无关,基和维度

      向量的线性无关意味着什么?如何用线性无关的概念来帮助我们描述包括零空间在内的子空间.   首先我们需要注意的是,线性无关是针对向量组而言的,而不是对矩阵而言的.   重要概念:线性无关(线性相关) ...

  5. 矩阵论 - 7 - 求解Ax=0:主变量、特解

    求解Ax=0:主变量.特解 求零空间(Nullspace) 矩阵 \(A\) 的零空间即满足 \(Ax=0\) 的所有构成 \(x\) 的向量空间. 对于矩阵 \(A\) 进行"行操作&qu ...

  6. MIT线性代数笔记十七讲 正交矩阵和施密特正交化

      本节是"正交"部分的最后内容.Gram-Schmidt 过程可以将原空间的一组基转变为标准正交基. 文章目录 1. 标准正交向量 Orthonormal vectors 2. ...

  7. MIT线性代数:6.列空间和零向量

    1.列空间 该矩阵A是R^4空间的子空间(因为是4*3的矩阵,是四维向量),这个子空间是A的列空间所有列的线性组合.那么他对于每个Ax=b的每个b是否都有解呢?(也就是什么样的b才会使得Ax=b有解) ...

  8. MIT 18.06 线性代数公开课笔记 Lecture07Ax=0: 主变量, 特解

    本节课我们将从定义转换到算法, 如何解出 Ax=0A\mathbf{x}=\mathbf{0}Ax=0 . 取矩阵 A=[1222246836810]A=\begin{bmatrix} 1&2 ...

  9. 求解Ax=0:主变量、自由变量、特殊解

    上一篇简单介绍了列空间(column space)和零空间(null space),这一次主要介绍如何求出零空间内的向量,即主要讨论Ax=0.假设有矩阵A=,略微观察一下其行和列可看出,列2是列1的倍 ...

  10. opencv求解AX=0

    在Ax=0时候是不能用cvsolve来接函数的,但是可以利用一下函数来求解 [cpp] view plaincopyprint? #include<cv.h> #include<io ...

最新文章

  1. org.hibernate.TypeMismatchException: Provided id of the wrong type for class *** Expected ***
  2. Docker最全教程——数据库容器化(十一)
  3. Linux 命令之 let -- bash 中用于计算的工具,用于执行一个或多个表达式
  4. 前端学习(3248):react的脚手架文件
  5. NginxJava笔记-Webservice使用HTTPS协议及Spring Boot配置tomcat
  6. 年薪30万的Java架构师必会的springboot面试题
  7. python做逻辑回归r2_利用python实现逻辑回归
  8. Nginx负载均衡服务器实现会话粘贴的几种方式
  9. active控件和java脚本_Active控件问题小结(附解决办法)
  10. 九大内置对象及其常用方法
  11. 如何选择适合你的兴趣爱好(四十六),豫剧
  12. 高性能计算服务器计算费价格,高性能计算云服务器价格表
  13. 计算机三级网络技术知识点大全(九)
  14. 樱花树下的约定歌词用计算机,樱花树下的约定歌词 可泽、夏凌兮_晴格歌词网...
  15. 【Python】list写入txt文件
  16. docker安装与重装
  17. ZigBee网络路由算法设计
  18. 百度和谷歌:局域网战胜互联网
  19. 【英语口语】01 - 原子介绍
  20. 计算机是怎样跑起来的笔记摘要

热门文章

  1. 斐讯音箱控制扫地机器人_【斐讯 R1 智能音箱使用体验】操作|功能|音质|识别_摘要频道_什么值得买...
  2. 云平台、面向服务的体系结构和云编程
  3. python小欢喜(八)俄罗斯方块 (3) 组合对象的旋转
  4. 关于向量的叉乘右手定则判方向
  5. 助你成为Java大神的十个建议
  6. c语言考研必刷题小程序,小程序推荐:大学生必备刷题小程序,内容涵盖各种证书考试题型...
  7. oracle数据库 同义词读写操作,Oracle数据库之同义词(SYNONYM)使用
  8. MySQL中的B+树索引结构
  9. uniapp拍照上传照片流程笔记
  10. 苹果和华为如何隔空传照片