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
:判断字符串是否是有效的变量名,但变量不一定要存在
- 参数解析器
匿名函数
@(输入参数列表)表达式 |
匿名函数创建时会将用到的外部变量封存进自己的变量空间
查找顺序:变量空间–子函数(嵌套函数–局部函数–私有函数)–工作文件夹–搜索路径