收集一些好用的函数名,具体语法等用时再查文档。

常用的可以看 MATLAB 教程书籍的附录。这里放一个整理的 pdf

统计函数

向量的元素和/矩阵的每列和/最值/均值

1
2
3
4
5
6
7
8
9
cumsum(A) % 累积和/每列的累积和,即前缀和
sum(A)
min(A)
max(A)
mean(A)

[x, l] = min(A) % 顺便把最小值位置 index 给 l

sum(A,2) % 矩阵的每行和(平均数),2 是第二维

向量长度、矩阵大小

1
2
length(V)
size(A) %返回一个1x2数组

列排序(返回数列、原数列元素在新数列的index)

1
2
[B I] = sort(V)
[B I] = sort(V,'descend') %降序

find

很重要很重要!!

第一行找到 v 中大于 0 的元素的下标。
第二行把下标矩阵作为原矩阵的下标,则可以直接筛选到对应下标的元素组成的矩阵。

相当于实现了一个筛选矩阵元素的功能。可以用 if 改写,但是 MATLAB 中矩阵运算更快,因此能用矩阵运算就不要用 if

1
2
3
v = [1 0 -3 7 -5];
idx = find(v>=0); % idx == [1 2 4]
v1 = v(idx); % v1 = [1 0 7]

注意到,除了把下标矩阵 idx 传给 v 以外,还可以直接把 v>=0 传给矩阵,省去了一个 find 的过程。

1
2
v = [1 0 -3 7 -5];
v2 = v(v>=0); % v2 = [1 0 7]

好用的函数收集

(从 xls/xlsx csv txt)读写表格:xlsreadreadmatrix(MATLAB R2019a 起)。

注意 readmatrix 如不指定 NumHeaderLines 参数时,会自动识别并去掉行表头。写代码的时候小心。

映射、map:containers.Map

分段函数:piecewise

最优化、规划问题相关

求函数最小值,有一堆工具箱函数不知道有什么区别,可能使用的算法不同

功能 函数名 注释
单变量优化 fminbnd() 求一元函数最小值
无约束优化 fminsearch() 使用无导数法计算最小值
fminunc() 计算无约束的多变量函数的最小值
有约束优化 fmincon() 在有线性约束下计算最小值
线性规划 linprog() 解线性规划问题
整数规划 intlinprog() 解整数线性规划问题
遗传算法 ga() 包含以上所有功能,不过精度较低

基于问题的最优化

最优化相关的基于问题的方法 Problem-Based Approach

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
x = optimvar('x',2,'LowerBound',0);
xb = optimvar('xb','LowerBound',0,'UpperBound',1,'Type','integer');
prob = optimproblem('Objective',-3*x(1)-2*x(2)-xb);
cons1 = sum(x) + xb <= 7;
cons2 = 4*x(1) + 2*x(2) + xb == 12;
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;

% Convert the problem object to a problem structure.
problem = prob2struct(prob);

% Set Options
problem.options = optimoptions('intlinprog','Display',"off");

% Solve the resulting problem structure.
[sol,fval,exitflag,output] = intlinprog(problem)

说白了,就是 prob2struct 函数能够将 4*x(1) + 2*x(2) + xb == 12 这样的直白的优化式子和约束条件,换为 intlinprogAeq beq
如果使用传统的方式,这一步转化需要人工完成。
对于复杂的问题,这样更不容易出错。

跑出来的 sol 是一个 1*3 向量,那么 xxb 对应哪些变量呢?

可以使用 varindex

1
2
3
4
5
6
7
8
>> varindex(prob)

ans =

包含以下字段的 struct:

x: [1 2]
xb: 3

就可以看出对应关系了。

更多相关资料可查看 Problem-Based Optimization Setup - MATLAB & Simulink

插值拟合相关

该部分详解可见数模自学笔记——插值和拟合

功能 函数名 注释
一维插值 interp1
二维插值 interp2
样条插值 csape
多项式拟合 polyfit 多项式值计算可使用 polyval

概率统计相关

功能 函数名 注释
正态概率函数 normpdf pdf: Probability Density Function
正态分布函数 normcdf cdf: Cumulative Density Function
正态下侧分位数 norminv(p) 返回 $x$ 满足 $\varPhi(x)=p$
按正态分布生成随机数 normrnd
上述函数的卡方分布版本 将四个函数的 norm 改为 chi2 很香
上述函数的均匀分布版本 将四个函数的 norm 改为 unif
上述函数的指数分布版本 将四个函数的 norm 改为 exp
正态均值检验、参数估计 ttest
正态方差检验、参数估计 vartest
总体均值差检验、参数估计 ttest2
$\chi^2$ 拟合优度(goodness-of-fit)检验 chi2gof
正态分布拟合 normfit 使用 Wald 检验
曲线拟合工具箱 cftool
分布拟合工具箱 distributionFitter

工具箱函数

命令 名称
cftool 曲线拟合工具箱
distributionFitter 分布拟合工具箱

图论

命令名 作用
graphallshortestpaths 求图中所有顶点对之间的最短距离
graphconncomp 找无向图的连通分支,或有向图的强弱连通分支
graphisdag 测试有向图是否含有圈,不含圈返回1,否则返回0
graphisomorphism 确定两个图是否同构,同构返回1,否则返回0
graphisspantree 确定一个图是否是生成树,是返回1,否则返回0
graphmaxflow 计算有向图的最大流
graphminspantree 在图中找最小生成树
graphpred2path 把前驱顶点序列变成路径的顶点序列
graphshortestpath 求图中指定的一对顶点间的最短距离和最短路径
graphtopootder 执行有向无圈图的拓扑排序
graphtraverse 求从一顶点出发,所能遍历图中的顶点

绘图及图片处理

绘图

符号编程

符号编程