本文是参考书籍《MATLAB R2020a完全自学一本通 》自己整理的一些笔记和一些练习,希望会给大家带来一些帮助。
目录
1、数组创建与运算
1.1数组的创建
-
在 MATLAB 中一般使用方括号 “[ ]” 、逗号 “,” 、空格和分号 “;” 来创建数组,数组中同一行的元素使用逗 号或空格进行分隔,不同行之间用分号进行分隔;
-
可以通过冒号创建一维数组;
-
通过 logspace() 函数创建一维数组;
用法:y=logspace(a,b,n)
:该函数创建行向量
y
,第一个元素为
10 a
,最后一个元素为
10 b
,形成总数为
n
个元素的等比数列。
-
通过 linspace() 函数创建一维数组;
用法:y=linspace(a,b,n):该函数创建行向量
y
,第一个元素为
a
,最后一个元素为
b
,形成总数为
n
个元素的线性间隔向量
1.2数组的运算
1.2.1 算术运算
数组的运算是从数组的单个元素出发,针对每个元素进行的运算。在
MATLAB
中,一维数组的算术运 算包括加、减、乘、左除、右除和乘方(
两个数组的维数须相同
)。
数组的乘除运算:通过格式
“.*”
或
“./”
可实现数组的乘除运算。
乘法:数组
A
和
B
的维数相同,运算为数组对应元素
相乘
,计算结果与
A
和
B
是相同维数的数组。
除法:数组
A
和
B
的维数相同,运算为数组对应元素
相除
,计算结果与
A
和
B
是相同维数的数组。
乘方格式“.^”实现数组的乘方运算。数组的乘方运算包括数组间的乘方运算、数组与某个具体数的乘方运算,以及常数与数组的乘方运算。
函数dot()可实现数组的点积运算。
1.2.2关系运算与逻辑运算
MATLAB提供的关系运算符与逻辑运算符可参考上篇所述。
关系运算的运算法则如下:
●
当两个比较量是标量时,直接比较两个数的大小。若关系成立,则返回的结果为
1
,否则为
0
。
●
当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的关系运算结果是一个与参 与比较的数组维数相同的数组,其组成元素为0
或
1
。
逻辑运算的运算法则如 下:
●
如果是非零元素则为真,用
1
表示;如果是零元素则为假,用
0
表示。
●
当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的逻辑运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0
或
1
。
●
在进行与运算(a&b)时,
a
、
b
全为非零,则为真,运算结果为
1
。在进行或运算(a|b)时,只要
a
、
b
有一个为非零,则运算 结果为1
。在进行非运算(~a
)时,若
a
为
0
,则运算结果为
1
;若
a
为非零,则运算结果为
0
。
2、矩阵的构造与操作
2.1矩阵的构造
矩阵的构造方式除了通过直接对变量赋值以外另外一种及可以通过MATLAB所提供的构造特殊矩阵的函数。
名称 | 功能 | 名称 | 功能 |
ones(n) | 构造n x n的全1阵 | ones(m,n,...,p) | 构造一个mxnx...p的1矩阵 |
ones(size(A)) | 构造和A同样大小的全1阵 | ||
zeros(n) | 构造n x n的零矩阵 | eye(n) | 构造n x n的单位阵 |
magic(n) | 构造n x n的矩阵,其中每一行、每一列元素之和都相等 | rand(n) | 构造n x n的矩阵,其元素为0~1之间均匀分布的随机数 |
randn(n) | 构造n x n的矩阵,其元素为零均值、单位方差的正态分布的随机数 | diag(x) | 构造n x n的方阵,主对角线元素取自向量x,其余元素为0 |
diag(A,k) | 构造由A第k条主对角线元素组成的列向量 k=0为对角线元素,k<0,为下第k条对角线;k>0,为上第k条对角线 | ||
triu(A) | 构造一个和A大小相同的上三角矩阵 | triu(A,k) | 构造一个和A大小相同的上三角矩阵,其第k条及其以上的元素为A中相应的元素 |
tril(A) | 构造一个和A大小相同的下三角矩阵 | tril(A,k) | 构造一个和A大小相同的上三角矩阵,其第k条及其以下的元素为A中相应的元素 |
2.2矩阵的操作
矩阵的操作主要有旋转矩阵、改变矩阵维度、删除矩 阵元素等。MATLAB
中提供的具体此类函数如下表:
函数名称 | 函数功能 |
fliplr(A) | 矩阵每一行均进行逆序排列 |
flipud(A) | 矩阵每一列均进行逆序排列 |
flipdim(A,dim) | 生成一个在 dim维矩阵A内的元素交换位置的多维矩阵 |
rot90(A) | 生成一个由A旋转90度的新矩阵 |
rot90(A,k) | 生成一个由A旋转90xk度的新矩阵 |
reshape(A,m,n) | 生成一个mxnx...xp维矩阵,其元素以线性索引的方式从A中获得 |
sort(A,x) | 对矩阵A进行升序排列并返回排列后的矩阵,当x=1,对每一列进行排序;当x=2时对每一行进行排序 |
sort(A,x,mode) | mode= ascend时进行升序排列 mode=descend时进行降序排列 |
cat(dim,A,B) | 将A和B组合成一个dim维的多维矩阵(注意矩阵的形状) |
2.3矩阵索引
在
MATLAB
中,二维数组元素的数字访问可以分为双下标索引和单下标索引。双下标索引是通过一个 二元数组对来对应元素在矩阵中的行列位置,例如A
(2,3)
表示矩阵
A
中第
2
行第
3
列的元素。单下标索引的方式是采用列元素优先的原则,对m
行
n
列的矩阵按列排序进行重组,成为一维数组,再取新的一维数组中的 元素位置对应的值作为元素在原矩阵中的单下标。例如对于4×4
的矩阵,
A
(6)
表示矩阵
A
中第
2
行第
2
列的元
素。
矩阵索引表达式 | 函数功能 |
A(:,j) | 返回矩阵A中第j列的元素 |
A(i,:) | 返回矩阵A中第i行的元素 |
A(:,j:k) | 返回矩阵A中第j列到第k列的元素 |
A(i:k,:) | 返回矩阵A中第i行到第k行的元素 |
A(i:k,j:k) | 返回由二维矩阵A中的第i行到第k行行向量和第j列到第1列列向量的交集组成的子矩阵 |
A(:) | 将矩阵A中的每列合并成一个长的列向量 |
A([i1,i2,...],[j1,j2,...]) | 返回矩阵A中第i1行、第i2行等和第j1列、第j2列等的元素 |
单下标索引值和双下标索引值之间,可以通过
MATLAB
内部函数进行转换即
2.4矩阵信息的获取
矩阵的信息主要包括矩阵结构、矩阵大小、矩阵维度、矩阵的数据类型及矩阵占用的内存等
2.4.1矩阵的结构
函数名称 | 函数功能 |
isempty(A) | 检测矩阵是否为空 |
isscalar(A) | 检测矩阵是否为单元素标量 |
isvector(A) | 检测矩阵是否为只有一列或一行的一维向量 |
issparse(A) | 检测矩阵是否为稀疏矩阵 |
这类函数的返回值是逻辑类型的数据。返回值为
“1”
表示该矩阵是某一特定类型的矩阵;返回值为
“0”
表 示该矩阵不是该特定类型的矩阵。
2.4.2矩阵大小
函数 | 函数功能 |
n=ndims(A) | 获取矩阵的维数 |
[m,n] = size(A) | 获取矩阵各维的长度 |
n= length(A) | 获取矩阵最长维的维数 |
n = numel(A) | 获取矩阵元素的个数 |
2.4.3矩阵的内部元素类型信息获取
矩阵作为
MATLAB
的内部数据存储和运算结构,其元素可以是各种各样的数据类型
, 对应不同数据类型的元素,可以是数值、字符、结构体等。MATLAB
中提供了一系列关于数据类型的测试函数。
函数名称 | 函数功能 |
isnumeric(A) | 检测矩阵A元素是否为数值型变量 |
isreal(A) | 检测矩阵A元素是否为实数数值型变量 |
isfloat(A) | 检测矩阵A元素是否为浮点数值型变量 |
isinteger(A) | 检测矩阵A元素是否为整数型变量 |
islogical(A) | 检测矩阵A元素是否为逻辑型变量 |
ischar(A) | 检测矩阵A元素是否为字符型变量 |
isstruct(A) | 检测矩阵A元素是否为字符型变量 |
iscell(A) | 检测矩阵A元素是否为元胞型变量 |
iscellstr(A) | 检测矩阵A元素是否为元胞型变量 |
2.5矩阵分析
在
MATLAB
中,用在函数后面加撇号
“ ' ”
来表示矩阵的转置。
MATLAB
中函数
find()
的作用是进行矩阵元素的查找,它通常与关系函数和逻辑运算相结合。其调用格式如下:
● ind=find(X)
:该函数查找矩阵
X
中的非零元素,函数返回这些元素的单下标。
● ind=find(X=0)
:该函数查找矩阵
X
中的零元素,函数返回这些元素的单下标。
● [row,col]=find(X,...)
:该函数查找矩阵
X
中的非零元素,函数返回这些元素的双下标
i
和
j
。
MATLAB
中函数
sum()和cumsum()
的作用是对矩阵的元素求和。其调用格式如下:
● B=sum(A)
:该函数对矩阵
A
的元素求和,返回由矩阵
A
各列元素的和组成的向量。
● B=sum(A,dim)
:该函数返回在给定的维数
dim
上元素的和。当
dim=1
时,计算矩阵
A
各列元素的 和;当
dim=2
时,计算矩阵
A
各 行元素的和。
MATLAB
中函数
prod()和cumprod()
的作用是对矩阵的元素求积。其调用格式如下:
● B=prod(A)
:该函数对矩阵
A
的元素求积,返回由矩阵
A
各列元素的积组成的向量。
● B=prod(A,dim)
:该函数返回在给定的维数
dim
上元素的积。当
dim=1
时,计算矩阵
A
各列元素的积;当
dim=2
时,计算矩阵
A
各行元素的积。
MATLAB
中函数
diff()
的作用是计算矩阵元素的差分。其调用格式如下:
● Y=diff(X,n,dim):计算矩阵在给定的维数dim上元素的n阶差分。当dim=1时,计算矩阵各列元素的差分;当dim=2时,计算矩 阵各行元素的差分。
函数名称 | 函数功能 |
norm(x,p) |
对任意大于
1
的
p
值,返回向量或者矩阵
的
p
阶范数。
|
normest(A)
normest(A,tol)
| 估计矩阵A的2阶范数(当一个近似的范数值满足要求时) 使用tol作为允许的相对误差。 |
rank(A) | 矩阵A的秩,即求对角元素 |
det(A) | 矩阵A的行列式 |
trace | 矩阵的迹(矩阵对角元素之和) |
null(A) | 矩阵的0空间 |
orth(A) | 正交化空间 |
rref(A) | 约化行阶梯形式 |
subspace | 求两个矩阵空间的角度 |
2.6特征值和特征向量
特征值和特征向量的定义学过线代的都清楚,这里不过多赘述,下面简单介绍一些相关函数。
eig(A):求包含矩阵A的特征值的向量。
[X,D]=eig(A):
产生一个矩阵
A
的特征值在对角线上的对角矩阵
D
和矩阵
X
,它们的列是相应的特征向量,满足
AX=XD
。为了得到有更好条件特征值的矩阵,要进行相似变换。
[T,B]=balance(A):
找到一个相似变换矩阵
T
和矩阵
B
,使得它们满足
B=T-A∙T
。
eig(A,'nobalance'):
不经过平衡处理求得矩阵
A
的特征值和特征向量,也就是不进行平衡相似变换。
eigs(A):
返回一个由矩阵
A
的部分特征值组成的向量,和
eig
命令一样,但是不返回全部的特征值。如果不带有参量,则计算
出最大的特征值。当计算所有特征值时,如果矩阵
A
的秩不小于
6
,则计算出
6
个特征值。
eigs(f,n):
求出矩阵
A
的部分特征值。在使用一个矩阵列的线性运算符时,字符串
f
中包含的是
M
文件的文件名,
n
指定问题的 阶次。用这种方法来求特征值比开始就用运算符来求要快。
eigs(A,B,k,sigma):
求矩阵
A
的部分特征值,矩阵
B
的大小和A相同;如果没有给出B=eye(size(A)),那么k就是要计算的特征值 的个数;如果k没有给出,就用小于6 的数或者A的秩。
变量sigma是一个实数或复数的移位参数,或者下列文本字符串中的一个,文本字符串指明的是特征值的属性:“lm”为最大的特征值,“sm”为最小的特征值,“lr”为最大的实数部分,“sr”为最小的实数部 分,“be”为同时求得最大和最小的实数部分。
condeig(A)
:返回一个由矩阵
A
的特征值条件数组成的向量。
[V,D,s]=condeig(A)
:返回
[V,D]=eig(A)
和
s=condeig(A)
。
2.7稀疏矩阵
在许多问题中涉及到的矩阵含有大量的0元素,其被称为稀疏矩阵。MATLAB中考虑到矩阵的稀疏性,在对它进行运算时有特殊的命令。为减少存储空间稀疏矩阵存储时只对非零元素下标和值进行储存。
2.7.1稀疏矩阵的创建
函数用法 | 功能 |
sparse(A) | 由非零元素和下标创建稀疏矩阵A。如果A已是一个稀疏矩阵,则返回A本身 |
sparse(m,n) | 生成一个mxn的所有元素都是0的稀疏矩阵 |
sparse(u,v,a) | 生成大小为max(u)×max(v)的稀疏矩阵。其中u和v是整数向量(向量长度必须相同),a为实数或复数向量 |
sparse(u,v,a,m,n) | 生成一个mxn的稀疏矩阵,(ui,vi)对应值ai。向量u、v和 a长度必须相同 |
spconvert(D) | 生成一个稀疏矩阵D。D共有3列,第1列为行下标,第2列为列下标,最后一列为元素值 |
full(S) | 将稀疏矩阵S转换成一个满矩阵 |
2.7.2稀疏矩阵的信息获取
函数 | 函数功能 |
nnz(B) | 查看非零元素的个数 |
nonzeros(B) | 查看非零元素值 |
nzmax(B) | 查看稀疏矩阵存储空间 |
spy(B) |
图形化显示非零元素的分布
|
nnz(S)/prod(size(S))
| 计算稀疏矩阵的非零元素密度 |
2.7.3特殊稀疏矩阵的创建
函数 | 函数功能 |
speye(m,n) | 创建单位稀疏矩阵 |
spones(B) | 创建非零元素为1的稀疏矩阵 |
sprand(B) | 创建非零元素为均匀分布的随机数的稀疏矩阵 |
sprandn(B) | 创建非零元素为高斯分布的随机数的稀疏矩阵 |
sprandsym(B) | 创建非零元素为高斯分布的随机数的对称稀疏矩阵 |
sprandsym(B) | 创建对角稀疏矩阵 |
sprandsym(B) | 为稀疏矩阵分配空间 |
对于矩阵的加、减、乘、除运算,只要其中有一个矩阵是满矩阵,则输出的结果都是满矩阵。
稀疏矩阵的数乘为稀疏矩阵;稀疏矩阵的幂为稀疏矩阵。