MATLAB基础语法-I
MATLAB大纲
- 基础语法
- 基本类型
- 基本类型和运算
- 字符串
- 时间和日期
 
- 高级类型
- 单元数组
- 结构数组
- 表、时间表
- 其他:稀疏矩阵、字典、分类数组
 
- 程序结构
- 分支
- 循环
- 函数
 
- 文件读写
- 错误和调试
 
- 基本类型
- 矩阵运算(张量运算:多维数组)
- 数组操作
- 数组运算
 
MATLAB简介
- 解释型
- 数值计算
快捷键
- 命令窗口:CTRL+0
- 工作文件夹浏览器:CTRL+2
- 变量空间:CTRL+3
- 代码编辑器:CTRL+SHIFT+0
用法
- 注释:%
- 续行:...
- 句末消显示:;/不消:,
简单命令
- clc; clear
- who; whos
- ver; version
- 系统命令 - !(替代cmd)
- 全部注释/取消注释:CTRL+R/T 
- 历史命令 - ↑
基本类型
| x = int16(2.5) | 
- int16/32(2.5)四舍五入
- 复数: - i/j
- true~1; false~0
- 判断是否是 - NaN:- isnan(NaN)
运算
运算顺序
- 括号()
- 转置'和乘幂^
- 正负号+、-和逻辑非~
- 乘除*、/、\和加点的版本.*、./、.\
- 加减法+、-
- 序列生成器
- 关系运算<、>=、<=、==、~=
- 逻辑与&
- 逻辑或|
- 短路逻辑与&&
- 短路逻辑或||
运算
- 对数需要换底公式
数值显示格式
字符串
- UTF-16
- 字符串=字符数组
- 字符串数组=单元数组Cell{}
| a='Hello' | 
字符串操作
- 大小写 - upper()/lower()
- 空白符 - 换行符 - newline()
- 生成一段空白符 - blanks(n)
- 添加在末尾/某侧 - pad(str,n[,side='left','right','both'])
- 删除末尾/开头和末尾/某侧 - deblank(str)/strtrim(str)/strip(str,side,stripchar) 
- 右/左对齐 - strjust(str,side)
 
- 判断 - isstrprop(str,category='alpha'...)
- 反转 - reverse
- 比较 - numel(s1)==numel(s2)&&all(s1==s2)(短路运算符):- strncmp(s1,s2[,n])
- 查找/替换 - strfind(str,pattern)/strrep(str,old,new)
- 分割/合并 - strsplit(str,deli)/strjoin(Cell)
 分割单词:- while ~isempty(remain) 
 [token ,remain] = strtok(remain);
 disp(token);
 end
字符串转换
- 读取(字符串→数字/角度) - str2double('3.1416')/str2num('1+0.2*sin(30)')/str2angle(str)
- 写入(数字→字符串) - num2str(pi)
字符串格式化
| num2str(A,formatSpec) | 
- 使用#补0:保留4位有效数字= 
 num2str(12.598,'%[#].4g')
- sprintf
| %[标识符/索引][标志][宽度].[精度][子类型][转换字符] | 
日期和时间
读取时间
- datetime格式的时间- datetime([2022,5,6,10,25,33])
| d = '2018-06-25 11:23:37.712'; | 
得到t为datetime格式时间:
| t = datetime | 
- 改变t蕴含的格式:t.Format = 'MMM dd, yyyy HH:mm:ss.SSS'
 t = datetime 
 Jun 25, 2018 11:23:37.712
程序结构
- 条件表达式总是短路的
分支/选择结构
if语句
| if 条件表达式 | 
- 变量在语句块之外预先定义
switch语句
| switch 条件表达式(变量) | 
- 多种情况,需要使用Cell单元数组
- 加otherwise:封闭的(能表示所有情况)
循环结构
- break
- continue
for语句
- 计次循环
- 循环的次数等于循环数组的列数,每次使循环变量等于循环数组的一列(一般行向量:循环n次,循环变量遍历全数组)
- 不能像其他语言那样用循环变量的取值判断当前是第几次循环,只能自行计数
- 循环变量的赋值不是发生在循环执行的语句块内部,而是在每次执行之前;在下次执行之前被覆盖
| for 循环变量 = 循环数组 | 
| for i = 1:4 | 
while语句
- 条件循环
| while 条件表达式 | 
| clc;clear; | 
函数
- 必须保证函数的输出参数在任何程序分支中都被赋值 
- 函数返回值唯一支持的寻访操作是结构体的取值,不支持用圆括号或花括号进行数组的寻访 
- 命令-函数二元性(每个输入形参都当成字符向量即单引号字符串) - load data.mat 
 load('data.mat')
- 避免定义与常用函数或命令同名的变量(二义性) 
一般语法:
| function [输出参数] = 函数名(输入参数) | 
特殊关键字/语句/命令:
- 控制: - return语句:退出/返回
 
- 作用域: - persistent:持久变量;函数执行完毕销毁变量空间时保留持久变量不予销毁
- golbal:全局变量:该变量在全局空间中查找
 
参数
参数形式
- nargin函数:获取本次调用实际接受的参数个数
- arguments语句:位于函数头部,定义默认值;提供了默认值的参数是可选参数,没有提供默认值的参数是必需参数- arguments 
 x = 1
 end
- 可重复参数: - arguments (Repeating)(提供任意多遍)- 可重复参数必须出现在位置参数之后
- 所提供的实参首先按顺序逐个分配给位置参数;如果实参有剩余,再分配给可重复参数
 
- 名称参数: - func(name1=value1,...)- 不区分大小写
- 支持部分匹配
 - function func(args) 
 arguments
 args.name1
 end
 end
- 可变长度参数列表: - varargin- 接受任意多个实参,并将它们收集成一个单元数组
- 实际提供的实参个数可通过numel(varargin)求得,也可使用nargin函数
- varargin可以与位置参数搭配使用,但必须出现在它们后面,作为参数列表的最后一个参数
 - function f(varargin) 
- 参数解析器 - inputParser
参数验证
- 形状验证
- 类型验证
- 验证函数mustBe(可以自行编写):mustBeInteger、mustBeNonnegative、mustBeInRange、mustBeNonempty、mustBeMember- mustBeA:验证参数是否属于给定的类型
- mustBeFile和- mustBeFolder:判断字符串是否为有效的文件名或文件夹名,而且文件或文件夹必须存在
- mustBeTextScalar:判断是否为字符串标量,包括单引号和双引号字符串
- mustBeText:判断是否为字符串数组(含标量),包括放在单元数组中的多个单引号字符串、竖向串联的多个单引号字符串(即字符数组)、双引号字符串的数组
- mustBeNozeroLengthText:判断字符串是否为空,可以应用于字符数组的每个元素
- mustBeVariableName:判断字符串是否是有效的变量名,但变量不一定要存在
 
- 参数解析器
匿名函数
| @(输入参数列表)表达式 | 
- 匿名函数创建时会将用到的外部变量封存进自己的变量空间 
- 查找顺序:变量空间–子函数(嵌套函数–局部函数–私有函数)–工作文件夹–搜索路径 



