5.1 矩阵

  • MATLAB 即Matrix Laboratory(矩阵实验室)的缩写,可见该软件在处理矩阵问题上的优势。本节主要介绍如何用MATLAB来进行”矩阵实验”,即如何生成矩阵,如何对已知矩阵进行各种变换等。

5.1.1 矩阵定义

  • MATLAB 以矩阵作为数据操作的基本单位,这使得矩阵运算变得非常简捷、方便、高效。
  • 矩阵是由m×n个数aij (i= 1,2,…,,; j= 1,2,…, n)排成的m行n列数表,记成

第5章 矩阵运算 - 图1

  • 称为m×n矩阵,也可以记成aij 或 Am×n 。其中,i表示行数,j表示列数。若m=n,则该矩阵为n阶矩阵(n阶方阵)。
  • 第5章 矩阵运算 - 图2注意:
    • 由有限个向量所组成的向量组可以构成矩阵,如果A = (aij) 是m×n 矩阵,那么A 有m个n维行向量;有n个m维列向量。矩阵的生成主要有直接输入法、M文件生成法和文本文件生成法等。
  • 在键盘上直接按行方式输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点。
    • 输入矩阵时要以”[ ]”为其标识符号,矩阵的所有元素必须都在括号内。
    • 矩阵同行元素之间由空格(个数不限)或逗号分隔,行与行之间用分号或回车键分隔
    • 矩阵大小不需要预先定义
    • 矩阵元素可以是运算表达式
    • 若”[ ]”中无元素,表示空矩阵
    • 如果不想显示中间结果,可以用 “ ; “结束。
  • 实例 ————— 创建矩阵
    1. >>a = [15 15 15; 15 15 15; 15 15 15]
    2. a =
    3. 15 15 15
    4. 15 15 15
    5. 15 15 15
  • 第5章 矩阵运算 - 图3注意:
    • 在输入矩阵时,MATLAB允许方括号里还有方括号,例如下面的语句是合法的:
      1. >>[[1 2 3];[2 4 6];7 8 9]
      2. ans =
      3. 1 2 3
      4. 2 4 6
      5. 7 8 9
  • 实例 ————— 创建复数矩阵
    1. >> A = [[1,1+i,2];[2,3+2i,1]]
    2. A =
    3. 1.0000 + 0.0000i 1.0000 + 1.0000i 2.0000 + 0.0000i
    4. 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文件矩阵
      1. % sample.m
      2. % 创建一个M文件,用以输入大规模矩阵
      3. gmatrix = [378 89 90 83 382 92 29;
      4. 3829 32 9283 2938 378 839 29;
      5. 388 389 200 923 920 92 7478;
      6. 3829 892 66 89 90 56 8980;
      7. 7827 67 890 6557 45 123 35]
  • 在通常的使用中,上例中的矩阵还不算”大型”矩阵,此处只是借例说明。
  • 第5章 矩阵运算 - 图4注意:
    • M文件中的变量名与文件名不能相同,否则会造成变量名和函数名的混乱。运行M文件时,需要先将M文件,在命令行窗口中直接调用此文件名即可。
  • 实例 ————— 创建生活用品矩阵

    • 事先在记事本中建立文件

      1. 3.5 4 5
      2. 10 15 20
      3. load goods.txt
    • 由此创建商品矩阵x。

  • 第5章 矩阵运算 - 图5注意:
    • 运行M文件时,需要先将记事本goods.txt 复制到当前目录文件夹下,否则运行时无法调用
  • 第5章 矩阵运算 - 图6思路点拨:
    • 创建成绩单(导入的数据不包含中文,显示为NaN)

