前言
本文是学习郭老师的MATLAB教程过程中所做的笔记。本章笔记属于MATLAB基础,内容较杂,但都很重要。
郭彦甫老师上课使用的版本:MATLAB R2014a
我学习时使用的版本:MATLAB R2022b
界面窗口组成:
-
current folder-当前文件夹
-
command window-命令行窗口
-
workspace(存放variable变量)-工作区
-
command history-历史命令
编程模式有2种:
-
command line(in command window)-命令行(在命令行窗口内)
-
Scripts(.m files)-脚本(.m文件)
一、MATLAB as A Calculator-MATLAB作为计算器(直接在命令行窗口输入)
1.基本运算
-
运算符号:+、-、*、/、^
-
按下Enter计算结果,显示为:ans
-
运算规则:
-
1.从左到右
-
2.运算优先级为(依次下降):
-
(1)括号()
-
(2)次方^
-
(3)乘法和除法*、/
-
(4)加法和减法+、-
-
Exercise-练习
cos(((1+2+3+4)^3/5)^0.5)
备注:学会查找MATLAB对应指令,如查询三角函数sin的MATLAB指令:
1.在浏览器搜索框键入“MATLAB sin”。(online help)
2.在MATLAB内部也可以搜索,在软件界面右上角搜索框输入“sin”即可。
3.在命令行窗口输入“help sin”后按Enter,会出现简短的文字信息。
sin(sqr(pi))+log(tan(1))
2^(3.5*1.7)
exp(sin(10)
2.Embedding Functions-嵌入函数
-
当函数成分很复杂时,可以将部分嵌入到其他函数中:
例如
如下所示,
- 多行代码可以压缩到一个命令当中。
3.Variables-变数(变量)
-
变量不需要在赋值前进行说明(宣告)。
说明(宣告):表明变量的形态是int、single、double或char等等。
-
单个“等号”(=) 是赋值运算符:
如下所示,
但是,
所以我们可知:不能把变量指定给(赋给)一个实数,因为这个实数永远不会等于这个变量,实数是固定的不会改变。
思考(自行尝试):
1.大写和小写不同吗?
(如A=10,a=20)
2.变量名称能够以数字开头吗,可以包含数字吗?
(如2A=10,A2=10)
4.Numeric Variable (Data) Type-数值变量(数据)类型
-
变量不被说明,而直接使用时,默认数据类型为double
(1)双击工作区内的名称A,出现下图。
(2)命令行窗口输入who、whos
double是一个64位(64bits)(=8个字节(8Bytes)的储存位置,里面可以储存floating point浮点运算的数值。
若要足够精准地储存一个小数,使用double是没有问题的。
5.Special Variables and Constants-特殊变量和常量
-
ans:答案answer
-
i,j:复数complex number
-
Inf:无穷大∞
-
eps:很小很小的数2.2204e-016
-
NaN:不是一个数值not a number
-
pi:圆周率π
上述名称不能作为变量名。
此外, 下列keywords的名称也都不能当做变量名,否则会发生混乱:
下图是发生混乱的一个例子:欲计算cos(8),但先令变量名为cos,将字串This String.指定给变量cos,然后cos(8)得到了变量cos第8个位置r:
而实际上cos为余弦函数,-1<cos(8)<1,应当得到一个实数。首先使用clear cos清除工作区中的变量cos,然后执行cos(8),得到正确结果:
此时注意“clear+变量名”可以清除工作区的某个变量,而“clear all”则会清空工作区。
所以也不能用built-in function内置函数的名称当做变量名。
6.MATLAB Calling Priority-MATLAB调用优先级
因此,注意下面的MATLAB调用优先级:
对应中文如下表所示:
名称 | 优先级 |
---|---|
变量 | 1 |
内置函数 | 2 |
子函数 | 3 |
私有函数:mex文件>p文件>m文件 | 4 |
7.Numeric Display “Format”-数字显示“格式”
我们都知道π=3.14159265…,但是在MATLAB里
只显示到了小数点后第四位。如果先输入format long,再输入pi,那么会显示到小数点后第15位:
下面表格总结了7种数字显示“格式”:
Style | Result | Example |
---|---|---|
short | 短,固定十进制格式,小数点后有 4 位数字。 | 3.1416 |
long | 长,固定十进制格式,小数点后有 15 位数字表示双精度值,单精度值为小数点后 7 位数字。 | 3.141592653589793 |
shortE | 简短的科学记数法,小数点后有 4 位数字。 | 3.1416e+00 |
longE | 长科学记数法,小数点后有 15 位数字表示双精度值,单精度值为小数点后 7 位数字。 | 3.141592653589793e+00 |
bank | 小数点后有 2 位数字的货币格式。 | 3.14 |
hex | 二进制双精度数的十六进制表示形式。 | 400921fb54442d18 |
rat | 小整数的比率 | 355/113 |
Exercise-练习
- 计算加式结果的不同显示格式:分别用rat和long显示,
所以答案是选项1和选项d。
8.Command Line Terminal-命令行终止符
观察下面两条指令的不同
当在指令后加上分号;时,MATLAB不会显示运算结果,尤其在指令过多可以减少不必要的麻烦,如下
使用上下方向键可以调出历史命令
9.Some Functions-一些重要指令
-
clc:清除命令行窗口的显示内容
-
clear:清除工作区的所有变量
-
who:显示工作区的变量名称
-
whos:显示工作区的变量信息
二、Array(Vector and Matrix)-数组(向量和矩阵)
1.向量和矩阵
矩阵和向量在MATLAB里一般都用中括号[ ]表示。
例如,行向量A = [1 2 3 4],包含1,2,3,4四个元素,用空格隔开;列向量B = [1;2;3;4],包含包含1,2,3,4四个元素,用分号隔开(分号起换行的作用)。
则,两向量内积应为
两向量外积应为
尝试输入下面这个矩阵:
答案:
2.Array Indexing-数组索引(很重要,写程式时常用)
数组索引的意思是访问数组中特定元素的数字。
若欲访问上图矩阵A中的21,方法有两种:
- A(1,2):对应矩阵A的第1行,第2列的元素。
2. A(4):对应矩阵A的第4个元素(按从上往下,从左往右的顺序数)。
思考下面指令对应的答案是什么?
答案:
注意:对于A([1 3],[1 3]):逗号前的[1 3]表示第1行和第3行,逗号后的[1 3]表示第1列和第3列,然后取行列相交的处的元素,即[1 6;31 7]。
3.Replacing Entries-取代某位置的某数值
使用上节所学,改变矩阵A中的下列元素:
则
此外,我顺便尝试了
4.Colon Operator-冒号运算符
想要创建一个长矩阵:A = [1 2 3 … 100],不可能逐字输入,可以使用A = [1 : 100],1为第一个数,100为最后一个数,等差为1。
所以冒号运算符可以用于创建等差数列。
若要求B = [1 3 5 … 99],则可以使用B = [1:2:99],1为第一个数,99为最后一个数,等差为2。
冒号运算符语法:
Exercise-练习(并思考为什么):
答案:
所以冒号运算符也可以和str一起用。
首先我们知道A( 1 , 2 )表示A的第1行第2列的位置,把2换成冒号:,则A( 1 , : )表示A的第1行所有列,此时冒号:起到了indexing索引的作用,表示全部。
所以使用A ( 3 , : )访问到A的第三行。
然后
这里的[ ]表示为空,即令A的第3行为空,就删除了A的第三行。同理可以使用A( )=[ ]删除任意行和任意列。
5.Array Concatenation-数组串联(数组连接)
只要能够保留相应的矩形形状,就可以通过串联形成数组(向量和矩阵)。
此外,思考[ A ; B ]的结果应当是什么?
答案:
Exercise-练习:
-
如下,创建矩阵A,B,C,D并把他们串联成矩阵F。
答案:
首先创建矩阵A、B、C、D,
然后进行串联,
或者
6.Array Manipulation-数组操作(四则运算)
数组运算符包括表格中的7种:
+ | - | * | / |
---|---|---|---|
^ | . | ’ |
若
输入下列指令,观察结果:
-
A+B为矩阵加法,A*B为矩阵乘法,这里不再赘述。
-
A.*B为点乘,即对应位置元素相乘,即结果为:
-
注意,矩阵没有除法,A/B表示A*(B的逆矩阵),即A*inv(B),其中inv(B)表示B的逆矩阵(与B^(-1)等效)。
-
A./B为点除,即对应位置元素相除,即结果为:
那么矩阵A和实数a的运算呢?
-
A+a表示把矩阵A的每个位置上的元素都加上实数a,即
-
A/a就是把A的每个位置上的元素都除上实数a。
-
A./a为A点除a,因为a为实数,所以结果和A/a一样,把A的每个位置上的元素都除上实数a。
-
A^a表示A的a次方,即A的二次方,即A*A。
-
A.^a就是把A的每个位置上的元素都取a次方,即
最后,单引号又是做什么运算呢?
A’表示矩阵A的转置,简单来说就是对角线元素不变,将其他元素以对角线为对称轴做对称交换,可自行搜索了解转置的概念。
下表总结了常见的四则运算:
Symbol | Operation | Form | Examples |
---|---|---|---|
+ | 标量数组加法 | A+b | [6,3]+2=[8,5] |
- | 标量数组减法 | A-b | [8,3]-5=[3,-2] |
+ | 数组添加 | A+B | [6,5]+[4,8]=[10,13] |
- | 数组减法 | A-B | [6,5]-[4,8]=[2,-3] |
* | 矩阵乘法 | A*B | [3,5]*[4,8]'=52 |
.* | 数组乘法 | A.*B | [3,5].*[4,8]=[12,40] |
./ | 数组右除法 | A./B | [2,5]./[4,8]=[2/4,5/8] |
.\ | 数组左除法 | A.\B | [2,5].\ [4,8]=[4/2,8/5] |
.^ | 数组取幂 | A.^B | [3,5].[2,4]=[32,5^4] |
7.Some Special Matrix-一些特殊矩阵
-
linspace():线性间隔向量。
-
eye(n):nxn的单位矩阵。
-
zeros(n1,n2):n1xn2的零矩阵。
-
ones(n1,n2):n1xn2的矩阵,且每个位置的元素都是1。
-
diag():对角矩阵。
-
rand():均匀分布的随机数。
8.Some Matrix Related Functions-一些矩阵相关函数
若
则输入下列指令,观察结果:
-
max():找到每列的最大数。
如上,max(A)给出了每一列最大的数,每次对列做运算。
max(max(A)):找到矩阵中的最大数。
-
min(A):找到每列的最小数。
-
sum(A):对每列求和。
-
mean(A):对每列求平均。
-
sort(A):对每列元素进行升序排列。
-
sortrows(A):默认基于第一列中的元素按升序对矩阵行进行排序。详见帮助文档。
-
size(A):返回矩阵A的维度(行数和列数)。
-
length(A):返回矩阵A中最大数组维度的长度。对于向量,长度仅仅是元素数量。对于具有更多维度的数据,长度为 max(size(A))。空数组的长度为零。
-
find(A):返回A中非零元素的索引和值。详见帮助文档。
注意,括号内为两个==,是关系运算符。
总结
本章笔记由MATLAB作为计算器直接在命令行窗口输入和MATLAB的数组(向量和矩阵)知识这两个部分组成,内容虽然比较杂但是十分重要。
之后陆续上传后面章节的笔记和PDF版本,欢迎关注。
我最常用的写作开源软件Marktext的介绍、下载、安装与设置
MATLAB教学__01学习导览
MATLAB教学__02MATLAB as A Calculator and Array Operation-计算器与矩阵操作
MATLAB教学__03Script Writing,Structured Programming and User-defined Function-撰写脚本,结构化编程和用户自定义函数