虽然大学信号与系统、DSP等专业课涉及了一些MATLAB的学习,但是一直没有系统地学过,学过的也没有经常用也忘了不少,研究生估计又要跟MATLAB打三年交道了,趁着假期捡捡旧知识学点新知识。
MATLAB系统由MATLAB开发环境、MATLAB数学函数库、MATLAB语言、MATLAB图形处理系统和MATLAB应用程序接口(API)五大部分构成。MATLAB语言是一种高级的基于矩阵/数组的语言。MATLAB应用程序接口(API)是一个使MATLAB语言能与C、Fortran、C#、Java等其它高级编程语言进行交互的函数库。
一、MATLAB基本内容
1、常量与变量
变量:
(1) 变量是数值计算的基本单元。与C语言等其他高级语言不同,MATLAB不需要事先定义变量及其类型,但是运算表达式中不允许有未定义的变量。
(2) MATLAB将所有变量均存成double的形式,不需经过变量定义。
(3) 如果不想让MATLAB每次都显示运算结果,只需在运算式最后加上分号。
2、基本数学函数
3、向量基本操作
(1) 行列向量写法
(2) 更改、增加、删除向量中的元素
(3) 常用的向量运算函数
4、数组array及其操作
在MATLAB内部的任何数据类型,都是按照数组的形式进行存储和运算的。
按照数组元素个数和排列方式,MATLAB中的数组可以分为:空数组:没有元素;一维数组:只有一行或者一列元素的向量,即行向量、列向量;二维数组:具有多行多列元素;多维数组:具有行、列、页等多个维度。
(1) MATLAB中数组创建
一般使用方括号[]、逗号或空格、分号来创建。同一行中的元素用逗号或者空格分隔,不同行之间用分号分隔。
空数组
用于数组声明,数组清空,以及特殊的运算场合。
一维数组
对于列向量,要么方括号中元素之间用分号分隔;要么通过转置运算符(')将行转为列。
通过冒号( : )创建:Var=start_val : step : stop_val,step不指定时默认为1.
通过linspace函数创建:Var=linspace(start_val,stop_val,n),形成n个元素的等差数列。n不指定时默认为100.
通过logspace创建:Var=logspace(start_val,stop_val,n)。产生从10^start_val到10^stop_val包含n个元素的等比一维数组,n不指定时默认为50.
二维数组
(2) 数组属性
包括数组的排列结构、数组的尺寸大小、维度、数组数据类型,以及数组的内存占用情况等。
数组结构
数组的结构指的是数组中元素的排列方式。
数组大小
MATLAB中最常用的返回数组大小的是size函数。
d=size(A):将数组A的行列尺寸以一个行向量的形式返回变量d,即d=[m,n];
[a,b]=size(A):将数组A在行、列的方向的尺寸返回给a,b,即a=m,b=n;
length函数常用于返回一维数组的长度,但是A为普通二维数组时,length(A)返回size(A)得到的两个数中较大的那个。
numel函数返回数组元素总个数,对于m行n列的数组,即返回m*n。
数组维度
通俗讲就是数组具有的方向。不如普通的二维数组,具有行的方向和列的方向,就是说数组具有两个方向,是一个二维数组。
对于空数组、标量和一维数组,MATLAB还是当作普通二维数组对待的,因为他们都至少具有两个维度(至少具有行和列两个方向)。
MATLAB中计算数组维度可以用函数ndims。ndims(A)返回结果实际上等于length(size(A))。
数组的数据类型
对于不同数据类型的元素,可以有数值数组(实数数组、浮点数值数组、整数数组等)、字符数组、元胞数组、字符串的元胞数组、结构体数组等。
数组的内存占用
可以通过whos命令查看当前工作区中所有变量或指定变量的多种信息,包括变量名、数组大小、内存占用和数组元素的数据类型。
(3) 创建特殊数组
0-1数组
zeros(m,n):创建一个m行n列的全0数组;zeros(size(A)):创建一个和A具有相同大小的全0数组;zeros(m):创建一个m行m列的全0数组。
ones(m,n):创建一个m行n列的全1数组;ones(size(A)):创建一个和A具有相同大小的全1数组;ones(m):创建一个m行m列的全1数组。
eye:创建单位数组,用法同上。
对角数组
diag函数:该函数接收一个一维行向量数组作为输入参数,将此向量的元素逐次排列在指定的对角线上,其他位置用0填充。
diag(v):主对角元素依次对应于向量v的元素;
diag(v,k):对角数组的第k条对角线元素依次对应于向量v的元素;
随机数组
rand(m,n):产生m行n列的随机数组,其元素服从0到1的均匀分布;
rand(size(A)):产生和数组A具有相同大小的、元素服从0到1的均匀分布的随机数组;
randn(m):产生m行m列的随机数组,其元素服从0到1的均匀分布。
randn函数:用于产生元素服从标准正态分布的随机数组,用法与rand类似。
魔方数组
这种数组行、列数相等,而且每一行、每一列的元素之和都相等。
通过magic(n)创建n行n列的魔方数组。
(4) 数组索引
MATLAB中,普通二维数组元素的数字索引方式又分为两种:双下标索引和单下标索引。
双下标索引:第一个数字指定元素所在的行位置,第二个数字指定元素所在的列位置。
单下表索引:采用了列元素优先的原则,对于m行n列的数组A,A(x,y)对应A((y-1)m+x)。
这两种数字索引方式中的数字索引也可以是一个数列,从而实现访问多个数组元素的目的。
双下标索引转换为单下标索引:sub2ind命令,其语法为:IND=sub2ind(siz,I,J)
其中siz用于指定数组的行列尺寸;I和J分别是双下标索引中的两个数字;IND则为转换后的单下标数字。
单下标索引转换为双下标索引:ind2sub命令,其语法为:[I,J]=ind2sub(siz,IND)
(5) 裁剪数组
MATLAB中裁剪数组,最常用的就是冒号操作符。
如果某一索引位置上不是用数字表示,而是用冒号代替,则表示这一索引位置可以取所有可以取到的值。
(6) 数组形状的改变
数组转置
共轭转置:操作符( ' )或者函数ctranspose;
非共轭转置:操作符(. ' )或者函数transpose。
数组翻转
(7) 数组运算
最基本的加、减、乘、乘方等;
数组除法实际上是乘法的逆运算,相当于参与运算的一个数组和另一个数组的逆数组相乘。
MATLAB中,数组除法有左除(/)和右除(\)。
A/B相当于A*inv(B);A\B相当于inv(A)*B。
点运算
当对两个尺寸相同的数组进行元素对元素的乘、除,或者对数组的逐个元素进行乘方,可以通过点运算来实现。
(8) 数组查找
MATLAB中数组查找只有一个函数find,它能够查找数组中的非零元素并返回其下标索引。
a=find(A):返回数组A中非零元素的单下标索引;
[a,b]=find(A):返回数组A中非零元素的双下标索引。
(9) 数组排序
MATLAB中的排序函数是sort。