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

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

# 统计函数

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

cumsum(A) % 累积和/每列的累积和,即前缀和
sum(A)
min(A)
max(A)
mean(A)

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

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

# 向量长度、矩阵大小

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

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

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

# find

很重要很重要!!

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

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

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 的过程。

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 (opens new window)

分段函数:piecewise

# 最优化、规划问题相关

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

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

# 基于问题的最优化

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

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

>> varindex(prob)

ans = 

  包含以下字段的 struct:

    x: [1 2]
    xb: 3

就可以看出对应关系了。

更多相关资料可查看 Problem-Based Optimization Setup - MATLAB & Simulink (opens new window)

# 插值拟合相关

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

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

# 概率统计相关

功能 函数名 注释
正态概率函数 normpdf pdf: Probability Density Function
正态分布函数 normcdf cdf: Cumulative Density Function
正态下侧分位数 norminv(p) 返回 xx 满足 Φ(x)=p\varPhi(x)=p
按正态分布生成随机数 normrnd
上述函数的卡方分布版本 将四个函数的 norm 改为 chi2 很香
上述函数的均匀分布版本 将四个函数的 norm 改为 unif
上述函数的指数分布版本 将四个函数的 norm 改为 exp
正态均值检验、参数估计 ttest
正态方差检验、参数估计 vartest
总体均值差检验、参数估计 ttest2
χ2\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 求从一顶点出发,所能遍历图中的顶点

# 绘图及图片处理

绘图

# 符号编程

符号编程