5.1.3 创建特殊矩阵

  • 用户可以直接用函数来生成某些特定的矩阵,常用的函数如下
    1. eye(n) :创建n×n单位矩阵
    2. eye(m,n) :创建m×n的单位矩阵
    3. eye(size(A)) :创建与A维数相同的单位阵
    4. ones(n) :创建n×n1矩阵
    5. ones(m,n) :创建m×n1矩阵
    6. ones(size(A)) :创建与A维数相同的全1
    7. zeros(m,n) :创建m×n0矩阵
    8. rand(n) :创建与A维数相同的全0
    9. rand(m,n) :在[0,1]区间内创建一个n×n均匀分布的随机矩阵
    10. rand(size(A)) :在[0,1]区间内创建一个m×n均匀分布的随机矩阵
    11. compan(P) :创建系数向量是P的多项式的伴随矩阵
    12. diag(v) :创建一向量v中的元素为对角的对角阵
    13. hilb(n) :创建n×nHilbert矩阵
    14. invhild(3) :
    15. magic(n) :生成n阶魔方矩阵(幻方矩阵)
    16. sparse(A) :将矩阵A转化为稀疏矩阵形式,即由A的非零元素和下标构成稀疏矩阵S。若A本身为稀疏矩阵,则返回A本身
  • 第5章 矩阵运算 - 图7拓展知识:
    • Hilbert 矩阵是一种数学变换矩阵,正定,且高度病态(即,任何一个元素发生一点变动,整个矩阵的行列式的值和逆矩阵都会发生巨大变化),病态程度和阶数相关。
    • 魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。你能构造任何大小(除了2x2)的魔方矩阵。
    • 矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。
    • 线性代数中,一个方形矩阵的伴随矩阵是一个类似于逆矩阵的概念。如果二维矩阵可逆,那么它的逆矩阵和它的伴随矩阵之间只差一个系数,对多维矩阵也存在这个规律。然而,伴随矩阵对不可逆的矩阵也有定义,并且不需要用到除法
  • 实例 ————— 生成特殊矩阵
    1. >> zeros(3)
    2. ans =
    3. 0 0 0
    4. 0 0 0
    5. 0 0 0
    6. >> zeros(3,2)
    7. ans =
    8. 0 0
    9. 0 0
    10. 0 0
    11. >> ones(3,2)
    12. ans =
    13. 1 1
    14. 1 1
    15. 1 1
    16. >> ones(3)
    17. ans =
    18. 1 1 1
    19. 1 1 1
    20. 1 1 1
    21. >> rand(3)
    22. ans =
    23. 0.6787 0.3922 0.7060
    24. 0.7577 0.6555 0.0318
    25. 0.7431 0.1712 0.2769
    26. >> rand(3,2)
    27. ans =
    28. 0.0462 0.6948
    29. 0.0971 0.3171
    30. 0.8235 0.9502
    31. >> magic(3)
    32. ans =
    33. 8 1 6
    34. 3 5 7
    35. 4 9 2
    36. >> hilb(3)
    37. ans =
    38. 1.0000 0.5000 0.3333
    39. 0.5000 0.3333 0.2500
    40. 0.3333 0.2500 0.2000
    41. >> invhilb(3)
    42. ans =
    43. 9 -36 30
    44. -36 192 -180
    45. 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列赋值 |

    • 实例 ————— 新矩阵的生成

      1. A=[1 2 3; 4 5 6]
      2. B=eye(2);
      3. C=zeros(2,1);
      4. D=[A;B c]
  • 矩阵的变维
    • 矩阵的变维可以用符号”:”法和reshape函数法。reshape函数的调用形式如下。
    • reshape(X,m,n): 将已知矩阵变维成m行n列的矩阵
    • 实例 ————— 矩阵维度修改
      1. >> A=1:12;
      2. >> B=reshape(A,2,6)
      3. B =
      4. 1 3 5 7 9 11
      5. 2 4 6 8 10 12
      6. %用":"法必须先设定修改后矩阵的形状
      7. >> C=zeros(3,4);
      8. >> C(:)=A(:)
      9. C =
      10. 1 4 7 10
      11. 2 5 8 11
      12. 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时对列翻转 |

    • 实例 ————— 矩阵的变向
      1. >> A=1:12
      2. A =
      3. 1 2 3 4 5 6 7 8 9 10 11 12
      4. >> C=zeros(3,4)
      5. C =
      6. 0 0 0 0
      7. 0 0 0 0
      8. 0 0 0 0
      9. >> C(:)=A(:)
      10. C =
      11. 1 4 7 10
      12. 2 5 8 11
      13. 3 6 9 12
      14. >> flipdim(C,1)
      15. ans =
      16. 3 6 9 12
      17. 2 5 8 11
      18. 1 4 7 10
      19. >> flipdim(C,2)
      20. ans =
      21. 10 7 4 1
      22. 11 8 5 2
      23. 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条对角线)
  • 实例 ————— 矩阵抽取
    1. >> A=magic(4)
    2. A =
    3. 16 2 3 13
    4. 5 11 10 8
    5. 9 7 6 12
    6. 4 14 15 1
    7. >> v=diag(A,2)
    8. v =
    9. 3
    10. 8
    11. >> tril(A,-1)
    12. ans =
    13. 0 0 0 0
    14. 5 0 0 0
    15. 9 7 0 0
    16. 4 14 15 0
    17. >> triu(A)
    18. ans =
    19. 16 2 3 13
    20. 0 11 10 8
    21. 0 0 6 12
    22. 0 0 0 1
  • 动手练一练 ————— 创建新矩阵
    • 通过修改矩阵元素,将一个旧矩阵

