5.1 矩阵
- MATLAB 即Matrix Laboratory(矩阵实验室)的缩写,可见该软件在处理矩阵问题上的优势。本节主要介绍如何用MATLAB来进行”矩阵实验”,即如何生成矩阵,如何对已知矩阵进行各种变换等。
5.1.1 矩阵定义
- MATLAB 以矩阵作为数据操作的基本单位,这使得矩阵运算变得非常简捷、方便、高效。
- 矩阵是由m×n个数aij (i= 1,2,…,,; j= 1,2,…, n)排成的m行n列数表,记成
- 称为m×n矩阵,也可以记成aij 或 Am×n 。其中,i表示行数,j表示列数。若m=n,则该矩阵为n阶矩阵(n阶方阵)。
- 注意:
- 由有限个向量所组成的向量组可以构成矩阵,如果A = (aij) 是m×n 矩阵,那么A 有m个n维行向量;有n个m维列向量。矩阵的生成主要有直接输入法、M文件生成法和文本文件生成法等。
- 在键盘上直接按行方式输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点。
- 输入矩阵时要以”[ ]”为其标识符号,矩阵的所有元素必须都在括号内。
- 矩阵同行元素之间由空格(个数不限)或逗号分隔,行与行之间用分号或回车键分隔
- 矩阵大小不需要预先定义
- 矩阵元素可以是运算表达式
- 若”[ ]”中无元素,表示空矩阵
- 如果不想显示中间结果,可以用 “ ; “结束。
- 实例 ————— 创建矩阵
>>a = [15 15 15; 15 15 15; 15 15 15]
a =
15 15 15
15 15 15
15 15 15
- 注意:
- 在输入矩阵时,MATLAB允许方括号里还有方括号,例如下面的语句是合法的:
>>[[1 2 3];[2 4 6];7 8 9]
ans =
1 2 3
2 4 6
7 8 9
- 在输入矩阵时,MATLAB允许方括号里还有方括号,例如下面的语句是合法的:
- 实例 ————— 创建复数矩阵
>> A = [[1,1+i,2];[2,3+2i,1]]
A =
1.0000 + 0.0000i 1.0000 + 1.0000i 2.0000 + 0.0000i
2.0000 + 0.0000i 3.0000 + 2.0000i 1.0000 + 0.0000i
5.1.2 矩阵的生成
- 矩阵的生成除了直接输入法,还可以利用M文件生成法和文本文件生成法等。
- 利用M文件创建
- 当矩阵的规模比较大时,直接输入法就显得笨拙,出差错也不易修改。为了解决这些问题,可以将所要输入的矩阵按格式先写入一文本文件中,并将此文件以m为其扩展名,即M文件
- M文件是一种可以在MATLAB 环境下运行的文本文件,它可以分为命令式文件和函数式文件两种。在此处主要用到的是命令式M文件,用它的简单形式来创建大型矩阵。在MATLAB命令行窗口中输入M文件名,所要输入的大型矩阵即可被输入到内存中。
- 实例 ————— M文件矩阵
% sample.m
% 创建一个M文件,用以输入大规模矩阵
gmatrix = [378 89 90 83 382 92 29;
3829 32 9283 2938 378 839 29;
388 389 200 923 920 92 7478;
3829 892 66 89 90 56 8980;
7827 67 890 6557 45 123 35]
- 利用M文件创建
- 在通常的使用中,上例中的矩阵还不算”大型”矩阵,此处只是借例说明。
- 注意:
- M文件中的变量名与文件名不能相同,否则会造成变量名和函数名的混乱。运行M文件时,需要先将M文件,在命令行窗口中直接调用此文件名即可。
实例 ————— 创建生活用品矩阵
事先在记事本中建立文件
3.5 4 5
10 15 20
load goods.txt
由此创建商品矩阵x。
- 注意:
- 运行M文件时,需要先将记事本goods.txt 复制到当前目录文件夹下,否则运行时无法调用
- 思路点拨:
- 创建成绩单(导入的数据不包含中文,显示为NaN)
5.1.3 创建特殊矩阵
- 用户可以直接用函数来生成某些特定的矩阵,常用的函数如下
eye(n) :创建n×n单位矩阵
eye(m,n) :创建m×n的单位矩阵
eye(size(A)) :创建与A维数相同的单位阵
ones(n) :创建n×n全1矩阵
ones(m,n) :创建m×n全1矩阵
ones(size(A)) :创建与A维数相同的全1阵
zeros(m,n) :创建m×n全0矩阵
rand(n) :创建与A维数相同的全0阵
rand(m,n) :在[0,1]区间内创建一个n×n均匀分布的随机矩阵
rand(size(A)) :在[0,1]区间内创建一个m×n均匀分布的随机矩阵
compan(P) :创建系数向量是P的多项式的伴随矩阵
diag(v) :创建一向量v中的元素为对角的对角阵
hilb(n) :创建n×n的Hilbert矩阵
invhild(3) :
magic(n) :生成n阶魔方矩阵(幻方矩阵)
sparse(A) :将矩阵A转化为稀疏矩阵形式,即由A的非零元素和下标构成稀疏矩阵S。若A本身为稀疏矩阵,则返回A本身
- 拓展知识:
- Hilbert 矩阵是一种数学变换矩阵,正定,且高度病态(即,任何一个元素发生一点变动,整个矩阵的行列式的值和逆矩阵都会发生巨大变化),病态程度和阶数相关。
- 魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。你能构造任何大小(除了2x2)的魔方矩阵。
- 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。
- 在线性代数中,一个方形矩阵的伴随矩阵是一个类似于逆矩阵的概念。如果二维矩阵可逆,那么它的逆矩阵和它的伴随矩阵之间只差一个系数,对多维矩阵也存在这个规律。然而,伴随矩阵对不可逆的矩阵也有定义,并且不需要用到除法 。
- 实例 ————— 生成特殊矩阵
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
>> zeros(3,2)
ans =
0 0
0 0
0 0
>> ones(3,2)
ans =
1 1
1 1
1 1
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
>> rand(3)
ans =
0.6787 0.3922 0.7060
0.7577 0.6555 0.0318
0.7431 0.1712 0.2769
>> rand(3,2)
ans =
0.0462 0.6948
0.0971 0.3171
0.8235 0.9502
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
>> hilb(3)
ans =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
>> invhilb(3)
ans =
9 -36 30
-36 192 -180
30 -180 180
5.1.4 矩阵元素的运算
- 矩阵中的元素与向量中的元素一样,可以进行抽取引用、编辑修改等操作
矩阵元素的修改
矩阵建立起来之后,还需要对其元素进行修改。下表列出了常用的矩阵元素修改命令。
| 命令名 | 说明 | | —- | —- | | D=[A;B C] | A为原矩阵,B、C中包含要扩充的元素,D为扩充后的矩阵 | | A(m,:)=[] | 删除A的第m行 | | A(:,n)=[] | 删除A的第n列 | | A(m,n)=a;A(m,:)=[a b..];A(:,n)=[a b …] | 对A的第m行第n列的元素赋值;对A的第m行赋值;对A的第n列赋值 |实例 ————— 新矩阵的生成
A=[1 2 3; 4 5 6]
B=eye(2);
C=zeros(2,1);
D=[A;B c]
- 矩阵的变维
- 矩阵的变维可以用符号”:”法和reshape函数法。reshape函数的调用形式如下。
- reshape(X,m,n): 将已知矩阵变维成m行n列的矩阵
- 实例 ————— 矩阵维度修改
>> A=1:12;
>> B=reshape(A,2,6)
B =
1 3 5 7 9 11
2 4 6 8 10 12
%用":"法必须先设定修改后矩阵的形状
>> C=zeros(3,4);
>> C(:)=A(:)
C =
1 4 7 10
2 5 8 11
3 6 9 12
矩阵的变向
| 命令名 | 说明 | | —- | —- | | rot(90) | 将A逆时针方向旋转90° | | rot(90,k) | 将A逆时针方向旋转90° * k,k可为正整数或负整数 | | fliplr(X) | 将X左右翻转 | | flipud(X) | 将X上下翻转 | | flipdim(X,dim) | dim=1时对行翻转,dim=2时对列翻转 |- 实例 ————— 矩阵的变向
>> A=1:12
A =
1 2 3 4 5 6 7 8 9 10 11 12
>> C=zeros(3,4)
C =
0 0 0 0
0 0 0 0
0 0 0 0
>> C(:)=A(:)
C =
1 4 7 10
2 5 8 11
3 6 9 12
>> flipdim(C,1)
ans =
3 6 9 12
2 5 8 11
1 4 7 10
>> flipdim(C,2)
ans =
10 7 4 1
11 8 5 2
12 9 6 3
- 实例 ————— 矩阵的变向
- 矩阵的抽取
- 对矩阵元素的抽取主要是指对角元素和上(下)三角阵的抽取。对角矩阵和三角矩阵的抽取命令见下表
命令名 | 说明 |
---|---|
diag(X,k) | 抽取矩阵X的第k条对角线上的元素向量。k为0时抽取主对角线,k为正整数时抽取上方第k条对角线上的元素,k为负整数时抽取下方第k条对角线上的元素 |
diag(X) | 抽取主对角线 |
diag(v,k) | 使得v为所得矩阵第k条对角线上的元素向量 |
diag(v) | 使得v为所得矩阵主对角线上的元素向量 |
tril(X) | 提取矩阵X的主下三角部分 |
tril(X,k) | 提取矩阵X的第k条对角线下面的部分(包括第k条对角线) |
triu(X) | 提取矩阵X的主上三角部分 |
triu(X,k) | 提取矩阵X的第k条对角线上面的部分(包括第k条对角线) |
- 实例 ————— 矩阵抽取
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> v=diag(A,2)
v =
3
8
>> tril(A,-1)
ans =
0 0 0 0
5 0 0 0
9 7 0 0
4 14 15 0
>> triu(A)
ans =
16 2 3 13
0 11 10 8
0 0 6 12
0 0 0 1
- 动手练一练 ————— 创建新矩阵
- 通过修改矩阵元素,将一个旧矩阵
- 思路点拨:
- 创建旧矩阵D。
- 删除矩阵多余的列元素
- 对矩阵元素进行重新赋值
思路:将A矩阵中的第一列删除。余下
1 1 9
3 8 1
1 3 1
1 1 3
在对个别元素重新赋值即可
CODE:
>> A=[5 1 1 9; 1 3 8 1; 1 1 3 1; 1 1 1 3]
A =
5 1 1 9
1 3 8 1
1 1 3 1
1 1 1 3
>> D=A
D =
5 1 1 9
1 3 8 1
1 1 3 1
1 1 1 3
>> D(:,1)=[]
D =
1 1 9
3 8 1
1 3 1
1 1 3
>> D(2,2)=1
D =
1 1 9
3 1 1
1 3 1
1 1 3
>> D(4,3)=-1
D =
1 1 9
3 1 1
1 3 1
1 1 -1
5.2 矩阵数学运算
- 本小节主要介绍矩阵的一些基本运算,如矩阵的四则运算、空矩阵,下面将分别介绍这些运算。
- 矩阵的基本运算包括加、减、乘、数乘、点乘、乘方、左除、右除、求逆等。其中加、减、乘与大家所学的线性代数中的定义是一样的,相应的运算符为”+”、”-“、”*”。
- 矩阵的除法运算是MATLAB所特有的,分为左除和右除,相应的运算符为”\”和”/“。一般情况下,方程AX=B的解是X=A\B,而方程XA=B的解是X=A/B。
- 对于上述的四则运算,需要注意的是:矩阵的加、减、乘运算的维数要求与线性代数中的要求一致。
5.2.1 矩阵的加法运算
- 设A=(aij),B=(bij)都是m×n矩阵,矩阵A与B的和记成A + B,规定为
(1)交换律 A+B = B+A
(2)结合律( A + B )+C = A+( B + C )
- 实例 ————— 验证加法法则
>> A=[5 6 9 8 ;5 3 6 7]
A =
5 6 9 8
5 3 6 7
>> B=[3 6 7 9;5 8 9 6]
B =
3 6 7 9
5 8 9 6
>> C=[9 3 5 6; 8 5 2 1]
C =
9 3 5 6
8 5 2 1
>> A+B
ans =
8 12 16 17
10 11 15 13
>> B+A
ans =
8 12 16 17
10 11 15 13
>> (A+B)+C
ans =
17 15 21 23
18 16 17 14
>> A+(B+C)
ans =
17 15 21 23
18 16 17 14
>> D=[1 5 6; 2 5 6]
D =
1 5 6
2 5 6
>> A+D
矩阵维度必须一致。 %只有相同维度的矩形才能进行计算
- 实例 ————— 矩阵求和
- 本实例求解矩阵之和
>> [1 2 3;-1 5 6] + [0 1 -3;2 1 -1]
ans =
1 3 0
1 6 5
- 实例 ————— 矩阵求差
- 本实例求解矩阵的减法运算
>> A=[5 6 9 8;5 3 6 7]
A =
5 6 9 8
5 3 6 7
>> B =[3 6 7 9; 5 8 9 6]
B =
3 6 7 9
5 8 9 6
>> -B
ans =
-3 -6 -7 -9
-5 -8 -9 -6
>> A-B
ans =
2 0 2 -1
0 -5 -3 1
- 本实例求解矩阵的减法运算
5.2.2 矩阵的乘法运算
- 数乘运算
- 数λ与矩阵A=(aii)m×n 的乘积记成λA或Aλ,规定为
- 同时,矩阵还满足下面的规律:
%3D(%CE%BB%CE%BC)A%0A(%CE%BB%2B%CE%BC)A%3D%CE%BBA%2B%CE%BCA%0A%CE%BB(A%2BB)%3D%CE%BBA%2B%CE%BBB%0A#card=math&code=%CE%BB%28%CE%BCA%29%3D%28%CE%BB%CE%BC%29A%0A%28%CE%BB%2B%CE%BC%29A%3D%CE%BBA%2B%CE%BCA%0A%CE%BB%28A%2BB%29%3D%CE%BBA%2B%CE%BBB%0A&id=SvYJM)
- 其中λ,μ为数,A,B为矩阵。
>> A=[1 2 3 ; 0 3 3; 7 9 5]
A =
1 2 3
0 3 3
7 9 5
>> A*5
ans =
5 10 15
0 15 15
35 45 25
- 乘运算
- 若3个矩阵有相乘关系,设A=(aij)是一个m×s的矩阵,B=(bij) 是一个s×n矩阵,规定A与B的积为一个m×n矩阵C=(cij),
- 即C=A*B,需要满足以下3种条件。
- 矩阵A的列数与矩阵B的行数相同;
- 矩阵C的行数等于矩阵A的行数,矩阵C的列数等于矩阵B的列数;
- 矩阵C的第m行n列元素值等于矩阵A的m行元素与矩阵B的n列元素对应值积的和。
>> A=[1 2 3; 0 3 3; 7 9 5]
A =
1 2 3
0 3 3
7 9 5
>> B=[8 3 9 ; 2 8 1; 3 9 1]
B =
8 3 9
2 8 1
3 9 1
>> A*B
ans =
21 46 14
15 51 6
89 138 77
- 注意:
- AB≠BA,即矩阵的乘法不满足交换律。
- 若矩阵A、B满足AB=0,未必有A=0或B=0的结论。
- 点乘运算
- 点乘运算指将两矩阵中相同位置的元素进行相乘运算,将积保存在原位置组成新矩阵。
>>A.*B
ans =
8 6 27
0 24 3
21 81 5
- 点乘运算指将两矩阵中相同位置的元素进行相乘运算,将积保存在原位置组成新矩阵。
- 实例 ————— 矩阵乘法运算
>> A=[0 0 ;1 1]
A =
0 0
1 1
>> B=[1 0 ; 2 0]
B =
1 0
2 0
>> 6*A-5*B
ans =
-5 0
-4 6
>> A*B-A
ans =
0 0
2 -1
>> B*A-A
ans =
0 0
-1 -1
>> A.*B-A
ans =
0 0
1 -1
>> A*B./A-A
ans =
NaN NaN
2 -1
5.2.3 矩阵的除法运算
- 计算左除A\B时,A的行数要与B的行数一致,计算右除A/B时,A的列数要与B的列数一致。
- 左除运算
- 由于矩阵的特殊性,AB通常不等于BA,除法也一样。因此除法要区分左右。
- 线性方程组D*X=B,如果D非奇异,即它的逆矩阵inv(D)存在,则其解用MATLAB表示为
- 符号”\”称为左除,即分母放在左边。
- 左除的条件:B的行数等于D的阶数(D的行数和列数相同,简称阶数)
>> A.\B
ans =
8.0000 1.5000 3.0000
Inf 2.6667 0.3333
0.4286 1.0000 0.2000
- 实例 ————— 验证矩阵的除法
- 计算除法结果与除数的乘积与被除数是否相同
A=[1 2 3; 5 8 6]
A =
1 2 3
5 8 6
B=[8 6 9;4 3 7]
B =
8 6 9
4 3 7
C=A./B
C =
0.1250 0.3333 0.3333
1.2500 2.6667 0.8571
D=B.*C
D =
1 2 3
5 8 6
- 计算除法结果与除数的乘积与被除数是否相同
- 右除运算
- 若方程组表示为X*D1=B1,D1非奇异,即它的逆阵inv(D1)存在,则其解为
%3DB1%2FD1%0A#card=math&code=X%3DB1%2Ainv%28D1%29%3DB1%2FD1%0A&id=fu4nT)
- 符号”/“称为右除
- 右除的条件:B1的列数等于D1的阶数(D1的行数和列数相同,简称阶数)。
>> A./B
ans =
0.1250 0.6667 0.3333
0 0.3750 3.0000
2.3333 1.0000 5.0000
实例 ————— 矩阵的除法
求解矩阵左除与右除
>> A=[1 2 3;5 8 6]
A =
1 2 3
5 8 6
>> B=[8 6 9;4 3 7]
B =
8 6 9
4 3 7
>> A.\B
ans =
8.0000 3.0000 3.0000
0.8000 0.3750 1.1667
>> A./B
ans =
0.1250 0.3333 0.3333
1.2500 2.6667 0.8571
- 动手练一练 ——- 矩阵四则运算
- 思路点拨:
- 输入矩阵
- 使用算术符号计算矩阵
>> A=[6 3; 8 2;-1 8]
A =
6 3
8 2
-1 8
>> B=[0 1; 3 9; 0 -1]
B =
0 1
3 9
0 -1
>> -B
ans =
0 -1
-3 -9
0 1
>> A-B
ans =
6 2
5 -7
-1 9
>> 5*A
ans =
30 15
40 10
-5 40
>> A*6
ans =
36 18
48 12
-6 48
5.3 矩阵运算
- 本小节主要介绍矩阵的一些基本运算,如矩阵的逆以及求矩阵的条件数与范数等。下面将分别介绍这些运算。
- 常用的矩阵函数见下表 | 函数名 | 说明 | 函数名 | 说明 | | —- | —- | —- | —- | | cond | 矩阵的条件数值 | diag | 对角变换 | | condest | 1-范数矩阵条件数值 | expm | 矩阵的指数运算 | | det | 矩阵的行列式值 | logm | 矩阵的对数运算 | | eig | 矩阵的特征值 | sqrtm | 矩阵的开方运算 | | inv | 矩阵的逆 | cdf2rdf | 复数对角矩阵转换成实数块对角矩阵 | | norm | 矩阵的范数值 | rref | 转换成逐行递减的阶梯矩阵 | | normest | 矩阵的2-范数值 | rsf2csf | 实数块对角矩阵转换成复数对角矩阵 | | rank | 矩阵的秩 | rot90 | 矩阵逆时针方向旋转90° | | orth | 矩阵的正交化运算 | fliplr | 左、右翻转矩阵 | | rcond | 矩阵的逆条件数值 | flipud | 上、下翻转矩阵 | | trace | 矩阵的迹 | reshape | 改变矩阵的维数 | | triu | 上三角变换 | funm | 一般的矩阵函数 | | tril | 下三角变换 | | |
5.3.1 幂函数
- A是一个n阶矩阵,k是一个正整数,规定
- 称为矩阵的幂。其中k,l 是正整数。
- 矩阵的幂运算是将矩阵中的每个元素进行乘方运算,即
- 在MATLAB中,幂运算就是在乘方符号”.^”后面输入幂的次数。
- 对于单个n阶矩阵A
%5El%20%3D%20A%5E%7Bkl%7D.%0A#card=math&code=A%5EkA%5El%20%3D%20A%5E%7Bk%2B1%7D%2C%20%28A%5Ek%29%5El%20%3D%20A%5E%7Bkl%7D.%0A&id=ZiHxQ)
>> A=[1 2 3;0 3 3;7 9 5]
A =
1 2 3
0 3 3
7 9 5
>> A.^2
ans =
1 4 9
0 9 9
49 81 25
- 对于两个n阶矩阵A与B
%5Ek%20%E2%89%A0%20A%5EkB%5Ek%0A#card=math&code=%28AB%29%5Ek%20%E2%89%A0%20A%5EkB%5Ek%0A&id=vIWEk)
- 实例 ——- 矩阵的幂运算
- 本实例演示矩阵的幂运算
>> A=[1 2 3;0 3 3; 7 9 5]
A =
1 2 3
0 3 3
7 9 5
>> B=[5 6 8;6 0 5;4 5 6]
B =
5 6 8
6 0 5
4 5 6
>> (A*B)^5
ans =
1.0e+11 *
0.3047 0.1891 0.3649
0.2785 0.1728 0.3335
1.0999 0.6825 1.3173
>> A^5*B^5
ans =
1.0e+10 *
2.5561 2.1096 3.3613
2.5561 2.1095 3.3613
6.8284 5.6354 8.9793
- 本实例演示矩阵的幂运算
- 另外,常用的运算还有指数函数、对数函数、平方根函数等。用户可查看相应的帮助获得使用方法和相关信息。
5.3.2 矩阵的逆
- 对于n阶方阵A,如果有n阶方阵B满足AB=BA=I,则称矩阵A为可逆的,称方阵B为A的逆矩阵,记为A-1 。
- 逆矩阵的性质:
- 若A可逆,则A-1是唯一的。
- 若A可逆,则A-1也可逆,并且(A-1)-1 = A。
- 若n阶方阵A与B都可逆,则AB也可逆,且(AB)-1 = B-1A-1。
- 若A可逆,则|A-1| = |A|-1 。
- 我们把满足|A|≠0的方阵A称为非奇异的,否则就称为奇异的。
- 求解矩阵的逆使用函数inv,调用格式如下。
%0A#card=math&code=Y%3Dinv%28X%29%0A&id=Oyt46)
实例 ——- 随机矩阵求逆
本实例求解随机矩阵的逆矩阵
>> A=rand(3)
A =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
>> B=inv(A)
B =
-1.9958 3.0630 -1.1690
2.8839 -2.6919 0.6987
-0.0291 -0.1320 1.1282
- 提示:
逆矩阵必须使用方阵,即2×2、3×3,即n×n格式的矩阵,否则弹出警告信息。
>> A=[1 -1; 0 1; 2 3]
A =
1 -1
0 1
2 3
>> B=inv(A)
错误使用 inv
矩阵必须为方阵。
- 求解矩阵的逆条件数值使用函数rcond,调用格式如下。
>> A=rand(3)
A =
0.9649 0.9572 0.1419
0.1576 0.4854 0.4218
0.9706 0.8003 0.9157
>> C=rcond(A)
C =
0.0824
- 实例 ——- 矩阵更新
- 在编写算法或处理工程、优化等问题时,经常会碰到一些矩阵更新的情况,这时读者必须弄清楚矩阵的更新步骤,这样采用编写出相应的更新算法。下面来看一个关于矩阵逆的更新问题:对于一个非奇异矩阵A,如果用某一列向量b替换其第p列,那么如何在A-1的基础上更新出新矩阵的逆呢?
- 操作步骤:
- 解:首先来分析一下上述问题:设A=[a1 a2 … ap … an],设其逆为A-1,则有A-1A=[A-1a1 A-1a2 … A-1ap … A-1an] = 。设A的第p列ap被列向量b替换后的矩阵为,即 。令,则有:
Logs:用语雀已修复 (PS:不知道为啥这里公式不支持Markdown的格式,所以用截图了,然后下面那个图可以….)
源代码(复制到typora打开,选项中记得勾选支持markdown格式)
- 如果 ≠ 0,则我们可以通过初等行变换将上式的右端化为单位矩阵,然后将相应的变换作用到,那么得到的矩阵即为的更新。事实上行变换矩阵即为
- 该问题具体的矩阵更新函数updateinv.m如下。
function invA=updateinv(invA,p,b)
%此函数用来计算A中的第p列被另一列b代替后,其逆的更新
[n,n] = size(invA);
d=invA*b;
if abs(d(p))<eps %若d(p) = 0则说明替换后的矩阵是奇异的
warning('替换后的矩阵是奇异的!');
newinvA=[];
return;
else
%对A的逆作相应的行变换
invA(p,:)=invA(p,:)/d(p);
if p>1
for i=1:p-1
invA(i,:)=invA(i,:)-d(i)*invA(p,:);
end
end
if p<n
for i=p+1:n
invA(i,:)=invA(i,:)-d(i)*invA(p,:);
end
end
end
- 已知矩阵,求A-1,并在A-1的基础上求矩阵A的第2列被b替换后的逆矩阵。验证上面所编函数的正确性。
- 解:MATLAB程序如下。
>> A=[1 2 3 4;5 6 1 0;0 1 1 0;1 1 2 3];
>> b=[1 0 1 0]';
>> invA=inv(A)
invA =
-1.5000 0.1000 0.4000 2.0000
1.5000 0.1000 -0.6000 -2.0000
-1.5000 -0.1000 1.6000 2.0000
1.0000 0 -1.0000 -1.0000
>> newinvA=updateinv(invA,2,b)
newinvA =
0.3333 0.2222 -0.3333 -0.4444
1.6667 0.1111 -0.6667 -2.2222
-1.6667 -0.1111 1.6667 2.2222
1.0000 0 -1.0000 -1.0000
>> A(:,2)=b %显示A的第2列被b替换后的矩阵
A =
1 1 3 4
5 0 1 0
0 1 1 0
1 0 2 3
>> inv(A) %求新矩阵的逆,与newinvA比较(结果是一样的)
ans =
0.3333 0.2222 -0.3333 -0.4444
1.6667 0.1111 -0.6667 -2.2222
-1.6667 -0.1111 1.6667 2.2222
1.0000 -0.0000 -1.0000 -1.0000
5.3.3 矩阵的条件数
- 矩阵的条件数在数值分析中是一个重要的概念,在工程计算中也是必不可少的,它用于刻画一个矩阵的”病态”程度。
- 对于非奇异矩阵A,其条件数的定义为
_v%20%3D%20%7C%7CA%5E%7B-1%7D%7C%7C_v%7C%7CA%7C%7C_v%2C%E5%85%B6%E4%B8%AD%2Cv%20%3D%201%2C2%2C%5Cdots%2CF%E3%80%82%0A#card=math&code=cond%28A%29_v%20%3D%20%7C%7CA%5E%7B-1%7D%7C%7C_v%7C%7CA%7C%7C_v%2C%E5%85%B6%E4%B8%AD%2Cv%20%3D%201%2C2%2C%5Cdots%2CF%E3%80%82%0A&id=sQOfc)
- 它是一个大于或等于1的实数,当A的条件数相对较大,即_v#card=math&code=cond%28A%29_v&id=CEWz5)>>1时,矩阵A是”病态”的,反之是”良态”的。
5.3.4 矩阵的范数
- 范数是数值分析中的一个概念,它是向量或矩阵大小的一种度量,在工程计算中有者重要的作用。对于向量,常用的向量范数有以下几种。
- x的-范数:
- x的1-范数:
- x的2-范数(欧氏范数):%5E%7B%5Cfrac%7B1%7D%7B2%7D%7D%20%3D%20(%5Csum%5Climits%7Bi%3D1%7D%5Enx_i%5E2)%5E%7B%5Cfrac%7B1%7D%7B2%7D%7D#card=math&code=%7C%7Cx%7C%7C_2%20%3D%20%28x%5ETx%29%5E%7B%5Cfrac%7B1%7D%7B2%7D%7D%20%3D%20%28%5Csum%5Climits%7Bi%3D1%7D%5Enx_i%5E2%29%5E%7B%5Cfrac%7B1%7D%7B2%7D%7D&id=HChvn)
- x的-范数:%5E%7B%5Cfrac%7B1%7D%7Bp%7D%7D#card=math&code=%7C%7Cx%7C%7Cp%20%3D%20%28%5Csum%5Climits%7Bi%3D1%7D%5En%7Cx_i%7C%5Ep%29%5E%7B%5Cfrac%7B1%7D%7Bp%7D%7D&id=pvYoU)
- 对于矩阵A=