数学建模-Matlab学习笔记(五)

本文最后更新于:December 3, 2021 pm

MATLAB(矩阵实验室)是第四代高层次的编程语言和交互式环境数值计算,可视化和编程。由美国MathWorks公司开发的一种编程语言。用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。拥有众多的内置命令和数学函数,可以帮助您在数学计算,绘图和执行数值计算方法。

目录

1.运算符

1.1 算术运算符

允许两种不同类型的算术运算:矩阵算术运算、阵列算术运算。
矩阵的算术运算与线性代数中的定义相同。矩阵运算符和数组运算符是有区别的。然而,由于加法和减法运算矩阵和阵列是相同的,操作这两种情况下是相同的。

运算符 描述
+ 加法或一元加号。A + B将A和B。 A和B必须具有相同的尺寸,除非一个人是一个标量。一个标量,可以被添加到任何大小的矩阵。
- 减法或一元减号。A - B,减去B从A和B必须具有相同的大小,除非是一个标量。可以从任意大小的矩阵中减去一个标量。
***** 矩阵乘法;是一个更精确的矩阵A和B的线性代数积,矩阵乘法对于非纯量A和B,列一个数必须等于B.标量可以乘以一个任意大小的矩阵的行数。
.* 数组的乘法;A.*B是数组A和B的元素积,A和B必须具有相同的大小,除非A、B中有一个是标量。
/ 斜线或矩阵右除法;B/A与B * inv(A)大致相同。更确切地说: B/A = (A’B’)’
./ 矩阵右除法;矩阵A与矩阵B相应元素相除(A、B为同纬度的矩阵)
**.\** 反斜杠或矩阵左除;如果A是一个方阵,AB是大致相同的INV(A)* B,除非它是以不同的方式计算。如果A是一个n*n的矩阵,B是一个n组成的列向量,或是由若干这样的列的矩阵,则X = AB 是方程 AX = B ,如果A严重缩小或者几乎为单数,则显示警告消息。
. 数组左除法;A. B是元素B(i,j)/A(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量。
^ 矩阵的幂。X^P是X到幂P,如果p是标量;如果p是一个整数,则通过重复平方计算功率。如果整数为负数,X首先反转。对P值的计算,涉及到特征值和特征向量,即如果[ D ] = V,EIG(x),那么X^P = V * D.^P / V。
.^ A.^B:A的每个元素的B次幂(A、B为同纬度的矩阵)
矩阵的转置;A’是复数矩阵A的线性代数转置,这是复共轭转置。
.’ 数组的转置;A’是数组A的转置,对于复数矩阵,这不涉及共轭。

1.1.1 算术运算函数

函数 描述
uplus(a) 一元加号;增加量a
plus (a,b) 相加;返回 a + b
uminus(a) 一元减号;减少a
minus(a, b) 相减;返回 a - b
times(a, b) 数组相乘;返回 a.*b
mtimes(a, b) 矩阵相乘;返回 a* b
rdivide(a, b) 右阵划分;返回 a ./ b
ldivide(a, b) 左阵划分;返回 a. b
mrdivide(A, B) 求解线性方程组xA = B for x
mldivide(A, B) 求解线性方程组xA = B for x
power(a, b) 数组求幂;返回 a.^b
mpower(a, b) 矩阵求幂;返回 a ^ b
cumprod(A) 累积乘积;返回与包含累积乘积的数组A相同大小的数组。如果A是向量,则cumprod(A)返回一个包含A的元素的累积乘积的向量。如果A是矩阵,则cumprod(A)返回一个矩阵,其中包含A的每一列的累积乘积。如果A是一个多维数组,那么cumprod(A)将沿着第一个非正整数维。
cumprod(A, dim) 沿维 dim 返回返回累积乘积。
cumsum(A) 累加总和;返回包含累积和的数组A如果A是向量,则cumsum(A)返回一个包含A的元素的累积和的向量。如果A是矩阵,则cumsum(A)返回一个矩阵,其中包含A的每列的累积和。如果A是一个多维数组,那么cumsum(A)将沿着第一个非整数维度起作用。
cumsum(A, dim) 返回沿着dim的元素的累积和。
diff(X) 差分和近似导数;计算x相邻元素之间的差异。如果X是向量,则diff(X)返回相邻元素之间的差异的向量,比X短一个元素:[X(2)-X(1)X(3)-X(2)… X(N)-X(N-1)]如果X是一个矩阵,则diff(X)返回行差的矩阵:[X(2:m,…)-X(1:m-1,:)]
diff(X,n) 递归应用n次,导致第n个差异。
diff(X,n,dim) 它是沿标量dim指定的维数计算的第n个差分函数。 如果order n等于或超过Dim的长度,diff将返回一个空数组。
prod(A) 数组元素的乘积;返回A数组元素的乘积。如果A是向量,则prod(A)返回元素的乘积。如果A是非空矩阵,则prod(A)将A的列作为向量,并返回每列乘积的行向量。如果A是一个空的0-by-0矩阵,则prod(A)返回1。如果A是一个多维数组,那么prod(A)将沿着第一个非子集维度行为并返回一个乘积数组。 该维数的尺寸减小到1,而所有其他维数的尺寸保持不变。如果输入A为单个,则prod函数计算并返回B为单个;对于所有其他数字和逻辑数据类型,prod函数计算并返回B为double。
prod(A,dim) 沿dim维度返回乘积。 例如,如果A是矩阵,则prod(A,2)是包含每一行的乘积的列向量。
prod(__,datatype) 在数据类型指定的类中乘以并返回一个数组。
sum(A) 数组元素的总和;返回数组的不同维度的和。如果A是浮动的,那么是双倍或单个,B是本地累加的,它与A相同,B与A具有相同的类。如果A不是浮动的,则B被累加为双,B具有类double。如果A是向量,则sum(A)返回元素的总和。如果A是矩阵,则sum(A)将A的列作为向量,返回每列的和的行向量。如果A是一个多维数组,sum(A)将沿着第一个非单例维度的值作为向量来处理,返回一个行向量的数组。
sum(A,dim) 沿标量A的维度求和。
sum(..., 'double')sum(..., dim,'double') 执行双精度加法,并返回double类型的答案,即使A具有数据类型单一或整型数据类型。这是整型数据类型的默认值。
sum(..., 'native')sum(..., dim,'native') 在本机数据类型A中执行添加,并返回相同数据类型的答案。 这是单和双的默认值。
ceil(A) 向正无穷方向舍入;将a元素舍入为大于或等于A的最近整数。
fix(A) 舍入为零
floor(A) 向负无穷方向舍入;将a元素舍入为小于或等于a的最近整数。
idivide(a, b)idivide(a, b,'fix') 整数除法的舍入选项;与A./B相同,只是分数的商向零舍入到最接近的整数。
idivide(a, b, 'round') 分数的商舍入到最近的整数。
idivide(A, B, 'floor') 分数商向负无穷大舍入到最接近的整数。
idivide(A, B, 'ceil') 分数商向无穷大舍入到最接近的整数。
mod (X,Y) 除法后的模数;返回X - n.* Y,其中 n = floor(X./Y)。 如果Y不是整数,并且商X / Y在整数的舍入误差内,则n是整数。 输入X和Y必须是相同大小的真实数组或实数标量(提供Y〜= 0)。请注意:mod(X,0) 是 Xmod(X,X) 是 0对于 X = Y 和 Y = 0的 mod(X,Y)具有与Y相同的符号。
rem (X,Y) 除法之后的余数;返回X - n.* Y,其中n = fix(X./Y)。 如果Y不是整数,并且商X / Y在整数的舍入误差内,则n是整数。 输入X和Y必须是相同大小的真实数组或实数标量(提供Y〜= 0)。请记住:rem(X,0) 是 NaNX〜= 0的rem(X,X)为0对于 X=Y 和 Y=0 的rem(X,Y)与X具有相同的符号。
round(X) 舍入到最接近的整数; 将X的元素舍入到最接近的整数。 正数元素的小数部分为0.5,最大到最接近的正整数。 负数元素的小数部分为-0.5,向下舍入到最接近的负整数。

1.1.2 基本算术运算

包括:加(+)、减(-)、乘(*)、右除(/)、左除(\)、乘方(^)。

  1. 加减运算
  • 若两个矩阵同型,则运算时两矩阵的对应元素相加减。若不同型,则会报错。
  • 一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。
  1. 乘法运算
  • 矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。如果两者的维数或大小不相容,则会提示错误。

一个矩阵的乘方运算可以表示成 A^x,要求 A 为方阵,x 为标量。如:

1
2
a=[1,2,3;4,5,6;7,8,9];
a^2
  1. 除法运算
  • 如果A矩阵是非奇异方阵,则B/A等效于 B*inv(A)A\B等效于inv(a)*B。其中inv(A)表示A的逆。

对于矩阵来说,右除和左除表示两种不同的除数矩阵被除数矩阵关系。即两个矩阵做运算时,右除和左除的结果不同;一个矩阵和一个数做运算时,结果相同;两个数做运算时,结果相同。

  1. 点运算

点运算符包括:.*./.\.^
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。

1.2 逻辑运算符

逻辑运算都是针对元素的操作,运算结果是特殊的逻辑数组;在逻辑分析时,逻辑(真)用1表示,逻辑假用0表示,逻辑运算中所有的非零元素作为1处理。

包括:与(&)或(|)非(~)

  1. 参与逻辑运算的是两个标量a和b。

a&b:a、b全为非零时,运算结果为1,否则为0。
a|b:a、b中只要有一个非零时,运算结果为1。
~a:当a为零时,运算结果为1;当a为非零时,运算结果为0。

  • 若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。
  • 若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。

1.3 关系运算符

包括:小于(<)小于或等于(<=)大于(>)大于或等于(>=)等于(==)不等于(~=)

  • 当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,元素由 0 或 1 组成。
  • 当参与比较的一个是标量,而另外一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运行运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,元素由 0 或 1 组成。

2.字符串

2.1 字符串的访问

1
2
3
4
xm='LoongOne';
xm(1:3)

Loo

2.2 字符串的表示

字符串包含在单引号中,若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。

1
2
3
xm='i''m a student'

i'm a student

2.3 字符串矩阵

1
2
3
4
5
ch=['abcd';'1233'];
ch(2,3)

ans =
3

2.4 字符串执行

eval(S) 将字符串中的内容作为 matlab 命令来执行。

1
2
3
4
5
6
t=pi;
m='[t,sin(t),cos(t)]';
y=eval(m)

y =
3.1416 0.0000 -1.0000

2.5 字符串与数值之间的转换

  • absdouble函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。
  • char函数可以把ASCII码矩阵转换为字符串矩阵。

2.6 字符串的比较

有两种方法:利用关系运算符或字符串比较函数。

  • 关系运算符比较:两个字符串里的每个字符依次按ASCII值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是1,要么是0.

  • 字符串比较函数
    strcmp(s1,s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0。
    strncmp(s1,s2,n):用来比较两个字符串前 n 个字符是否相等,如果相等,返回1,否则返回0。
    strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0。
    strncmpi(s1,s2,n):在忽略字符串大小写前提下,比较两个字符串前 n 个字符是否相等,如果相等,返回1,否则返回0。

2.7 字符串的查找与替换

  • findstr(s1,s2):返回短字符串在长字符串中的开始位置。两个串的位置任意。
  • strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3。

3.矩阵处理

3.1 特殊矩阵

分为通用性的特殊矩阵、用于专门学科的特殊矩阵。

3.1.1 通用的特殊矩阵

3.1.1.1 zeros函数

zeros函数:产生全 0 矩阵,即零矩阵。
调用格式:

  1. zeros(m):产生 m * m 零矩阵。
  1. zeros(m,n):产生 m * n 零矩阵。
  1. zeros(size(A)):产生与矩阵A同样大小的零矩阵,返回的是矩阵。
1
2
3
4
5
6
7
a=zeros(2,3)

zeros(size(reshape(a,3,2)))
ans =
0 0
0 0
0 0
3.1.1.2 ones函数

ones函数:产生全 1 矩阵,即幺矩阵。

1
2
3
4
5
a = ones(3)
a =
1 1 1
1 1 1
1 1 1
3.1.1.3 eye函数

eye函数:产生对角线为 1 的矩阵。当矩阵是方阵时,得到一个单位矩阵。

1
2
3
4
5
6
eye(4)

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
3.1.1.4 rand函数

rand函数:产生(0,1)区间均匀分布的随机矩阵。
fix(a+(b-a+1)*x):产生 [a,b] 区间上均匀分布的随机整数。

1
2
3
4
5
6
a = rand(4)
a =
0.3922 0.0318 0.8235 0.0344
0.6555 0.2769 0.6948 0.4387
0.1712 0.0462 0.3171 0.3816
0.7060 0.0971 0.9502 0.7655

[10,99]:

1
2
3
4
5
6
a=fix(10+(99-a+1)*rand(4))

30 72 22 32
77 90 23 83
32 96 33 31
55 59 85 93
3.1.1.5 randn函数

randn函数:产生均值为 0 ,方差为 1 的标准正态分布随机矩阵。
u + σx :得到均值为 u 、方差为 σ的随机数。

1
2
3
4
5
6
7
a=randn(5)

-0.8236 -1.3337 -0.2620 -1.1564 -0.0200
-1.5771 1.1275 -1.7502 -0.5336 -0.0348
0.5080 0.3502 -0.2857 -2.0026 -0.7982
0.2820 -0.2991 -0.8314 0.9642 1.0187
0.0335 0.0229 -0.9792 0.5201 -0.1332
1
2
3
4
5
6
7
a=3+10*randn(5)

-4.1453 -5.4793 -9.5712 -20.2987 1.6972
16.5139 -8.2013 -5.6547 -11.4910 4.8369
0.7523 28.2600 1.2347 6.3351 -1.7615
-2.8903 19.5550 10.9142 6.9135 11.6202
0.0625 6.0754 -10.3200 7.5168 -10.6169

3.1.2 专门学科的特殊矩阵

3.1.2.1 魔方矩阵
  • n 阶魔方阵由 1,2,3·····,n2共 n2 个整数组成,且每行、每列以及主、副对角线上各 n 个元素之和都相等。

  • n 阶魔方阵每行每列元素的和为 (1+2+3+···+n2)/ n = (n+n3)/2。

如图:

magic函数

1
2
3
4
5
6
7
m=magic(5)

17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
3.1.2.2 范德蒙矩阵

vander(v)函数 生成以向量 v 为基础的范德蒙矩阵。

如图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>> a=vander(1:3)

a =

1 1 1
4 2 1
9 3 1

>> b=vander(1:5)

b =

1 1 1 1 1
16 8 4 2 1
81 27 9 3 1
256 64 16 4 1
625 125 25 5 1
3.1.2.3 希尔伯特矩阵

hlib(n)函数

如图:

由图可知:希尔伯特矩阵的元素为 H(i,j)=1/(i+j+1) 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> hilb(4)

ans =

1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429

>> format rat % 以有理数格式输出
>> hilb(4)

ans =

1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7
3.1.2.4 伴随矩阵

compan(p)函数:,其中 p 是一个多项式的系数向量,高次幂系数排在前,低次幂系数排在后。

如图:

示例:生成多项式 x3 - 2x2 - 5x+6 的伴随矩阵。

1
2
3
4
5
6
7
8
>> p=[1,-2,-5,6];
>> a=compan(p)

a =

2 5 -6
1 0 0
0 1 0
3.1.2.5 帕斯卡矩阵

pascal(n)函数:生成一个 n 阶帕斯卡矩阵。
帕斯卡矩阵的第一行元素和第一列元素都为 1 ,其余位置的元素是该元素的左边元素与上面元素相加,即 p(i,j)=p(i,j-1)+p(i-1,j),且 p(i,1)=1,p(1,j)=1。

1
2
3
4
5
6
7
8
9
>> pascal(5)

ans =

1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70

3.2 矩阵变换

3.2.1 对角阵

  1. 对角矩阵:只有对角线上有非零元素的矩阵。
  1. 数量矩阵:对角线上的元素相等的对角矩阵。
  1. 单位矩阵:对角线上的元素都为 1 的对角矩阵。
3.2.1.1 提取矩阵的对角线元素
  1. diag(a):提取矩阵 a 主对角线元素,产生一个列向量。
  1. diag(a,k):提取矩阵 a 第 k 条对角线的元素,产生一个列向量。主对角线为第 0 条对角线,向上走为第 1 条、···、第 n 条对角线;向下走为 第 -1 条、····、第 -n 条对角线。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
a =

1 2 3 4 5
5 6 7 8 9
4 5 6 7 8

>> diag(a)

ans =

1
6
6

>> diag(a,1)

ans =

2
7
7

>> diag(a,0)

ans =

1
6
6
3.2.1.2 构造对角矩阵
  1. diag(v):以向量 v 为主对角线元素,产生对角矩阵。
  1. diag(v,k):以向量 v 为第 k 条对角线元素,产生对角矩阵。

示例1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> a=[1,2,3,4,5]

a =

1 2 3 4 5

>> diag(a)

ans =

1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5

示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> a=(1:5)

a =

1 2 3 4 5

>> diag(a,1)

ans =

0 1 0 0 0 0
0 0 2 0 0 0
0 0 0 3 0 0
0 0 0 0 4 0
0 0 0 0 0 5
0 0 0 0 0 0

3.2.2 三角阵

3.2.2.1 上三角阵

矩阵的对角线以下的元素全为零的矩阵。

  1. triu(a):提取矩阵 a 的主对角线及以上的元素。
  1. triu(a,k):提取矩阵 a 的第 k 条对角线及以上的元素。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
>> a=ones(5)

a =

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

>> triu(a)

ans =

1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1

>> triu(a,-1)

ans =

1 1 1 1 1
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
3.2.2.2 下三角阵

对角线以上的元素全为零的矩阵。提取矩阵 a 的下三角矩阵的函数是tril,用法与 triu函数完全相同。

3.2.3 矩阵的转置

  • 转置运算符是小数点后面接单引号 .'

  • 共轭转置,其运算符的单引号 ',它在转置的基础上还要取每个数的复共轭。如果是实数则一样。

示例:复数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>> a=[1,3;3+4i,1-2i]

a =

1.0000 + 0.0000i 3.0000 + 0.0000i
3.0000 + 4.0000i 1.0000 - 2.0000i

>> a.'

ans =

1.0000 + 0.0000i 3.0000 + 4.0000i
3.0000 + 0.0000i 1.0000 - 2.0000i

>> a'

ans =

1.0000 + 0.0000i 3.0000 - 4.0000i
3.0000 + 0.0000i 1.0000 + 2.0000i

示例:实数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>> a=[1,2;3,4;5,6]

a =

1 2
3 4
5 6

>> a.'

ans =

1 3 5
2 4 6

>> a'

ans =

1 3 5
2 4 6

3.2.4 矩阵的旋转

rot90(a,k):将矩阵 a 逆时针方向旋转 90°的 k 倍,当 k 为 1 时可省略。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>> a=[1:5;5:9;9:13]

a =

1 2 3 4 5
5 6 7 8 9
9 10 11 12 13

>> rot90(a)

ans =

5 9 13
4 8 12
3 7 11
2 6 10
1 5 9

>> rot90(a,2)

ans =

13 12 11 10 9
9 8 7 6 5
5 4 3 2 1

3.2.5 矩阵的翻转

  1. fliplr(a):对矩阵 a 实施左右翻转。
  1. flipud(a):对矩阵 a 实施上下翻转。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>> a=[1:4;5:8;9:12]

a =

1 2 3 4
5 6 7 8
9 10 11 12

>> fliplr(a)

ans =

4 3 2 1
8 7 6 5
12 11 10 9

>> flipud(a)

ans =

9 10 11 12
5 6 7 8
1 2 3 4

3.2.6 矩阵求逆

inv(a):求方阵 a 的逆矩阵。

3.3 矩阵求值

3.3.1 矩阵的行列式值

det(a):求方阵 a 所对应的行列式的值。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> a=[1:3;4:6;7:9]

a =

1 2 3
4 5 6
7 8 9

>> format rat
>> det(a)

ans =

-1/1050839913053116

3.3.2 矩阵的秩

矩阵线性无关的行数或列数称为矩阵的秩。
rank(a):求矩阵 a 的秩。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
>> a=[1:4;5:8;9:12]

a =

1 2 3 4
5 6 7 8
9 10 11 12

>> rank(a)

ans =

2

3.3.3 矩阵的迹

矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。
trace(a):求矩阵 a 的迹。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> a=[1:4;5:8;9:12;13:16]

a =

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

>> trace(a)

ans =

34

3.3.4 向量和矩阵的范数

矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。

3.3.4.1 向量的 3 种常用范数
  1. 向量1-范数:向量元素的绝对值之和。

norm(v,1):计算向量 v 的1-范数。

  1. 向量2-范数:向量元素平方和的平方根。

norm(v)或norm(v,2):计算向量 v 的 2-范数。

  1. 向量∞-范数:所有向量元素绝对值中的最大值。

norm(v,inf):计算向量 v 的 ∞-范数。

3.3.4.2 矩阵的范数
  1. 矩阵 a 的 1-范数:矩阵列元素绝对值之和的最大值。
  1. 矩阵 a 的 2-范数:a’a 矩阵的最大特征值的平方根。
  1. 矩阵 a 的 ∞-范数:所有矩阵行元素绝对值之和的最大值。

矩阵求3种范数的函数与向量的函数完全相同。

3.3.5 矩阵的条件数

  • 矩阵 a 的条件数等于 a 的范数与 a 的逆矩阵的范数的乘积。

  • 条件数是大于1的,越接近于1,矩阵的性能越好,反之,矩阵的性能越差。

  1. cond(a,1):计算 a 的 1-范数下的条件数。
  1. cond(a)或cond(a,2):计算 a 的 2-范数下的条件数。
  1. cond(a,inf):计算 a 的 ∞-范数下的条件数。

3.4 矩阵的特征值与特征向量

E=eig(a):求矩阵 a 的全部特征值,构成向量 E 。

[X,D]=eig(a):求矩阵 a 的全部特征值,构成对角阵 D ,并产生矩阵 X,X 各列是相应的特征向量。

Matlab 提供了一个 eigshow函数,可以演示单位圆上的向量 X 和 Ax 之间的关系。

3.5 稀疏矩阵

矩阵有两种存储方式:完全存储方式、稀疏存储方式。
稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。但采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
示例:

1
2
3
4
5
6
7
>> a=[1,0,0,0;0,5,0,0;2,0,0,7]

a =

1 0 0 0
0 5 0 0
2 0 0 7

a 矩阵的稀疏存储方式为:

1
2
3
4
(1,1) , 1
(3,1) , 2
(2,2) , 5
(3,4) , 7

3.5.1 完全存储方式与稀疏存储方式之间的转化

A=sparse(s):将矩阵 S 转化为稀疏存储方式的矩阵 A 。
S=full(a):将矩阵 a 转化为完全存储方式的矩阵 S 。

3.5.2 直接建立稀疏存储矩阵

sparse(m,n):生成一个 m * n 的所有元素都是零的稀疏矩阵。
sparse(u,v,s):其中 u、v、s 是 3 个等长的向量。s 是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是 s(i) 的行和列下标。

使用 spconvert函数 直接建立稀疏存储矩阵,其调用格式为:B = spconvert(A)
A 为一个 m * 3 或者 m * 4 的矩阵,其每行表示一个非零元素,m 是非零元素的个数。

  • A():第 i 个非零元素所在的行。

  • A():第 i 个非零元素所在的列。

  • A():第 i 个非零元素值的实部。

  • A():第 i 个非零元素值的虚部。

若矩阵的全部元素都是实数,则无须第 4 列。

3.5.3 带状稀疏矩阵的稀疏存储

稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则结构的稀疏矩阵。
带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。

[B,d]=spdiags(A):从带状稀疏矩阵 A 中提取全部非零对角线元素赋给矩阵 B 及其这些非零对角线的位置向量 d 。
A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵 A ,其中m、n 为原带状稀疏矩阵的行数与列数,矩阵 B 的第 i 列即为原带状稀疏矩阵的第 i 条非零对角线,向量 d 为原带状稀疏矩阵所有非零对角线的位置。

3.5.4 单位矩阵的稀疏存储

speye(m,n):返回一个 m * n 的稀疏存储单位矩阵。
示例:

1
2
3
4
5
6
7
>> speye(3)

ans =

(1,1) 1
(2,2) 1
(3,3) 1

本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/2403181932.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!