MATLAB 基础知识
系统环境
- 续行符
...
- 设置当前文件夹
cd D:\_My_program\MatlabProjects
- 或者在地址栏选择
- 搜索路径
- 变量优先于关键字(重名时)
- 程序文件的搜索先在当前文件夹中,再在文件搜索路径的文件夹中
- 设置文件搜索路径
path(path, 'D:\_My_program\MatlabProjects')
- 或者点击工具栏的主页 → 设置路径
- 当在命令行窗口执行命令时,如果不想立即在命令行窗口中输出结果,可以在命令后加上分号
数值数据
不同类型具有不同的存储空间和表示范围(精度)
整型
无符号整数
无符号8位整数、无符号16位整数、无符号32位整数、无符号64位整数。带符号整数
带符号8位整数、带符号16位整数、带符号32位整数、带符号64位整数。类型转换函数
浮点型
- 单精度型(4字节)、双精度型(8字节)
- 数值数据默认类型是双精度型
single()
函数:将其他类型的数据转换为单精度型;double()
函数:将其他类型的数据转换为双精度型。
复数型
- 实部和虚部默认为双精度型,虚数单位用 i 或 j 来表示
real()
函数: 求复数的实部;imag()
函数: 求复数的虚部
输出格式
format 格式符
- format命令只影响数据输出格式,而不影响数据的计算和存储
常用数学函数
- 函数在运算时是将函数逐项作用于矩阵的每个元素上,最后运算的结果是一个与自变量同型的矩阵
- 三角函数一般以弧度为单位,如果是以角度为单位,需在函数名后面加“ d”,以示区别
abs()
可以求实数的绝对值、复数的模、字符串的ASCII码值- 取整函数
round()
是按照四舍五入的规则来取整。ceil()
是向上取整,取大于等于这个数的第一个整数。floor()
是向下取整,取小于等于这个数的第一个整数。fix()
是固定取靠近0的那个整数,也就是舍去小数取整。
rem()
取余,rem(365, 10)
isprime()
判断是否是素数- 简单的函数示例
变量及其操作
- 变量名是以字母开头,后接字母、数字或下画线的字符序列,最多63个字符
- 变量名区分字母的大小写
- 标准函数名以及命令名必须用小写字母
- 预定义变量是在MATLAB工作空间中驻留, 由系统本身定义的变量
- ans 是默认赋值变量
- i 和 j 代表虚数单位
- pi 代表圆周率
- NaN 代表非数
- 工作区用于管理变量
who
、whos
命令可列出变量信息- 用于保存MATLAB工作区变量的文件叫做内存变量文件, 其扩展名为.mat,也叫MAT文件
save mydata a x
:将变量 a、x 保存在 mydata 中load mydata
:直接使用 mydata 中的变量
矩阵的表示
建立矩阵
- 无需对矩阵的类型和维数进行说明
- 将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素
- 同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔
A = [1,2,3;4,5,6;7,8,9]
- 一个大矩阵可以由已经建立好的小矩阵拼接而成(类似于分块矩阵)
建立行向量
- 冒号表达式
e1:e2:e3
- e1 为初始值(包含在内),e2 为步长,e3为中止值(包含在内)
- 步长缺省为1
linspace(a,b,n)
- a 为第一个元素,b 为最后一个元素,n 为元素总数
- 总数缺省为100
- 产生的是等差数列
含多种类型元素的矩阵
- 结构矩阵
- 结构矩阵里的每个元素就是结构数据类型
- 格式为:结构矩阵元素.成员名=表达式
a(1).x1=10; a(1).x2='liu'; a(1).x3=[11,21;34,78];
a(2).x1=12; a(2).x2='wang'; a(2).x3=[34,191;27,578];
- 单元矩阵
- 各个元素可以是不同的类型
- 单元矩阵元素用大括号括起来
b= {10,'liu',[11,21;34,78];12,'wang',[34,191;27,578]}
矩阵元素的引用
引用方式
- 通过下标来引用矩阵的元素
A(3,2)
表示A矩阵第3行第2列的元素- 如果越界,将自动扩展原矩阵,并将扩展后未赋值的元素置为0
- 通过序号来引用
- 矩阵元素按列存储
- 矩阵元素的序号就是矩阵元素在内存中的排列顺序
A=[1,2,3;4,5,6]
,A(3)为2
- 序号与下标是一一对应的,以 m×n m × n 矩阵 A 为例,矩阵元素 A(i,j) A ( i , j ) 的序号为 (j−1)×m+i ( j − 1 ) × m + i
sub2ind()
- 将矩阵中指定元素的行、列下标转换成存储的序号。
- 调用格式为:
D=sub2ind(S,I,J)
- D 为序号,S 通常为
size()
函数,I 为转换矩阵的行下标,J 为转换矩阵的列下标 - D、I、J 为同型矩阵
ind2sub()
- 将把矩阵元素的序号转换成对应的下标
- 其调用格式为:
[I,J]=ind2sub(S,D)
子矩阵
利用冒号表达式获得子矩阵
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
运算符: 表示某一维的末尾元素下标
空矩阵
X = []
- 可用于删除元素
改变矩阵形状
reshape(A,m,n)
- 将矩阵重新排成 m×n m × n 的二维矩阵
- 只改变原矩阵的行数和列数,不改变原矩阵元素个数及其存储顺序
A(:)
- 将矩阵A的每一列元素堆叠起来,成为一个列向量
- 亦可通过
reshape()
实现
基本运算
MATLAB的运算是在矩阵意义下进行的,单个数据的算术运算只是矩阵运算的一种特例
算数运算
- 一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算
- 加减运算中的矩阵必须同型
- 矩阵A和B进行乘法运算,要求A的列数与B的行数相等
- MATLAB中有两种矩阵除法运算
- 右除/ 和左除\(结果一般不相等)
- 如果A矩阵是非奇异方阵,则
B/A
等效于B*inv(A)
,A\B
等效于inv(A)*B
inv()
为矩阵的逆
- 一个矩阵的乘方运算可以表示成
A^x
,要求A为方阵, x为标量 - 点运算
- 点运算符:
.*
、./
、.\
和.^
- 两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型
- 点运算符:
关系运算
关系运算符
<(小于)、 <=(小于或等于)、 >(大于)、 >=(大于或等于)、 ==(等于)、~=(不等于)当参与比较的量是两个同型的矩阵时
比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的零一矩阵。当参与比较的一个是标量,而另一个是矩阵时
则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。判断矩阵元素是否为偶数
逻辑运算
- 逻辑运算符: &(与)、 |(或) 和 ~(非)
- 若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。
- 若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个与矩阵同型的矩阵,其元素由1或0组成
字符串处理
- 用单引号括起来的字符序列
- 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示
- 字符串矩阵
ch=['abcdef';'123456'];
- 字符串倒置
revch=ch(end:-1:1)
字符串与数值的转换
abs()
和double()
都可以用来获取字符串矩阵所对应的ASCII码数值矩阵char()
函数可以把ASCII码矩阵转换为字符串矩阵
字符串的比较
关系运算符比较:
两个字符串里的每个字符依次按ASCII值大逐个进行比较,比较的结果是一个数值向量,向量中的元素要么1,要么是0字符串比较函数
strcmp(s1,s2)
用来比较字符串s1和s2是否相等,如果相等,回结果为1,否则返回0。strncmp(s1,s2,n)
用来比较两个字符串前n个字符是否相等如果相等,返回1,否则返回0。strcmpi(s1,s2)
在忽略字母大小写前提下,比较字符串s1和s是否相等,如果相等,返回1,否则返回0。strncmpi(s1,s2,n)
在忽略字符串大小写前提下,比较两个字串前n个字符是否相等,如果相等,返回1,否则返回0
其他函数
eval(s)
,把字符串 s 当作MATLAB命令来执行findstr(s1,s2)
:返回短字符串在长字符串中的开始位置。strrep(s1,s2,s3)
:将字符串s1中的所有子字符串s2替换为字符串s3。