MATLAB笔记
1. 基础
1.1 重要cmd
clc
清空命令行clear
清空工作区
help 函数名
查函数使用教程
doc 函数名
查官方文档
1.2 语法
1.2.1 算术运算符
符号 | 作用 |
---|---|
+ 和- |
矩阵中只要兼容就可加,五种兼容模式:大小相同、一方为标量常数、行数相同列向量、列数相同行向量、列向量+- 行向量 |
* 和.* |
* 就是正常的矩阵乘法,.* 是对应元素相乘 |
/ 和\ 和.\ |
/ 左除(求A*x=B 的x ),\ 右除,.\ 对应元素相除 |
^ 和.^ |
^ 矩阵幂运算,.^ 对应元素幂运算 |
1.2.2 关系运算符:
==、~=(不等于)、>、<、>=、<=,对于矩阵符合兼容模式算法,返回logical元素矩阵
1.2.3 逻辑运算符
(and())&、(or())|、(not())~、xor()(比较逻辑值,比如xor(3,4)结果为0),对于矩阵符合兼容模式算法,返回logical元素矩阵
&&、||与&、|相同但只用于标量且具有短路功能
1.2.4 数学运算函数
函数名 | 作用 |
---|---|
abs | 绝对值 |
floor | 往小舍 |
fix | 去小数部分 |
ceil | 往大入 |
round | 四舍五入 |
mod | 模 |
sqrt | 开方 |
exp | e的几次 |
log | 以e为底数 |
log2() | 以2为底数 |
三角函数名 | 对应的三角函数(可以在三角名后加d表示用角度制),反三角则是a+三角函数 |
1.2.5 判断浮点数相同
e.g.
1 | C=0.5-0.4-0.1; |
1 | C=0.5-0.4-0.1; |
1.3 矩阵
1.3.1 创建矩阵
-
A=[a,b,c]
创建行向量(,可换空格) -
A=[a;b;c]
创建列向量(;可换换行) -
A=[a b c;e f g]
创建多维矩阵 -
A=a:b:c
,即从a到c,步长为b的矩阵 -
用函数
1.3.2 索引
MATLAB索引从1开始。引用格式:
-
A(row_ind,col_ind)
-
A([a,b,c...])
-
A(a:b:c)
(索引多个数据用) -
用end关键字
-
A(:,a)
返回第a列所有元素 -
A(A>0)
返回A中大于0的元素(逻辑值引用) -
linspace()
1.3.3 修改删除元素
-
A(1)=0
-
A(a:b:c)=[]
注意左右元素个数要相等 -
A(a:b:c)=x
将所有选中索引全修改为一个常数 -
A(...)=[]
删除
1.3.4 矩阵相关函数
函数名 | 作用 |
---|---|
linspace(a,b,n) | 创建a到b共n个元素的矩阵,等差分布,n默认100 |
logspace(a,b,n) | 创建10^a 到10^b共n个元素的矩阵,等比分布,n默认50 |
zeros(n) | 创建n行n列的全0矩阵 |
ones(n) | 创建n行n列的全1矩阵 |
eye(n) | 创建单位矩阵 |
length | 数组最大维度的长度 |
numel | 返回矩阵元素个数 |
rand(m,n) | 创建m行n列的均匀分布于0到1的矩阵,m可缺省 |
randi([a,b],m,n) | 创建m行n列的均匀分布于0到1的矩阵,m可缺省 |
randn(m,n) | 创建m行n列的标准正态分布于矩阵,m可缺省 |
diag(v,k)or diag(A,k) | 将向量v的元素对角分布在第k条对角线上,k=0主对角,>0上,<0下方,k缺省0;或返回矩阵A第k对角线上元素 |
blkdiag(A,B,C…) | 将输入的矩阵A、B…对角化分布 |
size(A,dim) | 返回A矩阵在dim维度上的元素个数,dim缺省1即沿行方向 |
logical(A) | 将A矩阵转换为逻辑值矩阵 |
isnan(A) | 判断A中元素是否为NaN,并返回逻辑值矩阵(比如将矩阵A中的NaN替代成其他元素平均值,可以用A(isnan(A))=mean(A(~isnan(A))) |
all() | 判断数组元素是否全为非零值(可指定维度),返回逻辑值矩阵 |
any() | 判断数组元素是否至少有一个非零值(可指定维度),返回逻辑值矩阵 |
[row_ind,col_ind,v]=find(A) | 查找非零元素并返回索引,当只有一个回参时,返回线性索引,v为由非0元素组成的向量 |
1.4 程序流程控制
1.4.1 条件语句
1.4.1.2 if-elseif-else-end语句:
1 | if x>=90 && x<=100 %不需要分号或冒号 |
在MATLAB中可以用ctrl+i来格式化选中代码
1.4.1.3 switch-case-otherwise-end语句
1 | season=randi([1,4]) |
如果case后跟的是元胞数组,只要开关变量和数组中任意一个元素相等即可
1.4.2 循环语句
1.4.2.1 for-end语句
1 | for ii=[3;4;5;6;7]%向量或矩阵,如果是矩阵,遍历的元素是每一列向量 |
还可以:
1 | for ii=3:7 |
1.4.2.2 while-end语句
1 | m=1; |
注意:如果死循环后可以按ctrl+c退出
1.4.2.3 break和continue
和C一样,不赘述
1.4.3 其他
1.4.3.1 try catch语句
try的代码块是可能引发故障的语句,若故障,则执行catch块的代码
1 | try |
1.4.3.2 tic/toc
可以输出tic和toc之间程序的运行时长
1 | tic |
命令行窗口会自动输出运行时间
1.4.3.3 pause
-
pause:使程序停止,待用户按下任意键继续
-
pause(n):使程序停止n秒
1.4.3.4 input
-
input(‘提示’),如果要输入字符串需要自己加引号
-
input(‘提示’,‘s’),不需要自己加引号,专门接受文本
1.4.3.5 warning/error
warning(“txt”):自定义生成警告文本
warning on/off:开启或关闭警告功能
error(“txt”):自定义生成报错文本
区别:warning的信息是橘红色,error是红色;warning后的代码还会运行,error直接退出程序
1.5 文本处理
MATLAB使用的编码是UTF-16,所以文本对应的编码是unicode码
1.5.1 一些语法
1.5.1.1 文本中的加减
char+char是拼接
char-char是unicode码相减
char+数字同C,但会将字符串转换为对应的Unicode码,需要用char(str)z转换回来
1.5.1.2 储存形式
MATLAB中的字符串是以字符向量储存的,多段文本按字符数组储存
1.5.1.3 插入换行
c_new=[c1,char[10],c2]
c_new=[c1,newline,c2]
1.5.2 文本处理相关函数:
函数名 | 作用 |
---|---|
strcmp | 比较字符向量是否相同(区分大小写) |
strcmpi | 比较字符向量是否相同(不区分大小写) |
strncmp | 比较前n个字符是否相同(区分大小写) |
strncmpi | 比较前n个字符是否相同(不区分大小写) |
erase(str,match) | 删除str字符串的子字符串match |
numel(str)/length(str) | 统计字符向量中字符的数量 |
1.6 元胞数组
用于存储不同数据类型的数据容器,用{}括起来,形式上与矩阵相似,可以储存矩阵甚至元胞数组
1.6.1 常见数据类型:
-
数值:包括整型和浮点
-
文本:包括字符(char)和字符串(string)
-
逻辑(logical):布尔变量true/false
-
元胞数组(cell)
-
结构体数组(struct):
-
分类数组(categorical):保存分类型变量
-
日期时间(datetime):保存日期、时间的数据
-
表格(table):保存表格形式数据
-
函数句柄:可引用和间接调用函数
查看变量类型可以用
class(a)
查看
1.6.2 引用
1.6.2.1 ()引用
形式和索引查找一样,但不是直接返回该元素,而是返回一个对应大小的元胞数组
1.6.2.2 {}引用
形式和索引查找一样,直接返回该元素
1.6.2.3 链式引用
1 | cc={[1,2,3;4,5,6],'abc'}; |
1.6.2.4 嵌套的cell引用
形如cc{a}{b}[c]
1.7 函数
1.7.0 例子
例子:
1 | function result = factorial_function(n) |
1.7.1 定义语句
第一行为定义语句,function
为关键字(必需),result
为输出参数(可选),factorial_function()
为函数名(必需),n
为输入参数(可选,无输入时括号可省略)
记忆方式:y = f(x):y是输出,f是函数名,x是输入
1.7.2 函数内容
以下缩进部分为函数的内容,注意在这个区域建立的变量储存在的时该函数工作区,独立于基础工作区。
MATLAB的函数是写在一个单独的文件里的,创建的函数名需要和文件名一致。如果一个文件里有多个函数,则第一个函数为主函数,与文件名相关联。
1.7.3 end语句
MATLAB的函数定义以end
语句结尾
2 进阶
2.1 数据绘图
直接上参考模板:
2.1.1 单组数据画散点图
1 | x = [1 2 3 4 5]; |
2.1.2 单组数据画连续图
1 | clc |
2.1.3 多组数据画图
1 | clc |