第5章 矩阵运算 - 图8

  • 第5章 矩阵运算 - 图9思路点拨:
    • 创建旧矩阵D。
    • 删除矩阵多余的列元素
    • 对矩阵元素进行重新赋值
      1. 思路:将A矩阵中的第一列删除。余下
      2. 1 1 9
      3. 3 8 1
      4. 1 3 1
      5. 1 1 3
      6. 在对个别元素重新赋值即可
      7. CODE:
      8. >> A=[5 1 1 9; 1 3 8 1; 1 1 3 1; 1 1 1 3]
      9. A =
      10. 5 1 1 9
      11. 1 3 8 1
      12. 1 1 3 1
      13. 1 1 1 3
      14. >> D=A
      15. D =
      16. 5 1 1 9
      17. 1 3 8 1
      18. 1 1 3 1
      19. 1 1 1 3
      20. >> D(:,1)=[]
      21. D =
      22. 1 1 9
      23. 3 8 1
      24. 1 3 1
      25. 1 1 3
      26. >> D(2,2)=1
      27. D =
      28. 1 1 9
      29. 3 1 1
      30. 1 3 1
      31. 1 1 3
      32. >> D(4,3)=-1
      33. D =
      34. 1 1 9
      35. 3 1 1
      36. 1 3 1
      37. 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,规定为

第5章 矩阵运算 - 图10

(1)交换律 A+B = B+A

(2)结合律( A + B )+C = A+( B + C )

  • 实例 ————— 验证加法法则
    1. >> A=[5 6 9 8 ;5 3 6 7]
    2. A =
    3. 5 6 9 8
    4. 5 3 6 7
    5. >> B=[3 6 7 9;5 8 9 6]
    6. B =
    7. 3 6 7 9
    8. 5 8 9 6
    9. >> C=[9 3 5 6; 8 5 2 1]
    10. C =
    11. 9 3 5 6
    12. 8 5 2 1
    13. >> A+B
    14. ans =
    15. 8 12 16 17
    16. 10 11 15 13
    17. >> B+A
    18. ans =
    19. 8 12 16 17
    20. 10 11 15 13
    21. >> (A+B)+C
    22. ans =
    23. 17 15 21 23
    24. 18 16 17 14
    25. >> A+(B+C)
    26. ans =
    27. 17 15 21 23
    28. 18 16 17 14
    29. >> D=[1 5 6; 2 5 6]
    30. D =
    31. 1 5 6
    32. 2 5 6
    33. >> A+D
    34. 矩阵维度必须一致。 %只有相同维度的矩形才能进行计算
  • 实例 ————— 矩阵求和
    • 本实例求解矩阵之和

