1.1 线性方程组
1.1.1 方程组定义
一个m个方程,n个未知数的方程组定义如下:
其中 aij 及 bi 均为实数,(1)称为m*n的线性方程组。若方程组有解,则称其为相容的(consistent),否则为不相容的。
1.1.2 等价方程组
定义:若两个含有相同变量的方程组具有相同的解集,则称它们是等价的。
有三种运算可以得到一个等价的方程组:
- 交换任意两个方程的顺序
- 任一方程两边同乘一个非零的实数
- 一方程的倍数加到另一个方程上
1.1.3 系数矩阵
把(1)式中的系数与一个m*n的阵列联系起来,称这个了阵列为方程组的系数矩阵(coefficient matrix),若m=n则称此矩阵为方阵。
如果在系数矩阵的右侧添加一列方程组的右端项,则得到新的矩阵:
称这个矩阵为方程组的增广矩阵(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 行最简形定义
若一个矩阵满足,矩阵是行阶梯形,且第一行的第一个非零元是其所在列的性非零元,则称矩阵为行简形。下面的矩阵是行最简形的
基于基本行运算将矩阵化为行最简形的过程称为Guass-Jordan消元法。
如果线性方程组的右端项全为零,则称其为齐次的。齐次方程组总是相容了,因为全零即为其一个解。
1.3 矩阵算术
1.3.1 矩阵记号
行向量:一个1*n的矩阵,如
[1234]
列向量:一个m*1的矩阵, 如
⎡⎣⎢123⎤⎦⎥
对一个m*n的矩阵A,A的行向量表示为
A的列向量表示为
矩阵A可以用其列向量或其行向量表示:
1.3.2 算术法则
标量乘法:若A为m*n的矩阵,且n为一标量,则二者乘积矩阵B为
矩阵加法:若A,B均为m*n的矩阵,其和矩阵C为
1.3.3 矩阵乘法与线性方程组
对于方程组(1),若令
并定义乘积Ax为
则线性方程组(1)等价于矩阵(2)。同样的将线性方程组表示为矩阵列向量和的形式:
矩阵乘法定义:若
A=(aij)
为一个m*n的矩阵,矩阵
B=(bij)
是一个n*r的矩阵,则乘积
AB=C(cij)
为一个m*r的矩阵,其元素定义为:
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。为完成检索,只需要计算
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
,其中
定义:矩阵的逆,若存在矩阵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为例。
交换两行
一行乘积
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是非奇异的,则有
在等式两边乘以 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分解在消元过程中十分有用。
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