目录
1.1 ,matlab系统环境(略)
1.2 matlab数值数据
1.2.1数值数据类型分类
一、matlab基础知识
1.1 ,matlab系统环境(略)
1.2 matlab数值数据
1.2.1数值数据类型分类
(1) 数值数据类型的分类
-
整型
整型分为无符号整数和带符号整数,其中
无符号整数分为无符号8位整数、无符号16位整数、无符号32位整数和无符号64位整数
带符号整数分为带符号8位整数、带符号16位整数、带符号32位整数和带符号64位整数。
类 | 值的范围 | 转换函数 | 内存 |
---|---|---|---|
有符号8位整数 | -2^7~2^7-1 | int8 | 1字节 |
有符号16位整数 | -2^15~2^15-1 | int16 | 2字节 |
有符号32位整数 | -2^31~2^31-1 | int32 | 4字节 |
有符号64位整数 | -2^63~2^63-1 | int64 | 8字节 |
无符号8位整数 | 0~2^8-1 | unit8 | 1字节 |
无符号16位整数 | 0~2^16-1 | unit16 | 2字节 |
无符号32位整数 | 0~2^32-1 | unit32 | 4字节 |
无符号64位整数 | 0~2^64-1 | unit64 | 8字节 |
以int8和uint8为例:
将129通过int8函数转换结果位127,这是因为int8最大值为127(可以通过intmax/intmin查看取值范围,如下图)
-
浮点型
浮点型数据分为单精度型(single)和双精度型(double),单精度型实数在内存中占用4字节,二双精度型实数占用8字节,所以双精度型实数精度更高。
matlab默认的数据类型是双精度型。
single函数可以将其他类型函数转化成单精度型;
double函数可以将其他类型函数转化为双精度型。
-
复数型
复型数据包括实部和虚部,实部和虚部默认为双精度型,虚数用单位i/j表示
real 函数:求复数的实部
imag函数:求复数的虚部
1.2.2数值数据的输出格式
format命令格式:format+格式符,不同格式符使输出数据不同
(注意:format格式只影响数据的输出格式,不影响数据的计算和储存)
1.2.3常用数学函数
- 函数的调用格式
函数名(函数自变量的值)
函数的自变量规定为矩阵变量,也可以是标量,标量本身也是矩阵的一种特例。
函数在运算时是将函数逐项作用与矩阵的每一个元素上,所以最后运算的结果就是一个与自变量同型的矩阵。
- 常用函数的应用
(1)三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为函数就在函数名后加d,以示区别。
(2)abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。
(3)用于取整的函数有fix、floor、ceil、round。
round函数是按照四舍五入的方法来取整数;
ceil函数是向上取整数,取大于等于这个数的第一个整数;
floor函数是向下取整数,取小于等于这个数的第一个整数;
fix函数是取靠近0的那个书,即舍去小数取整。
(4)函数应用举例
分别求一个三位数的百位数、十位数、个位数
求[1:100] 间的所有素数
1.3 变量及其操作
1.3.1变量与赋值语句
变量本质上是内存单元的一个抽象。在matlab中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符,并且变量名区分大小写,其中标准函数名以及命令名一般用小写字母。
赋值语句有两种格式:
- 变量=表达式
- 表达式
将表达式的值赋给matlab预定义变量ans,变量结果会在命令行窗口显现出来。如果在赋值语句后面加分号,则matlab仅仅执行赋值操作,不会再显示运算后变量的结果
列子:
其中,abs函数是matlab绝对值函数,abs(x-y)表示的是| x- y |。
1.3.2预定义变量
预定义变量在matlab空间中驻留,由系统本身定义的变量
- ans 是默认赋值变量
- i 和 j 代表虚数的单位
- pi 代表圆周率
- NaN 代表非数(在绘图时,如果想裁掉一部分,可以把裁掉的部分坐标数据设定成非数)
预定义变量都有其特殊意义,在赋值时要避免对其赋值操作
1.3.3变量的管理
(1)内存变量的删除与修改
在工作区窗口,选择变量右击即可修改
who 与 whos 命令
(2) 内存变量文件
用于保存matlab工作区变量的文件叫做内存变量文件,其扩展名为.mat,也叫MAT文件。
save命令:创建内存变量文件;
load命令: 装入内存变量文件。
1.4 matlab矩阵的表示
1.4.1 矩阵的建立
(1)利用直接输入法建立矩阵:将矩阵的元素用中括号括起来,按矩阵行的顺序输入各种元素,同一行的元素用逗号或者空格隔开,不同行的元素用分号隔开。
(2)利用已经建好的矩阵建立更大的矩阵:一个大矩阵可以由已经建立好的小矩阵拼接而成。
(3)可以用实部矩阵和虚部矩阵构成复数矩阵。
1.4.2冒号表达式
(1)格式:e1 :e2 :e3
e1是初始值,e2是步长,e3是终止值
若省略e2步长,则步长默认值为1
(2)linspace函数
linspace(a,b,c)其中a为第一个元素,b为最后元素,c为元素总和
当c省略时会自动产生100个元素。
1.4.3结构矩阵和单元矩阵
(1)结构矩阵
由结构数据组成的矩阵就是结构矩阵,结构矩阵里的每一个元素就是结构数据类型。
格式为:结构矩阵元素.成员名=表达式
(2)单元矩阵
建立单元矩阵和一般矩阵类似,直接输入就可以,只是单元矩阵元素用大括号括起来。
1.5 矩阵元素的引用
1.5.1 矩阵元素的引用方式
(1)通过下标来引用矩阵元素
A(2,3)表示第三行第二列的元素
注意:如果给出的行下标或者列下标大于原来矩阵的行数和列数,那么matlab将自动扩展原来的矩阵,并且将扩展后没有赋值的元素置为0。
(2)通过序号来引用
- 在matlab中,矩阵元素按照列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,一直到最后一列元素。
- 矩阵元素的序号就是矩阵元素在内存的排列顺序。
矩阵与下标是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号就是(j-1)×m+i
例如:A(1,2)=2,所以其序号为(2-1)×2+1=3,因此A(3)=2
注意:矩阵元素的序号和下标可以通过sub2ind和ind2sub函数进行转换
- sub2ind函数:将元素中指定元素的行列下标转换成存储的序号。
调用格式为:D=sub2ind(S,I,J)
其中:D为序号;S为行数和列数组成的向量,可用size(A)获得;I为转换矩阵的行下标;J为转换矩阵的列下标;如果I和J是矩阵,则表示要将矩阵中的多个元素的行列下标转换成存储的序号。
sub2ind函数举例:
- ind2sub函数:将把函数元素的序号转换成对应的下标,其调用格式为:
[ I , J ] = ind2sub( S , D )
其中I为行下标,J为列下标,S为行数和列数组成的向量,D为序号
注意: sub2ind函数和ind2sub函数是一对互逆函数,sub2ind函数将下标转换成索引,ind2sub函数将索引转换成下标。
ind2sub函数举例:
1.5.2 利用冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵。
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行所有元素
end运算符:表示某一维的末尾元素下标
1.5.3 利用空矩阵删除矩阵元素
空矩阵是没有任何元素的矩阵
X就是一个空矩阵
1.5.4 改变矩阵形状
reshape(A,m,n) :在矩阵元素保持不变的情况下,将矩阵A重新排列成m×n的二维矩阵
注意:reshape函数只改变原矩阵的行数和列数,但不改变原矩阵的元素个数及其存储顺序。
A(:) : 将矩阵A的每一列元素全部堆贴起来,转换成一束列向量
A(:)等价于reshape(A,9,1)
1.6 MATLAB基本运算
1.6.1算数运算
(1)基本算数运算
基本算数运算符:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。
- MATLAB算数运算是在矩阵意义下进行的。
- 单个数据的算数运算只是矩阵运算的一种特例。
注意:MATALB的运算是在矩阵意义下进行的,单个数据的算数运算只是矩阵运算的一种特例。
加减运算
- 若两矩阵同型,则运算时两矩阵的相应元素相加减
- 若两矩阵不同型,则MATLAB会报错
- 一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减
乘法运算
- 矩阵A和B进行乘法运算,要求A的列数和B的行数相等,此时则A和B可乘的,或称两个矩阵维数和大小相容
- 如果两个矩阵的维数和大小不相容,则给出错误信息,提示两个矩阵不可乘
除法运算
在MATLAB中,有两种矩阵除法运算:右除/和左除\。
如果矩阵A是非奇异矩阵,则B/A等效于B*inv(A),A\B等效于inv(A)*B,inv()函数为MATLAB求逆函数。
对于矩阵来说,右除和左除代表两种不同的除数矩阵和被除数矩阵关系。
/ 右除:a/b表示矩阵a乘以b的逆:
\ 左除 : a\b 表示矩阵a的逆乘以b
对于含有标量的运算,左除和右除的效果一样
乘方运算
一个矩阵的乘法运算可以表示成A^x,要求A为方阵,x为标量
(2) 点运算
- 点运算符号: .* ./ .\ 和 .^
- 两矩阵进行点运算是指它们对应的元素进行相关运算,要求两矩阵同型。
例子:
1.6.2关系运算
- 关系运算符:<(小于) 、<=(小于等于) 、>(大于) 、>=(大于等于) 、 ==(等于) 、~=(不等于)。
注意: = 是赋值,而==表示是否等于的意思
- 当两个比较量是标量时,直接比较两个数大小。若关系成立,关系表达式结果为1,否则为0。
- 当参与比较的量是两个同型的矩阵时,比较的是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,他的元素有0或1构成
- 当参与比较的一个是标量,而另外一个是矩阵时,则把标量与矩阵的每一个元素按照标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,他的元素是由0或1构成。
例子:判断矩阵A的元素是否为偶数
1.6.3逻辑运算
逻辑运算符:&(与)、|(或)和~(非)。
设参与逻辑运算的是两个标量a和b,那么运算规则为:
- a&b a、b全为非零时,结果运算为1.否则为0
- a | b a、b中只要一个为非零时,结果运算为1
- ~ a 当a为0时,运算结果为1;当a为非零时,运算结果为0。
注意: 在算数运算、关系运算 和 逻辑运算中,算数运算的优先级最高,逻辑运算优先级最低。但逻辑运算是单目运算,它的优先级比双目运算要高。(单目运算是指运算所需变量为一个的运算符,双目运算符就是对两个变量进行操作)
- 若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按照标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。
- 若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个与矩阵同型的矩阵,其元素由1或0组成。
例子:求水仙花数(各位数字的立方之和等于该数本身的三位正整数)
1.7 字符串处理
1.7.1 字符串的表示
(1)在MATLAB中,字符串是用单引号括起来的字符序列
(2)若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示
(3)建立多行字符串,形成字符串矩阵。因为是矩阵,要求各行字符数要相等,也就是列数相同,当各行字符数不相等时,就要用空格调节各行的长度,使他们的列数彼此相同。
(4)例子:建立一个字符串向量,然后对该向量做如下处理:
- 取1~5个字符组成的子字符串
- 将字符串倒过来重新排列
- 将字符串中的小写字母变成相应的大写字母,其余字符不变
- 统计字符串中小写字母的个数
1.7.2 字符串的操作
(1)字符串的执行
格式: eval(s)
其中,s是字符串
(2)字符串与数值之间的转换
- abs 和double 函数都可以用来获取字符串矩阵所对应的ASCII数值矩阵
- char 函数可以把ASCII码矩阵转换为字符串矩阵
(3)字符串的比较
字符串比较有两种方法:利用关系运算符或字符串比较函数。
- 关系运算符比较:两个字符串里的每个字符依次按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.
(4)字符串的查找与替换
- findstr(s1,s2):返回短字符串在长字符串中的开始位置。
- strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3。