第5章 矩阵运算 - 图11

  1. >> [1 2 3;-1 5 6] + [0 1 -3;2 1 -1]
  2. ans =
  3. 1 3 0
  4. 1 6 5
  • 实例 ————— 矩阵求差
    • 本实例求解矩阵的减法运算
      1. >> A=[5 6 9 8;5 3 6 7]
      2. A =
      3. 5 6 9 8
      4. 5 3 6 7
      5. >> B =[3 6 7 9; 5 8 9 6]
      6. B =
      7. 3 6 7 9
      8. 5 8 9 6
      9. >> -B
      10. ans =
      11. -3 -6 -7 -9
      12. -5 -8 -9 -6
      13. >> A-B
      14. ans =
      15. 2 0 2 -1
      16. 0 -5 -3 1

5.2.2 矩阵的乘法运算

  • 数乘运算
    • 数λ与矩阵A=(aii)m×n 的乘积记成λA或Aλ,规定为

第5章 矩阵运算 - 图12

  • 同时,矩阵还满足下面的规律:

第5章 矩阵运算 - 图13%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为矩阵。
  1. >> A=[1 2 3 ; 0 3 3; 7 9 5]
  2. A =
  3. 1 2 3
  4. 0 3 3
  5. 7 9 5
  6. >> A*5
  7. ans =
  8. 5 10 15
  9. 0 15 15
  10. 35 45 25
  • 乘运算
    • 若3个矩阵有相乘关系,设A=(aij)是一个m×s的矩阵,B=(bij) 是一个s×n矩阵,规定A与B的积为一个m×n矩阵C=(cij),

第5章 矩阵运算 - 图14

  • 即C=A*B,需要满足以下3种条件。
    • 矩阵A的列数与矩阵B的行数相同;
    • 矩阵C的行数等于矩阵A的行数,矩阵C的列数等于矩阵B的列数;
    • 矩阵C的第m行n列元素值等于矩阵A的m行元素与矩阵B的n列元素对应值积的和。

第5章 矩阵运算 - 图15

  1. >> A=[1 2 3; 0 3 3; 7 9 5]
  2. A =
  3. 1 2 3
  4. 0 3 3
  5. 7 9 5
  6. >> B=[8 3 9 ; 2 8 1; 3 9 1]
  7. B =
  8. 8 3 9
  9. 2 8 1
  10. 3 9 1
  11. >> A*B
  12. ans =
  13. 21 46 14
  14. 15 51 6
  15. 89 138 77
  • 第5章 矩阵运算 - 图16注意:
    • AB≠BA,即矩阵的乘法不满足交换律。

