线性代数之一:方程组与矩阵
2017-11-01 22:30
274 查看
1.1 线性方程组
1.1.1 方程组定义
一个m个方程,n个未知数的方程组定义如下:a11x1+a12x2+...+a1nxna21x1+a22x2+...+a2nxn⋮am1x1+am2x2+...+amnxn=b1=b2=bm(1)
其中aij及bi均为实数,(1)称为m*n的线性方程组。若方程组有解,则称其为相容的(consistent),否则为不相容的。
1.1.2 等价方程组
定义:若两个含有相同变量的方程组具有相同的解集,则称它们是等价的。有三种运算可以得到一个等价的方程组:
交换任意两个方程的顺序
任一方程两边同乘一个非零的实数
一方程的倍数加到另一个方程上
1.1.3 系数矩阵
把(1)式中的系数与一个m*n的阵列联系起来,称这个了阵列为方程组的系数矩阵(coefficient matrix),若m=n则称此矩阵为方阵。⎡⎣⎢⎢⎢⎢a11a21⋮am1a12a22am2.........a1na2namn⎤⎦⎥⎥⎥⎥
如果在系数矩阵的右侧添加一列方程组的右端项,则得到新的矩阵:
⎡⎣⎢⎢⎢⎢⎢a11a21⋮am1a12a22am2.........a1na2namnb1b2⋮bm⎤⎦⎥⎥⎥⎥⎥
称这个矩阵为方程组的增广矩阵(augmented maxtrix)。
1.1.4 解方程组
传统的解方程组即消元法,有了矩阵这个工具后,方程组的求解可以通过对增广矩阵做行运算得到:交换两行
以非零实数乘以某行
将某行替换为它与其他行的倍数的和
对于大型方程组,需要借助于计算机求解,下面的代码示例使用numpy求解方程组的解:
# 3x + y = 9 # x + 2y = 8 import numpy as np a = np.array([[3,1],[1,2]]) b = np.array([9,8]) result = np.linalg.solve(a,b) print result #[ 2. 3.]
1.2 行阶梯形
1.2.1 行阶梯形矩阵定义
若一个矩阵满足下面三个条件,则称其为行阶梯形矩阵(row echelon form)每一非零行中的第一个非零元素为1
第k行的元素不全为零时,第k+1行的首变量之前零的个数多于第k行首变量之前零的个数
所有元素均为零的行必在不全为零的行之后
右边的矩阵是行阶梯形:⎡⎣⎢100300110030⎤⎦⎥
使用行运算,将线性方程组的增广矩阵化为行阶梯形的过程称为高斯消元法(Gaussian elimination)
若一个线性方程组中方程的个数多于未知数的个数,则称其为超定的。通常不相容
若方程个数少于未知数的个数,则其为亚定的。通常相容,且有无穷解。
1.2.2 行最简形定义
若一个矩阵满足,矩阵是行阶梯形,且第一行的第一个非零元是其所在列的性非零元,则称矩阵为行简形。下面的矩阵是行最简形的⎡⎣⎢100010001321⎤⎦⎥
基于基本行运算将矩阵化为行最简形的过程称为Guass-Jordan消元法。
如果线性方程组的右端项全为零,则称其为齐次的。齐次方程组总是相容了,因为全零即为其一个解。
1.3 矩阵算术
1.3.1 矩阵记号
A=A(aij)=⎡⎣⎢⎢⎢⎢⎢a11a21⋮am1a12a22⋮am2......⋱...a1na2n⋮amn⎤⎦⎥⎥⎥⎥⎥行向量:一个1*n的矩阵,如[1234]
列向量:一个m*1的矩阵, 如⎡⎣⎢123⎤⎦⎥
对一个m*n的矩阵A,A的行向量表示为
ai→=(ai1,ai2,...,ain),i=1,2,..,m
A的列向量表示为
aj=⎡⎣⎢⎢⎢⎢⎢a1ja2j⋮amj⎤⎦⎥⎥⎥⎥⎥,j=1,2...,n
矩阵A可以用其列向量或其行向量表示:
A=(a1,a2,...,an)=⎡⎣⎢⎢⎢⎢a⃗ 1a⃗ 2⋮a⃗ m⎤⎦⎥⎥⎥⎥
1.3.2 算术法则
标量乘法:若A为m*n的矩阵,且n为一标量,则二者乘积矩阵B为n∗A(aij)=B(bij=n∗aij)
矩阵加法:若A,B均为m*n的矩阵,其和矩阵C为
A(aij)+B(bij)=C(cij=aij+bij)
1.3.3 矩阵乘法与线性方程组
对于方程组(1),若令A=⎡⎣⎢⎢⎢⎢a11a21⋮am1a12a22am2.........a1na2namn⎤⎦⎥⎥⎥⎥,x=⎡⎣⎢⎢⎢⎢x1x2⋮xn⎤⎦⎥⎥⎥⎥,b=⎡⎣⎢⎢⎢⎢b1b2⋮bm⎤⎦⎥⎥⎥⎥
并定义乘积Ax为
Ax=⎡⎣⎢⎢⎢⎢⎢a11x1+a12x2+...+a1nxna21x1+a22x2+...+a2nxn⋮am1x1+am2x2+...+amnxn⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢a⃗ 1xa⃗ 2x⋮a⃗ mx⎤⎦⎥⎥⎥⎥(2)
则线性方程组(1)等价于矩阵(2)。同样的将线性方程组表示为矩阵列向量和的形式:
Ax=x1⎡⎣⎢⎢⎢⎢a11a21⋮am1⎤⎦⎥⎥⎥⎥+x2⎡⎣⎢⎢⎢⎢a12a22⋮am2⎤⎦⎥⎥⎥⎥+⋯+xn⎡⎣⎢⎢⎢⎢a1na2n⋮amn⎤⎦⎥⎥⎥⎥=x1a1+x2a2+...+xnan
矩阵乘法定义:若A=(aij)为一个m*n的矩阵,矩阵B=(bij)是一个n*r的矩阵,则乘积AB=C(cij)为一个m*r的矩阵,其元素定义为:
cij=a⃗ ibj=∑k=1naikbkj
1.3.4 线性组合
a1,a2,...,an为Rm中的向量,且x1,x2,...,xn为标量,则和式:x1a1+x2a2+...+xnan称为向量a1,a2,...,an的一个线性组合线性方程组相容性定理:
一个线性方程组Ax=b相容的充要条件是向量b可写为矩阵A列向量的一个线性组合。
1.3.5 矩阵转置
一个m*n的矩阵A的转置为n*m的矩阵,定义为:AT(bij=aji)若一个方阵A,满足AT=A,则称A是对称的(symmetric)。
转置的代数法则:
(AT)T=A
(cA)T=c(AT)
(A+B)T=AT+BT
(AB)T=BTAT
1.3.6 矩阵乘法应用
现代检索技术是基于矩阵与线性代数的。在典型的情况下,一个数据库包含一组文档,且我们希望通过搜索条件找出最符合需要的文档。假设数据库包含m个文档与一个字典,字典包含了文档中排重后的关键字,字典包含的词数为n,且按字典序排序。我们将数据库表示为一个m*n的矩阵A,这个矩阵的第i行表示字典中第i个关键字在各个文档中的TF-IDF。如果一次检索包含多个关键字,将其表示为一个n*1的列向量x,如果字典中第i个关键字包含在检索中,则x的第i个元素为1。为完成检索,只需要计算ATx,结果为一个n*1的列向量,每行对应一个文档与搜索条件的匹配度,选择其中值最大的即为最匹配的结果。在第5章,可以通过向量夹角的余弦cos值来计算匹配度。
1.4 矩阵代数
1.4.1 运算法则
下列法则对任何标题n和m及矩阵A B C都是成立的:交换率:A+B = B+A
结合率:(A+B)+C = A+(B+C) (AB)C = A(BC)
分配率:A(B+C) = AB + AC
1.4.2 矩阵的逆
定义:单位矩阵 I=δij,其中δij={10当 i=j当 i≠j
定义:矩阵的逆,若存在矩阵B使用AB=BA=I,则称方阵A是可逆的(invertible)或非奇异的(nonsingular),矩阵B称A的逆,记作A−1。注意,只有方阵才可能可逆,非方阵不应使用奇异或非奇异的这一说法。
定理:若A B均为非奇异的方阵,则AB也是非奇异的,且(AB)−1=B−1A−1。
更一般的有 (A1A2...Ak)−1=A−1k...A−12A−11
1.4.3 使用numpy进行矩阵运算
下面使用python代码计算上面两节介绍的运算import numpy as np A = np.array([[1,2,3], [4,5,7], [7,8,9]]) I = np.eye(3) #三阶单位矩阵 print 3*A #标量乘法 print A+I #矩阵加法 print A.T #A的转置 print np.dot(A, I) #矩阵乘法 print np.linalg.inv(A) #计算A的逆
1.5 初等矩阵
1.5.1 定义
定义初等矩阵:如果从单位矩阵I开始,只进行一次初等行运算,得到的矩阵称为初等(elementary)矩阵,因此有三类初等矩阵,以n=3为例。交换两行 E1=⎡⎣⎢010100001⎤⎦⎥
一行乘积 E2=⎡⎣⎢100010003⎤⎦⎥
乘后加行 E3=⎡⎣⎢100010301⎤⎦⎥
一般的,若E为n阶初等矩阵,A为n*r的矩阵,E*A的作用就是对A进行相应的行运算。A*E的作用就是对A进行相应的列运算。
定理:若E为一初等矩阵,则E是非奇异的,且E的逆与它同类型的初等矩阵。
定义:若存在一个有限初等矩阵的序列使得B=E1E2...EkA,则称A与B是行等价的。
定理:非奇异矩阵的等价条件:若A是n阶方阵,则下列陈述是等价的
A是非奇异的
Ax=0仅有平凡解0
A与I行等价
若A是非奇异的,则有
∏i=1kEiA=I
在等式两边乘以A−1
∏i=1kEiI=A−1
这给出了计算A的逆的方式,即将A和I写为增广形式,并利用初等行去处将其中的A转换为I,则I将转换为A−1。即(A|I)的行最简形为(I|A−1)
因此也可以通过求逆计算线性方程组Ax=b的解,即x=A−1b
1.5.2 LU分解
对于方阵A上三角矩阵:当i>j时, aij=0
下三角矩阵:当i<j时, aij=0
三角形矩阵:上三角和下三角的统称
严格三角形:对角元素非零的三角形矩阵
对角形矩阵:当i≠j时, aij=0
定义:将矩阵A分解为一个单位下三角矩阵L和一个严格上三角矩阵U的乘积的过程,称为LU分解。LU分解只需要对A使用第三种行运算化简为严格上三角形,即可完成。LU分解在消元过程中十分有用。
LU=⎡⎣⎢11/2201−3001⎤⎦⎥⎡⎣⎢200430218⎤⎦⎥=⎡⎣⎢21445−1229⎤⎦⎥=A
1.5.3 使用scipy对矩阵LU分解
import scipy.linalg A = np.array([[1,2,3], [4,5,7], [7,8,9]]) l,u = scipy.linalg.lu(A,True) print l,u
1.6 备注
本文是Steven J. Leon的线性代数及其应用的第一章的学习笔记本文公式编写使用了MathJax语法 Latex公式支持
相关文章推荐
- 线性代数 矩阵乘法
- 线性代数复习--矩阵的逆-初等变换-阶梯形-标准形
- 线性代数:方程组的几何解释
- 线性代数:矩阵乘法和逆矩阵
- 线性代数导论27——复数矩阵和快速傅里叶变换
- 线性代数中向量、矩阵深度理解(PartI)
- MIT18.06线性代数课程笔记20:矩阵逆元计算、克里默法则 以及 行列式与volume、外积的关系
- 线性代数的本质--对线性空间、向量和矩阵的直觉描述
- 线性代数入门(2) - 矩阵,向量
- 线性代数——矩阵基本概念与随机矩阵 Stochastic Matrices
- 线性代数:第五章 相似矩阵及二次型(1)向量的内积 方阵的特征值与特征向量 相似矩阵
- 线性代数中矩阵相乘如何计算
- 线性代数复习--矩阵的秩
- 线性代数:矩阵的LU分解
- 线性代数--矩阵乘法--转置
- 线性代数之矩阵相乘
- MIT_线性代数笔记_02_矩阵消元
- 线性代数笔记-1-方程组的几何解释
- MIT18.06线性代数课程笔记4a:矩阵的LU分解
- 关于线性代数矩阵问题的一点理解