1.MATLAB系统环境
1.1MATLAB操作界面的组成
(1)MATLAB 主窗口
- 功能区:提供三个选项卡(主页,绘图,应用程序),各自有不同的工具可供使用。
- 快速访问工具栏:包含一些常用按钮
- 当前文件夹工具栏:用于实现当前文件夹的操作
(2)命令行窗口
命令行窗口用于输入命令并显示命令的执行结果。
在命令提示符>>后输入命令并按下回车键,Matlab就会解释执行输入的命令并显示结果
如果命令很长,可用续行符 … 换行继续输入命令
续行符前应该有符号…
(3)当前文件夹窗口
注意: 应该先建立文件夹,再将这个文件夹设为当前文件夹
(4)工作区窗口
是Matlab 用于存储各种变量和结果的空间 ,可用于变量的显示和操作
clear清楚工作区的全部变量
在工作区以表格形式显示变量a与x的名称,取值等信息。
在工作区还可以对变量进行保存、编辑、删除等操作。
1.2MATLAB的搜索路径
(1)寻找命令对象的顺序
用户在命令行窗口输入一条命令后,MATLAB 将按照一定顺序依次寻找命令对象。
顺序:
如果想调用sin函数,我们需要删掉定义的sin变量,删掉后,调用sin函数,就是调用内部函数
所以在定义变量名时要避免与文件名和函数名重复
(2)设置文件搜索路径
-
用path命令设置文件搜索路径
>> path(path,'E:\demo')
-
用对话框设置文件搜索路径
注意:
-
如果在当前文件夹和搜索路径文件夹下建立了一个同名的M文件,那么在命令行窗口输入文件名时,执行当前文件夹下的M文件
(根据MATLAB文件的搜索路径,应该先搜索当前文件夹下的文件,然后再搜索文件搜索路径文件夹的程序文件)
-
如果用户建立的文件,既没有保存在当前文件夹下,也没有保存在文件搜索路径中,那么在命令行窗口输入文件名时,matlab将找不到这个文件,系统提出错误信息
所以,要执行的文件必须放在当前文件夹或者搜索路径文件夹中
2.MATLAB数值数据
2.1数字类型的分类
(1)整型
-
无符号整数:无符号8位整数、无符号16位整数、无符号32位整数、无符号64位整数
-
带符号整数:带符号8位整数、带符号16位整数、带符号32位整数、带符号64位整数
-
无符号8位整数数据范围:00000000 ~11111111 (0 ~ 28 -1 ) (0~255)
-
带符号8位整数数据范围:10000000 ~ 01111111(-27 ~ 27 -1)(-128~127)
MATLAB 提供了数据类型转换函数来实现数据类型的转换
- int8 函数 将数值数据转换为带符号8位整数
- uint8 函数 将数值数据转换为无符号8位整数
(2)浮点型
浮点型数据分为单精度型和双精度型,单精度型实数在内存中占用4个字节,而双精度实数在内存中占用8个字节,所以双精度型的数据精度更高
-
single 函数 :将其他类型的数据转换为单精度型
-
double 函数 :将其他类型的数据转换为双精度型
注意:数值数据默认为双精度型
class函数 判断其数值的类型
(3)复型
复型数据包括实部和虚部两部分,实部和虚部默认为双精度型,虚数单位用i或j来表示。(6+5i 与 6+5j 表示同一个数据)
real() % 求复数的实部
image() % 求复数的虚部
2.2数值数据的输出格式
format 命令的格式 :format 格式符
不同的格式符 使输出的格式符不同。
format 命令 只影响 数据输出格式,而不影响数据的计算和存储
format 命令 | 输出格式 |
---|---|
format | 默认输出格式 short 类型 |
format short | 小数点后包含4位数 |
format long | 长固定小数格式,single 类型 ,小数点后包含7位数,double类型,小数点后包含15位数 |
format + | 正/负格式,对于正数,输出+,对于负数,输出-,对于0,输出 空白字符 |
format bank | 货币格式,小数点后包含两位小数 |
format rat | 小数变为分数输出 |
format compact | 隐藏过多的空白行以便在一个屏幕上显示更多的输出 |
format loose | 添加空白行以使输出更易于阅读 |
2.3常用的数学函数
(1)函数的调用格式
函数名(函数自变量的值)
函数的自变量规定为矩阵变量,当然也可以是标量,标量本身是矩阵的一种特例
函数在运算时是将函数逐项作用与矩阵的每个元素上,所以最后运算的结果就是一个与自变量同型的矩阵
(2)常用函数的应用
- 三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数就在函数名后面加“d”,以示区别
- abs 函数 可以求实数的绝对值、复数的模、字符串的ASCII 码值
(3)用于取整的函数
- round函数按照四舍五入的规则取整
- ceil 函数 是向上取整,取大于等于这个数的第一个整数
- floor 函数 是向下取整,取小于等于这个数的第一个整数
- fix 函数 是固定取靠近0 的那个整数,即舍去小数取整
rem(m,n) % 求m/n 的余数
例1:分别求一个三位正整数的个位数字、十位数字和百位数字
- 一个三位正整数除以10的余数得到个位数字
- 一个三位正整数除以10取整后 ,再将新得到的数再除以10 取余数,得到原数的十位数字
- 一个三位正整数除以100取整后得到百位数字
例2:求[ 1 , 100 ]区间的所有素数
MATLAB 提供了一个判断n是否是素数的函数 isprime(n),当n是素数时返回1,否则返回0
3.变量及其操作
计算机处理的数据都是存放在内存单元中,而每一个内存单元都有一个唯一的地址,程序就是通过这个地址访问对应内存单元的
在高级语言中,只需要给每个内存单元取一个名字,然后通过这个名字就能够访问每个内存单元了
3.1变量与赋值语句
- 变量本质上讲是内存单元的一个抽象
- 在matlab中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符
- 变量名区分字母的大小写
- 标准函数名以及命令名必须用小写字母
赋值语句两种格式
变量 = 表达式 %变量结果会在命令行中显示出来
变量 = 表达式; %变量结果不会在命令行中显示出来
例1:
3.2预定义变量
预定义变量是由系统本身定义的变量
-
ans 是默认赋值变量
-
i 和 j 代表虚数单位
-
pi 代表圆周率
-
NaN 代表 非数
在绘图中,如果想裁掉其中一部分,只需要把要裁掉的部分坐标设置为NaN
3.3变量的管理
(1)内存变量的删除与修改
-
在工作区选择变量右击 即可进行删除和修改
-
who 命令和whos 命令:
who 命令 只显示已存在变量的名称,而whos 命令 显示信息更多
(2)内存变量文件
用于保存MATLAB 工作区变量的文件叫作内存变量文件,其扩展名为 .mat,也叫做MAT文件
- save 命令 :创建内存变量文件
- load 命令 : 装入内存变量文件
4.MATLAB 矩阵的表示
4.1矩阵的建立
(1)直接建立法
利用直接输入法建立矩阵: 将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔
(2)利用已建好的矩阵建立更大的矩阵
一个大矩阵可以由已经建立好的小矩阵拼接而成
(3)用实部矩阵和虚部矩阵构成复数矩阵
4.2冒号表达式
linspace 函数
a-b等分100个元素
4.3结构矩阵和单元矩阵
(1)结构矩阵
在实际应用中,经常会遇到不同类型的数据项组成的实体,例如一个学生的数据实体就包括了年龄,姓名,学号,这些数据是相互联系的。结构数据类型就可以把这些数据类型不同但逻辑上相关的数据组成一个有机的整体。
结构矩阵元素.成员名=表达式
例如: 学生这个结构数据包含三个成员,分别是年龄,姓名,学号,由结构数据构成的矩阵就是结构矩阵。结构矩阵里的每个元素都是结构数据类型的。即结构矩阵相当于一个班级,结构矩阵里的元素就是这个班级的学生,每个学生有年龄,姓名,学号三个信息(成员)。
(2)单元矩阵
单元数据类型,也是把不同的数据放在一个变量中,但与结构矩阵所不同的是,结构矩阵的各个元素下还有成员,每个成员都有自己的名字,而单元矩阵的各个元素就是不同类型的数据,每个元素直接由不同类型的数据组成。
矩阵中的元素是不同类型的元素,建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来
5.矩阵元素的引用
5.1矩阵元素的引用方式
(1)通过下标引用矩阵的元素
当下标中的行下标或列下标大于矩阵的行数或列数,则matlab中 将自动扩展原来的矩阵,并将扩展后没有赋值的元素,赋值为0
(2)通过序号来引用
- 在MATLAB中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列……直到矩阵的最后一列元素
- 矩阵元素的序号就是矩阵元素在内存中的排序顺序
- 序号与下标一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)×m+i
(3) sub2ind函数与ind2sub函数
矩阵元素的序号与下标可以利用 sub2ind 和 ind2sub 函数实现相互转换
sub2ind 函数
ind2sub函数:
(4)利用冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵
A(i,:) %第i行的全部元素
A(:,j) %第j列的全部元素
A(i:i+m,k:k+m) %第i~i+m行内且在第k~k+m列中的所有元素
A(i:i+m,:) %第i~i+m行的全部元素
(5)end 运算符
表示 某一维的末尾元素的下标
5.2删除矩阵中的元素
(1)利用空矩阵删除矩阵中的元素
空矩阵是指没有任何元素的矩阵
(2)改变矩阵的形状
reshape(A,m,n) : 在矩阵总元素保持不变的前提下,将矩阵A 重新排列m×n的二维矩阵
注意: reshape 函数 只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序
A(😃 : 将矩阵A的每一列元素都堆叠起来,成为一个列向量
6.MATLAB基本运算
6.1算术运算
(1)基本算术运算
+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)
- MATLAB的算术运算是在矩阵意义下进行的
- 单个数据的算术运算只是矩阵运算的一种特例
加减运算
- 若两矩阵同型,则运算时两矩阵的相应元素相加减
- 若两矩阵不同型,则MMATLAB将给出错误信息
- 一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算
乘法运算
- 矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容
- 如果两者的维数或大小不相容,则将给出错误信息,提示用户两个矩阵是不可乘的
除法运算
在MATLAB中,有两种矩阵除法运算:右除 / 和左除 \
如果在A矩阵是非奇异方阵 ,则 B/A 等效于 B*inv(A) ,A\B 等效于 inv(A) *B
奇异矩阵和非奇异矩阵都是针对方阵而言的。奇异矩阵是对应的行列式等于0的矩阵。非奇异方阵是对应行列式不为0的矩阵
对于矩阵来说,右除和左除表示两种不同的除数矩阵和被除数矩阵关系
乘方运算
一个矩阵的乘方运算可以表示A^x,要求A为方阵,x为标量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mQwwJbid-1641044600385)(C:\Users\25290\AppData\Roaming\Typora\typora-user-images\image-20220101120228485.png)]
(2)点运算
- 点运算: .* ./ .\ .^
- 两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型
例:
当x=0.1、0.4、0.7、1时,分别求Y=sinx cosx 的值
6.2关系运算
- 关系运算符:< <= > >= == ~=(不等于)
- 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0
- 当参与比较的量是两个同型矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成
- 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成
例:
建立3阶方阵A,判断A的元素是否为偶数
6.3逻辑运算
逻辑运算符:&(与) |(或) ~(非) (注意与c语言区别)
- a&b a、b全为非零时,运算结果为1,否则为0
- a|b a、b中只要有一个为非零时,运算结果为1
- ~a 当a为零时,运算结果为1;当a为非零时,运算结果为0
- 在算术运算、关系运算和逻辑运算中,算术运算的优先级最高,逻辑运算优先级最低,但逻辑非运算是单目运算,它的优先级比双目运算要高(单目是涉及一个元素的运算,双目是涉及两个运算)
- 若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成
- 若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成
例:
水仙花数是指各位数字的立方之和等于该数本身的三位正整数,求全部水仙花数
7.字符串处理
7.1字符串的表示
在MATLAB中,字符串是用单引号括起来的字符序列
-
将字符串当成一个行向量,在行向量中,每个元素对应一个字符
-
若字符串中的字符含单引号,则该单引号字符要用两个单引号来表示
-
建立多行字符串,形成字符串矩阵
要求各行字符数要相等(列数相等),如果不等,就要用空格调节各行长度,使之数目相等
例:
建立一个字符串向量,然后对该向量做如下处理:
- 取第1~5个字符组成的子字符串
- 将字符串倒过来重新排列
- 将字符串中的小写字母变成相应的大写字母,其余字符不变
- 统计字符串中小写字母的个数
7.2字符串的操作
(1)字符串的执行
eval(s) 它的作用是把参数字符串的内容作为对应的matlab 命令来执行,其中s为字符串
(2)字符串与数值之间的转换
- abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵
- char函数可以把ACSII码矩阵转换为字符串矩阵
(3)字符串的比较
字符串的比较有两种方法:利用关系运算符或字符串比较函数
关系运算符比较:
- 两个字符串里的每个字符依次按ASCII码值大小逐个进行比较,比较的结果是一个数值向量,向量中的元素要么是0,要么是1
- 当两个字符串的长度相等时,可以利用关系运算符比较
字符串比较函数:
用于判断字符串是否相等,如果相等,返回结果为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
(4)字符串的查找与替换
- findstr(s1,s2):返回短字符串在长字符串中的开始位置
- strrep(s1,s2,s3):返回字符串s1中的所有子字符串s2替换字符串s3