第5章 矩阵运算 - 图17

  • 若矩阵A、B满足AB=0,未必有A=0或B=0的结论。
  • 点乘运算
    • 点乘运算指将两矩阵中相同位置的元素进行相乘运算,将积保存在原位置组成新矩阵。
      1. >>A.*B
      2. ans =
      3. 8 6 27
      4. 0 24 3
      5. 21 81 5
  • 实例 ————— 矩阵乘法运算
    1. >> A=[0 0 ;1 1]
    2. A =
    3. 0 0
    4. 1 1
    5. >> B=[1 0 ; 2 0]
    6. B =
    7. 1 0
    8. 2 0
    9. >> 6*A-5*B
    10. ans =
    11. -5 0
    12. -4 6
    13. >> A*B-A
    14. ans =
    15. 0 0
    16. 2 -1
    17. >> B*A-A
    18. ans =
    19. 0 0
    20. -1 -1
    21. >> A.*B-A
    22. ans =
    23. 0 0
    24. 1 -1
    25. >> A*B./A-A
    26. ans =
    27. NaN NaN
    28. 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的行数和列数相同,简称阶数)
    1. >> A.\B
    2. ans =
    3. 8.0000 1.5000 3.0000
    4. Inf 2.6667 0.3333
    5. 0.4286 1.0000 0.2000
  • 实例 ————— 验证矩阵的除法
    • 计算除法结果与除数的乘积与被除数是否相同
      1. A=[1 2 3; 5 8 6]
      2. A =
      3. 1 2 3
      4. 5 8 6
      5. B=[8 6 9;4 3 7]
      6. B =
      7. 8 6 9
      8. 4 3 7
      9. C=A./B
      10. C =
      11. 0.1250 0.3333 0.3333
      12. 1.2500 2.6667 0.8571
      13. D=B.*C
      14. D =
      15. 1 2 3
      16. 5 8 6
  • 右除运算
    • 若方程组表示为X*D1=B1,D1非奇异,即它的逆阵inv(D1)存在,则其解为

第5章 矩阵运算 - 图18%3DB1%2FD1%0A#card=math&code=X%3DB1%2Ainv%28D1%29%3DB1%2FD1%0A&id=fu4nT)

  • 符号”/“称为右除
  • 右除的条件:B1的列数等于D1的阶数(D1的行数和列数相同,简称阶数)。
  1. >> A./B
  2. ans =
  3. 0.1250 0.6667 0.3333
  4. 0 0.3750 3.0000
  5. 2.3333 1.0000 5.0000
  • 实例 ————— 矩阵的除法

    • 求解矩阵左除与右除

      1. >> A=[1 2 3;5 8 6]
      2. A =
      3. 1 2 3
      4. 5 8 6
      5. >> B=[8 6 9;4 3 7]
      6. B =
      7. 8 6 9
      8. 4 3 7
      9. >> A.\B
      10. ans =
      11. 8.0000 3.0000 3.0000
      12. 0.8000 0.3750 1.1667
      13. >> A./B
      14. ans =
      15. 0.1250 0.3333 0.3333
      16. 1.2500 2.6667 0.8571
  • 动手练一练 ——- 矩阵四则运算

第5章 矩阵运算 - 图19

  • 第5章 矩阵运算 - 图20思路点拨:
    • 输入矩阵
    • 使用算术符号计算矩阵
      1. >> A=[6 3; 8 2;-1 8]
      2. A =
      3. 6 3
      4. 8 2
      5. -1 8
      6. >> B=[0 1; 3 9; 0 -1]
      7. B =
      8. 0 1
      9. 3 9
      10. 0 -1
      11. >> -B
      12. ans =
      13. 0 -1
      14. -3 -9
      15. 0 1
      16. >> A-B
      17. ans =
      18. 6 2
      19. 5 -7
      20. -1 9
      21. >> 5*A
      22. ans =
      23. 30 15
      24. 40 10
      25. -5 40
      26. >> A*6
      27. ans =
      28. 36 18
      29. 48 12
      30. -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是一个正整数,规定

第5章 矩阵运算 - 图21

  • 称为矩阵的幂。其中k,l 是正整数。
  • 矩阵的幂运算是将矩阵中的每个元素进行乘方运算,即

第5章 矩阵运算 - 图22

  • 在MATLAB中,幂运算就是在乘方符号”.^”后面输入幂的次数。
  • 对于单个n阶矩阵A

第5章 矩阵运算 - 图23%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)

  1. >> A=[1 2 3;0 3 3;7 9 5]
  2. A =
  3. 1 2 3
  4. 0 3 3
  5. 7 9 5
  6. >> A.^2
  7. ans =
  8. 1 4 9
  9. 0 9 9
  10. 49 81 25
  • 对于两个n阶矩阵A与B

第5章 矩阵运算 - 图24%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)

  • 实例 ——- 矩阵的幂运算
    • 本实例演示矩阵的幂运算
      1. >> A=[1 2 3;0 3 3; 7 9 5]
      2. A =
      3. 1 2 3
      4. 0 3 3
      5. 7 9 5
      6. >> B=[5 6 8;6 0 5;4 5 6]
      7. B =
      8. 5 6 8
      9. 6 0 5
      10. 4 5 6
      11. >> (A*B)^5
      12. ans =
      13. 1.0e+11 *
      14. 0.3047 0.1891 0.3649
      15. 0.2785 0.1728 0.3335
      16. 1.0999 0.6825 1.3173
      17. >> A^5*B^5
      18. ans =
      19. 1.0e+10 *
      20. 2.5561 2.1096 3.3613
      21. 2.5561 2.1095 3.3613
      22. 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,调用格式如下。

第5章 矩阵运算 - 图25%0A#card=math&code=Y%3Dinv%28X%29%0A&id=Oyt46)

  • 实例 ——- 随机矩阵求逆

    • 本实例求解随机矩阵的逆矩阵

      1. >> A=rand(3)
      2. A =
      3. 0.8147 0.9134 0.2785
      4. 0.9058 0.6324 0.5469
      5. 0.1270 0.0975 0.9575
      6. >> B=inv(A)
      7. B =
      8. -1.9958 3.0630 -1.1690
      9. 2.8839 -2.6919 0.6987
      10. -0.0291 -0.1320 1.1282
  • 第5章 矩阵运算 - 图26提示:
    1. 逆矩阵必须使用方阵,即2×23×3,即n×n格式的矩阵,否则弹出警告信息。
    2. >> A=[1 -1; 0 1; 2 3]
    3. A =
    4. 1 -1
    5. 0 1
    6. 2 3
    7. >> B=inv(A)
    8. 错误使用 inv
    9. 矩阵必须为方阵。
  • 求解矩阵的逆条件数值使用函数rcond,调用格式如下。
    1. >> A=rand(3)
    2. A =
    3. 0.9649 0.9572 0.1419
    4. 0.1576 0.4854 0.4218
    5. 0.9706 0.8003 0.9157
    6. >> C=rcond(A)
    7. C =
    8. 0.0824
  • 实例 ——- 矩阵更新
    • 在编写算法或处理工程、优化等问题时,经常会碰到一些矩阵更新的情况,这时读者必须弄清楚矩阵的更新步骤,这样采用编写出相应的更新算法。下面来看一个关于矩阵逆的更新问题:对于一个非奇异矩阵A,如果用某一列向量b替换其第p列,那么如何在A-1的基础上更新出新矩阵的逆呢?
    • 操作步骤:
      • 解:首先来分析一下上述问题:设A=[a1 a2 … ap … an],设其逆为A-1,则有A-1A=[A-1a1 A-1a2 … A-1ap … A-1an] = 第5章 矩阵运算 - 图27。设A的第p列ap被列向量b替换后的矩阵为第5章 矩阵运算 - 图28,即第5章 矩阵运算 - 图29 。令第5章 矩阵运算 - 图30,则有:

第5章 矩阵运算 - 图31

Logs:用语雀已修复 (PS:不知道为啥这里公式不支持Markdown的格式,所以用截图了,然后下面那个图可以….)
源代码(复制到typora打开,选项中记得勾选支持markdown格式)

  • 如果第5章 矩阵运算 - 图32 ≠ 0,则我们可以通过初等行变换将上式的右端化为单位矩阵,然后将相应的变换作用到第5章 矩阵运算 - 图33,那么得到的矩阵即为第5章 矩阵运算 - 图34的更新。事实上行变换矩阵即为

