您的位置:首页 > 其它

线性代数之一:方程组与矩阵

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公式支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: