专题一 MATLAB基础知识
目录
1. MATLAB系统环境
2. MATLAB数值数据
3. 变量及其操作
4. MATLAB矩阵的表示
5. 矩阵元素的引用
6. MATLAB基本运算
7. 字符串处理
--------------------------------------------------------------------------------------------------------
一、MATLAB系统环境
1. MATLAB操作界面的组成
操作界面:MATLAB主窗口+命令行窗口+当前文件夹窗口+工作区窗口
MATLAB主窗口:功能区+快速访问工具栏+当前文件夹工具栏
命令行窗口:用于输入命令并显示命令的执行结果。
续行符:用...表示,把下一个物理行看做是当前行的逻辑继续。
当前文件夹窗口:
如何设置当前文件夹呢?
1>. 在当前文件夹工具栏或当前文件夹窗口中选择某文件夹为当前文件夹;
2>. 使用 cd 命令。
>> cd e:\work % 将e盘下的文件夹work设置为当前文件夹(注:必须先建立文件夹work,才能设置)
工作区窗口(也叫工作空间窗口):
工作空间是用于存储各种变量和结果的内存空间。
2. MATLAB的搜索路径
命令对象的搜索顺序:
当在MATLAB中输入一个命令对象,MATLAB首先检测它是否是已存在的变量,如果不是,则检测它是否是内部函数,如果不是,则检测它是否是程序文件,先检测它是否是当前文件夹下的程序文件,再检测它是否是文件搜索路径文件夹中的程序文件。如下图:
举个例子:先用内部函数sin()计算弧度为1时的x值,再定义变量sin为[1 2 3 4 5],再次使用命令对象sin时,输出的结果是变量中的值。
如果这时需要调用函数sin(),该如何操作呢?可以在工作区窗口删除定义的sin变量,那么再次使用命令对象sin则表示内部函数了。所以在给变量取名的时候,尽量不要与内部函数等重名。
如何设置文件搜索路径?
1>. 用path命令设置文件搜索路径
例如:>> path(path, 'e:\work'); % 将e盘下的work文件夹纳入到文件搜索路径中
2>. 用对话框设置文件搜索路径
MATLAB主窗口->功能区->环境块->设置路径,点击设置路径,弹出对话框,设置文件搜索路径。
如果用户建立的文件既没有保存在当前文件夹下,也没有保存在文件搜索路径中,那么MATLAB就找不到这个文件,系统会给出错误提示信息。
--------------------------------------------------------------------------------------------------
二、MATLAB数值数据
1. 数值数据类型的分类
整型、浮点型、复数型
(1) 整型
无符号整型(8位、16位、32位、64位)和有符号整型(8位、16位、32位、64位)。
无符号8位整型数据的范围:00000000~11111111(0~2^8 - 1)
有符号8位整型数据的范围:10000000~01111111(-2^7 ~ 2^7 -1)
举个例子:
>> x=int8(129) % int8是有符号8位整型数据,范围是-128~127,因为129超出了范围,所以输出为127
>> x=uint8(129) % uint8是无符号8位整型数据,范围是0~255,因为129没有超出范围,所以输出仍是129
(2) 浮点型
single()函数:将其他类型的数据转换为单精度型
double()函数:将其他类型的数据转换为双精度型,double类型在内存中占用8个字节。
举个例子:在MATLAB中输入数值4,调用函数class()判断数值的类型,返回的类型是double,说明了MATLAB默认的数值类型是double型;调用函数single()将double型的数值4转换为single型,再调用函数class(),返回的类型是single。如下图所示:
(3) 复数型
复数型数据包括实部和虚部两个部分,实部和虚部均默认为是double类型,虚数单位用i或者j来表示。
real()函数:求复数的实部
imag()函数:求复数的虚部
2. 数值数据的输出格式
采用format命令设置数值数据的输出格式,format命令的调用格式如下:
format 格式符 % 该命令只是影响输出的格式,并不影响数据的计算以及存储,默认的输出格式是short
举个例子:
3. 常用数学函数
(1) 函数的调用格式为: 函数名(函数自变量的值)
如果函数自变量的值是一个矩阵,那么函数在运算时是将函数逐项作用于矩阵的每个元素上,所以最后运算的结果就是一个与自变量同型的矩阵。
(2) 常用函数的应用
1>. 三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数就在函数名后面加“d”,以示区别。
例如: >> sin(pi/2),结果为1;>> sind(90),结果也是为1
2>. 函数abs()可以求实数的绝对值、复数的模、字符串的ASCII码值。如下图所示:
3>. 用于取整的函数
函数round()是按照四舍五入的规则进行取整
函数ceil()是向上取整,取大于等于这个数的第一个整数
函数floor()是向下取整,取小于等于这个数的第一个整数
函数fix()是向靠近0的方向进行取整
举个例子:
4>. 函数应用举例
分别求一个三位正整数的各位数字、十位数字、百位数字。如下:
求1~100之间的所有素数。如下:
------------------------------------------------------------------------------------------------
三、变量及其操作
主要包括:变量与赋值语句、预定义变量、变量的管理
1. 变量从本质上来讲是内存单元的一个抽象。
2. 在MATLAB中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。
例如,在命令行窗口输入12my和_my这两个字符串,系统会返回输入错误的提示,如下图所示。
3. 在MATLAB中,变量名区分字母的大小写。
4. MATLAB提供的标准函数名以及命令名必须用小写字母。
5. 预定义变量
预定义变量是由系统本身定义的变量。例如,ans是默认赋值变量;i和j表示虚数单位;pi表示圆周率。
6. 变量的管理
(1) 内存变量的删除与修改,可以在工作空间中进行
(2) who和whos命令用于在命令行窗口中显示已经在工作空间中驻留的变量名清单
(3) 内存变量文件
用于保存MATLAB工作空间中变量的文件叫做内存变量文件,其扩展名为.mat,也叫MAT文件。是一种二进制格式的文件。
使用save命令创建内存变量文件;使用load命令装入内存变量文件。
>> save mydata a x; % 将工作空间中的变量a和x保存在内存变量文件mydata中
>> load mydata; % 将内存变量文件mydata装入到当前工作空间中
------------------------------------------------------------------------------------------------
四、MATLAB矩阵的表示
矩阵是MATLAB中最基本的数据对象,MATLAB的大部分运算或者是命令都是在矩阵计算的意义下执行的。
1. 矩阵的建立
(1) 利用直接输入法建立矩阵。将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或者空格分隔,不同行的元素之间用分号分隔。
(2) 利用已经建好的矩阵建立更大的矩阵:一个大矩阵可以由已经建立好的小矩阵拼接而成。
(3) 可以用实部矩阵和虚部矩阵构建复数矩阵。
2. 冒号表达式,产生一个行向量,格式如下
e1 : e2 : e3,其中e1是初始值,e2是步长,e3是终止值。如果省略步长e2,则步长默认为1。
3. 在MATLAB中,还可以使用函数linspace()产生一个行向量。
linspace(a,b,n) % a是生成向量的第一个元素,b是生成向量的最后一个元素,n是向量的元素总数。当省略n时,自动产生100个元素
4. 结构矩阵和单元矩阵
(1) 结构矩阵
格式为: 结构矩阵元素.成员名=表达式 % 对结构矩阵中每个元素的每个成员进行赋值
在工作空间中的结构矩阵为
(2) 单元矩阵
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵的元素是用大括号括起来。矩阵中的元素可以是不同类型的数据。
-----------------------------------------------------------------------------------------------------------
五、矩阵元素的引用
1. 矩阵元素的引用方式
(1) 通过下标来引用矩阵的元素
例如:A(4,5)表示矩阵A的第4行第5列的元素。
(2) 通过序号来引用矩阵的元素
在MATLAB中,矩阵元素按列存储在内存中,即首先存储矩阵的第1列元素,然后存储矩阵的第2列元素,……,一直到矩阵的最后一列元素。矩阵元素的序号,就是矩阵元素在内存中的排列顺序。如下例:
序号与下标是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号是(j-1)×m+i。
矩阵元素的序号与下标可以利用函数sub2ind()和函数ind2sub()实现相互转换。
函数sub2ind()将矩阵中指定元素的行、列下标转换为存储的序号。调用格式为:D=sub2ind(S,I,J),其中,S是矩阵行数和列数组成的向量,通常用函数size()获取,I是待转换矩阵元素的行下标,J是待转换矩阵元素的列下标,D为对应下标的序号。
函数ind2sub()将矩阵元素的序号转换成对应的下标。调用格式为:[I,J]=ind2sub(S,D),参数的意义与函数sub2ind()相同。
2. 利用冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵。
A(i, :) % 矩阵A第i行的全部元素
A(:, j) % 矩阵A第j行的全部元素
A(i:i+m, j:j+n) % 矩阵A第i~i+m行的且在第j~j+n列的所有元素
A(i:i+m, :) % 矩阵A第i~i+m行的全部元素
end运算符:表示某一维的末尾元素的下标。如下例子:
3. 利用空矩阵来删除矩阵的元素
空矩阵是指没有任何元素的矩阵。
4. 改变矩阵的形状
reshape(A,m,n) % 在矩阵总元素保持不变的前提下,将矩阵A重新排列成m×n的二维矩阵。
reshape()函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素的个数以及存储顺序。如下例子:
A(:) % 将矩阵A的每一列元素堆叠起来,成为一个列向量。如下例子:
---------------------------------------------------------------------------------------------------
六、MATLAB的基本运算
包括算术运算、关系运算、逻辑运算。
1. 算术运算
(1) 基本算术运算
基本算术运算符有6个:+(加) -(减) *(乘) /(右除) \(左除) ^(乘方)
MATLAB的算术运算是在矩阵意义下进行的。单个数据的算术运算只是矩阵运算的一种特例。
加减运算
乘法运算
除法运算
乘方运算
(2) 点运算
点运算符有4个: .*(点乘) ./(点右除) .\(点左除) .^(点乘方),两矩阵进行点运算是指它们的对应元素进行相关运算,要求两个矩阵同型。
2. 关系运算
关系运算符有6个: <(小于)、 <=(小于或等于)、 >(大于)、 >=(大于或等于)、 ==(等于)、 ~=(不等于)
3. 逻辑运算
逻辑运算符: &(与) |(或) ~(非)
3.1 设参与逻辑运算的是两个标量a和b,那么运算规则是:
3.2 若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终得到的运算结果是一个与原矩阵同型的矩阵,它的元素由1或0组成。
3.3 若参与逻辑运算的一个是标量,一个是矩阵,那么将标量与矩阵每个位置上的元素按标量规则逐个进行运算,最终得到的运算结果是一个与原矩阵同型的矩阵,它的元素由1或0组成。
--------------------------------------------------------------------------------------------------
七、字符串处理
MATLAB中两种基本的数据类型:数值型数据和字符型数据。
1. 字符串的表示
举例。建立一个字符串向量,然后对该向量做如下处理:①取第1~5个字符组成的子字符串;②将字符串倒过来重新排列;③将字符串中的小写字母变成相应的大写字母,其余字符不变;④统计字符串中小写字符的个数。
>> ch = 'ABc123d4e56Fg9'
ch =
'ABc123d4e56Fg9'
>> % 第1问
>> sub_ch = ch(1:5)
sub_ch =
'ABc12'
>> % 第2问
>> rev_ch = ch(end : -1 : 1)
rev_ch =
'9gF65e4d321cBA'
>> % 第3问
>> k = find(ch >= 'a' & ch <= 'z')
k =
3 7 9 13
>> ch(k) = ch(k) - ('a' - 'A')
ch =
'ABC123D4E56FG9'
>> % 第4问
>> length(k)
ans =
4
2. 字符串的操作
(1) 字符串的执行
格式: eval(s) % 把参数字符串中的内容作为对应的matlab命令来执行
(2) 字符串与数值之间的转换
(3) 字符串的比较
字符串的比较有两种方法:利用关系运算符或字符串比较函数。
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):在忽略字母大小写的前提下,比较字符串s1和s2前n个字符是否相等,如果相等,返回结果为1,否则返回0。
(4) 字符串的查找与替换
findstr(s1, s2):返回短字符串在长字符串中开始的位置。
strrep(s1, s2, s3):将字符串s1中的所有字符串s2替换为字符串s3。