第5章 矩阵运算 - 图35

  • 该问题具体的矩阵更新函数updateinv.m如下。
    1. function invA=updateinv(invA,p,b)
    2. %此函数用来计算A中的第p列被另一列b代替后,其逆的更新
    3. [n,n] = size(invA);
    4. d=invA*b;
    5. if abs(d(p))<eps %若d(p) = 0则说明替换后的矩阵是奇异的
    6. warning('替换后的矩阵是奇异的!');
    7. newinvA=[];
    8. return;
    9. else
    10. %对A的逆作相应的行变换
    11. invA(p,:)=invA(p,:)/d(p);
    12. if p>1
    13. for i=1:p-1
    14. invA(i,:)=invA(i,:)-d(i)*invA(p,:);
    15. end
    16. end
    17. if p<n
    18. for i=p+1:n
    19. invA(i,:)=invA(i,:)-d(i)*invA(p,:);
    20. end
    21. end
    22. end
  • 已知矩阵第5章 矩阵运算 - 图36,求A-1,并在A-1的基础上求矩阵A的第2列被b替换后的逆矩阵。验证上面所编函数的正确性。
  • 解:MATLAB程序如下。
    1. >> A=[1 2 3 4;5 6 1 0;0 1 1 0;1 1 2 3];
    2. >> b=[1 0 1 0]';
    3. >> invA=inv(A)
    4. invA =
    5. -1.5000 0.1000 0.4000 2.0000
    6. 1.5000 0.1000 -0.6000 -2.0000
    7. -1.5000 -0.1000 1.6000 2.0000
    8. 1.0000 0 -1.0000 -1.0000
    9. >> newinvA=updateinv(invA,2,b)
    10. newinvA =
    11. 0.3333 0.2222 -0.3333 -0.4444
    12. 1.6667 0.1111 -0.6667 -2.2222
    13. -1.6667 -0.1111 1.6667 2.2222
    14. 1.0000 0 -1.0000 -1.0000
    15. >> A(:,2)=b %显示A的第2列被b替换后的矩阵
    16. A =
    17. 1 1 3 4
    18. 5 0 1 0
    19. 0 1 1 0
    20. 1 0 2 3
    21. >> inv(A) %求新矩阵的逆,与newinvA比较(结果是一样的)
    22. ans =
    23. 0.3333 0.2222 -0.3333 -0.4444
    24. 1.6667 0.1111 -0.6667 -2.2222
    25. -1.6667 -0.1111 1.6667 2.2222
    26. 1.0000 -0.0000 -1.0000 -1.0000

5.3.3 矩阵的条件数

  • 矩阵的条件数在数值分析中是一个重要的概念,在工程计算中也是必不可少的,它用于刻画一个矩阵的”病态”程度。
  • 对于非奇异矩阵A,其条件数的定义为

第5章 矩阵运算 - 图37_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的条件数相对较大,即第5章 矩阵运算 - 图38_v#card=math&code=cond%28A%29_v&id=CEWz5)>>1时,矩阵A是”病态”的,反之是”良态”的。

5.3.4 矩阵的范数

  • 范数是数值分析中的一个概念,它是向量或矩阵大小的一种度量,在工程计算中有者重要的作用。对于向量第5章 矩阵运算 - 图39,常用的向量范数有以下几种。
    • x的第5章 矩阵运算 - 图40-范数:第5章 矩阵运算 - 图41
    • x的1-范数:第5章 矩阵运算 - 图42
    • x的2-范数(欧氏范数):第5章 矩阵运算 - 图43%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的第5章 矩阵运算 - 图44-范数:第5章 矩阵运算 - 图45%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=

5.4 矩阵分解

5.4.1 楚列斯基(Cholesky)分解

5.4.2 LU分解

5.4.3 LDMT 与LDLT 分解

5.4.4 QR分解

5.4.5 SVD分解

5.4.6 舒尔(Schur)分解

5.4.7 海森伯格(Hessenberg)分解

5.5 综合实例 ——- 方程组的求解

5.5.1 利用矩阵的逆

5.5.2 利用矩阵分解求解