MATLAB 基础知识
1. MATLAB 是什么?
在数学计算中,我们一些简单的运算如加、减、乘、除、开放等或者较为复杂的运算如三角函数、积分、多项式求根等都可以通过人工手算出来,而当需要求解的问题变得复杂而用传统数学方法无法求出精确解时,如求定积分可能无法求得被积函数的原函数、对于超越方程求其精确解时,就可以利用计算机即快速又精确地求解。
MATLAB(MATrix LABoratory 矩阵实验室) 是一种科学计算软件,它擅长于矩阵运算,语法简单,且集成有许多领域专家为各自领域开发的工具箱,直接调用即可。这样就为各个领域的人们提供了很大的便利,人们无需有很强的数学专业知识和计算机专业知识,就可以直接使用 MATLAB 来专注于实际问题的分析和设计,大大提高了工作效率和质量。
MATLAB 的主要功能是:数值计算、符号计算、图形绘制、程序流程控制和为各个领域提供的工具箱。
2. MATLAB 的搜索路径
3. MATLAB 数值类型
(1)整型
- int8 函数将数值数据转换为带符号8位整数
- uint8 函数将数值转换为无符号8位整数
(2)浮点型
单精度型实数在内存中占用4个字节,双精度型实数在内存中占用8个字节。MATLAB 中数值数据默认是双精度型。
- single 函数将其他类型的数据转换为单精度型
- double 函数将其他类型数据转换为双精度型
(3)复型
复型数据包括实部和虚部两个部分,实部和虚部默认为双精度型,虚部单位用 i 或 j 来表示。
- real 函数求复数的实部
- imag 函数求复数的虚部
format:数值数据的输出格式
format 格式符
例:>>format long
常用数学函数格式
函数名(函数自变量的值):函数自变量规定为矩阵变量,当然也可以是标量,标量本身是矩阵的一种特例。
常用函数的应用:
- 三角函数有以弧度为单位和以角度为单位的函数。如果以角度为单位的函数就在函数名后面加“ d ”(degree 的缩写),以示区别。如 >>sin(pi/2) 和 >>sind(90).
- abs 函数可以求实数的绝对值、负数的模、字符串的 ASCII 码值。
- 用于取整的函数有fix、floor、ceil、round。
① round 函数按照四舍五入的规则取整。
② ceil 函数是按向上取整,取大于等于这个数的第一个整数。
③ floor 函数是向下取整,取小于等于这个数的第一个整数。
④ fix 函数是固定取靠近 0 的那个整数,即舍去小数取整。
4. 变量与赋值
(1)变量
- 变量名区分字母大小写。
- 标准函数名以及命令名必须用小写字母。
(2)赋值
- 变量 = 表达式
- 表达式(将表达式的值赋给 MATLAB 中的预定义变量 ans)
如果在表达式后面加 ‘ ; ’,则 MATLAB 直接赋值,不会输出结果。
(3)预定义变量
- ans 是默认赋值变量;
- i 和 j 代表虚数单位;
- pi 代表圆周率;
- NaN 代表非数(Not A Number,当数据缺失或绘图时挖掉一部分时用)
(4)变量管理
① 工作区窗口右键可以修改变量值;
② 输入命令:
who :显示变量名称
whos :显示变量名称、大小、字节数、数据类型
③ 可以保存 MATLAB 工作区变量的文件即内存变量文件(.mat)。
save :创建内存变量文件
例:save mydata a x 将 a 和 x 的数据保存在mydata.mat 文件中
load :装入内存变量文件
例:load mydata 将 mydata 中的数据载入到 MATLAB 中
5. MATLAB 矩阵的表示
(1)矩阵的建立
① 直接法:矩阵中元素用 中括号 [ ] 括起来,同一行之间用 逗号 或 空格 分隔,不同行元素用 分号 ; 分隔。
② 间接法:利用已建好的矩阵建立更大的矩阵。
③ 复数矩阵:可以用实部矩阵和虚部矩阵构成。
④ 行向量
a.冒号表达式:在 MATLAB 中可以用冒号表达式表示 行向量,如下图。如果省略 e2,则步长为 1。
b.linspace 函数,调用格式如下图。当 n 省略时,自动产生 100 个元素。
(2)结构矩阵
格式:结构矩阵元素.成员名=表达式
(3)单元矩阵
建立单元矩阵和一般矩阵相似,只是单元矩阵元素用 大括号 {} 括起来。
6. 矩阵元素的引用
(1)通过下标来引用
A(3,2) 表示 A 矩阵第3 行第 2 列的元素。可以通过命令 >>A(3,2)=200 来赋值。
注意:如果行下标或列下标大于原来矩阵的行数或列数,MATLAB 会自动扩展矩阵,并对未赋值的元素置零。
(2)通过序号来引用
在 MATLAB 中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素…… 矩阵元素的序号就是矩阵元素在内存中的排列顺序。序号与下标一一对应的,以 m×n 矩阵 A 为例。矩阵元素 A(i,j) 的序号为 (j-1)×m+i 。
矩阵元素的序号与下标可以利用 sub2lind 和 ind2sub函数 实现相互转换。
sub2ind:将矩阵中指定元素的行、列下标转换成存储的序号。
ind2sub:将矩阵元素的序号转换成对应的下标。
(3)通过冒号表达式获得子矩阵
子矩阵是指矩阵中的一部分元素构成的矩阵。
end:表示某一维的末尾(末行或末列)元素下标。
7. 改变矩阵
(1)利用空矩阵删除矩阵的元素
空矩阵是指没有任何元素的矩阵。如 >>x=[] 。
(2)改变矩阵的形状
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵 A 重新排成 m × n 的二维矩阵。(注意:reshape 函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储结构)
A( : ):将矩阵 A 的每一列元素堆叠起来,成为一个列向量,等价于 reshape(A,m×n,1)。
8. MATLAB 基本运算
MATLAB 中的算术运算都是在矩阵意义下进行的。单个数据的算术运算只是矩阵运算的一种特例。
(1)算术运算
① 基本算术运算
基本算术运算符:+(加)、-(减)、*(乘)、/(右除)、(左除)、^(乘方)。
-
加减运算
若两矩阵同型,则运算时两矩阵的相应元素相加减;否则,MATLAB 给出错误信息。
一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。 -
乘法运算
要求 A 的列数与 B 的行数相等,此时则称 A、B 矩阵是可乘的,或称 A、B 两矩阵维数和大小相容;否则,MATLAB 给出错误信息。 -
除法运算
在 MATLAB 中,有 右除/ 和 左除\ 之分。对于矩阵来说,右除和左除表示两种不同的除数矩阵和被除数矩阵关系。
如果 A 矩阵是非奇异方阵(|A|≠0),则 B/A 等效于 B*inv(A),A\B 等效于 inv(A)*B。
inv():inv 是求逆矩阵函数。
- 乘方运算
一个矩阵的乘方运算可以表示成 A^x,要求 A 为方阵,x 为标量。
② 点运算
点运算符:.*(点乘)、./(点右除)、.\ (点左除)、.^(点乘方)。
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。如下图,拿矩阵的点乘和乘法运算为例,点乘是各个相应元素的乘法,而乘法则是矩阵乘法之间的运算。
(2)关系运算符
关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。
当两个比较量是标量时,直接比较两数大小。若成立,表达式为 1,否则为 0;当参与比较的是两个同型矩阵时,比较是对两矩阵相同位置元素按标量关系规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由 0 或 1 组成。
(3)逻辑运算
逻辑运算符:&(与)、|(或)、~(非)。
若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行处理,最终运算结果是一个与原矩阵同型的矩阵,其元素由 1 或 0 组成。
优先级:在算术运算、关系运算和逻辑运算中,算术运算的优先级最高,逻辑运算优先级最低,但逻辑非运算是单目运算,它的优先级比双目运算更高。
9. 字符串处理
(1)字符串的表示
在 MATLAB 中,字符串是用单引号括起来的字符序列。
若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。如 >>‘I’‘m a teacher.’ 则输出 ans=I’m a teacher.
可以建立多行字符串,形成字符串矩阵。如 >>ch=[‘abcdef’;‘123456’];
这里举个例子来加深对字符串的理解,如下图所示:
(2)字符串的操作
- 字符串的执行
evla(s):把 参数 s 字符串作为命令执行。
- 字符串与数值之间的转换
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 和 s2 是否相等,如果相等,返回 1,否则为 0.
strncmpi(s1,s2,n):在忽略字母大小写前提下,比较字符串前 n 个字符是否相等,如果相等,返回 1,否则为 0.
- 字符串的查找与替换
findstr(s1,s2):返回短字符串在长字符串中的开始位置。
strrep(s1,s2,s3):将字符串 s1 中所有子字符串 s2 替换为字符串 s3.