注: 此文章只是学习笔记,不建议作为参考学习文章
B站 数模竞赛基础+MATLAB入门+论文写作+数学模型算法(数模美赛国赛
https://www.bilibili.com/video/BV1Rq4y1S7S8/?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click&vd_source=4faa1aeb8d3938c16ae4cedd2b054497
1.创建一个1行6列的矩阵
b = [1,2,3,8,7,4]
2.对矩阵中的每一个元素都加3
b = a + 3
3.plot函数作图,以索引为横坐标,索引就是该数字在矩阵里是"第几个", grid on 表示在画图的时候添加网格线。
plot(b)
grid on
运行结果:
4.多维矩阵:以空格或逗号分隔同一行元素,分号分隔各行。
常见运算:转置、取逆、求特征值、和特征向量
A = [3,2,1; 2,4,1; 3,9,2]
B = A' %转置
[D,V] = eig(A) %https://www.gofarlic.com特征向量 V:特征值
E = inv(A) %求逆矩阵
F = A*E %矩阵*逆矩阵=单位向量
C = A*B %矩阵乘法
E = A.*B %矩阵点乘,对应元素相乘
6.使用矩阵A对方程A*x = b求解,方法是使用(反斜杠)运算符
即A的逆矩阵乘以矩阵B
A = [3,2,1; 2,4,1; 3,9,2]
b = [1;3;5]
x = A\b
%验证一下
s = A*x - b
7.如果一个操作数是标量,而另一个操作数不是标量,
则MATLAB会将该标量隐式扩展为与另一个操作数具有相同的大小
H = [1,1,1;2,2,2;3,3,3]
K = 4
L = H*K %运算时,K变成3x3的变成对角矩阵, 对角线上都是4
M = H+K %运算时,K编程3x3的矩阵,每个元素都是4
8.不同维度的行向量和列向量相加
一般不要进行这种不同维度的矩阵运算
N = [1,2,3,4]
p = [5;6;7]
Q =N + P
%结果:Q = 3×4
% 6 7 8 9
% 7 8 9 10
% 8 9 10 11
1.线图
plot 函数用来创建x和y值的简单线图
x = 0:0.05:30; %从0到30,每个0.05取一次值
y = sin(x);
plot(x,y) %作图 若(x,y,"LineWidth",2可粗
xlabel("横轴标题")
ylabel("纵轴标题")
grid on %显示网格
axis([0 20 -1.5 1.5]) %设置横纵坐标范围
多组函数显示在同一张图
y1 = sin(x);
y2 = cos(x);
plot(x,y1,x,y2)
axis([0 20 -1.5 1.5]) %设置横纵坐标范围
2.条形图
bar 函数创建垂直条形图
barh 函数用来创建水平条形图
x = -3:0.05:3;
p = exp(-x.*x); %计算的结果是将x中每个元素平方,然后用负数乘以这个结果,再求e的指数函数
bar(x,p);
barh(x,p);
运行结果:

3.极坐标图
polarplot 函数用来绘制极坐标图
theta = 0:0.01:2*pi;
%abs求绝对值或复数的模
radi = abs(sin(7*theta).*cos(10*theta));
polarplot(theta,radi); %括号内是弧度和半径
3.散点图
seatter函数用来绘制x和y值的散点图
Height = randn(1000,1);
%用于生成一个包含1000个随机数的列向量(即一个大小为1000x1的矩阵),
%随机数是从标准正态分布中产生的。
Weight = randn(1000,1);
scatter(Height,Weight);
xlabel('Height');
ylabel('Weight');
1.三维曲面图
surf函数可用于做三维曲面图。一般是展示函数z = z(x,y)的图像
首先需要用meshgrid创建好空间上(x,y)点。
[X,Y] = meshgrid(-2:0.2:2);
%使用 meshgrid 函数创建了 X 和 Y 两个矩阵,它们的取值范围分别为 -2 到 2,步长为0.2。
%这样,X 和 Y 矩阵的维度都是 21x21,共有 441 个数值对。
%Z = x.^2 + Y.^2
Z = X.*exp(-X.^2-Y.^2); %计算每个坐标点的高度值(Z)
surf(X,Y,Z);
%colormap hsv % colormap设置颜色,可跟winter、summer等、hsv
%colorbar
2.子图
使用subplot函数可以在同一窗口的不同子区域显示多个绘图
[X,Y] = meshgrid(-2:0.2:2);
theta = 0:0.01:2*pi;
radi = abs(sin(2*theta).*cos(2*theta));
Height = randn(1000,1);
Weight = randn(1000,1);
subplot(2,2,1); surf(X.^2); title('1st');
subplot(2,2,2); surf(Y.^3); title('2nd');
subplot(2,2,3); polarplot(theta,radi); title('3rd'); %3.极坐标图
subplot(2,2,4); scatter(Height,Weight); title('4th');
运行结果:
最常用的就是导入excel表格数据,主页选项卡-导入数据-选择excel
导入的范围:
导入类型:
“输入类型"决定了导入的数据以什么类型存储,一般选择表,如果选择"数值矩阵”,那么所有 字符串 都变成NAN,反之亦然。
| 选择的选项 | 导入的数据的方式 |
|---|---|
| 列向量 | 将所选的数据的每一列导入为单个mx1向量 |
| 数据矩阵 | 将所选数据导入为mxn数值数组 |
| 字符串数组 | 将所选数据导入为mxn字符串数组 |
| 元胞数组 | 将选择数据导入可包含多种数据类型的元胞数据,例如数值数据和文本 |
| 表 | 将所选数据导入为表 |
注意:导入后数据在工作区。关闭matlab后数据消失。如果想保存数据的话,记得保存工作区文件 Ctrl+s保存
处理无法导入的数据:
例如:设置输入类型为"数值矩阵",那么表格里的字符怎么办?
有限的条件下,最大的收益。
1.线性规划使用的赛题:
题目中提到"怎么安排/分配",”尽量多(少)“,“利润最大” "最合理"等词
注意:一般资料里说的整数规划、0-1规划往往也默认为线性规划的特例。
2.线性规划–代码实现
Linprog函数
| f | 目标函数的系数列向量 |
|---|---|
| A,b | 不等式约束条件的变量系数矩阵和常量项矩阵 |
| Aeq,beq | 等式约束条件的变量系数矩阵和常见项矩阵 |
| lb,ub | 决策变量的最小取值和最大取值 |

f = [-40;-30]; %目标函数中的变量的系数矩阵
a = [1,1;-1,0;0,-1;240,120];
b = [6;-1;-1;1200]
[x,y] = linprog(f,a,b);
y = -y;
%zeros(m,n)是元素全为0的m行n列的矩阵
有限的条件下,最大的收益

注:需要衡量每个目标的完成情况,并主观上区分三个目标的重要性,使得整体的完成情况尽量好。
引入三个概念:正负偏差变量,绝对约束和目标约束,优先因子
注意:
尽量不少于,意味负偏差变量 越小越好
不超过目标值,意味正偏差变量 越小越好
恰好达到目标值,,意味正负偏差都尽量小
绝对约束是模型中自带的约束条件,必须满足,否则是不可行解
目标约束是模型中对不等式右端追求的值允许有偏差。
优先因子【类似“权重”】 主观上给每一个目标一个优先因子P,仅仅是确定各目标的求解次序

推荐文章: 数学建模|多目标规划+序贯算法|简要原理+实例matalb代码实现
连通所有顶点且总路径最小
和最短路径的区别:最短路径是针对某一顶点作为起点而言的,最小生成树是所有顶点连通且总路径最小。
% 使用minspantree()
clc,clear;
s = [1,1,2,2,3,3,4,4,4,5];
t = [2,3,4,5,4,7,5,6,7,6];
weights = [50,60,65,40,52,45,50,30,42,70];
% 生成无向图,其中s和t对应元素代表着边,weights是权值
G = graph(s,t,weights);
% 求出最小生成树,得到的T包含最小生成树的节点和对应边的权值
T = minspantree(G);
% p = plot(G)就能把图片展现出来,后面是为了美观设置字体等
p = plot(G,'EdgeLabel',G.Edges.Weight,"MarkerSize",8);
%突出显示绘制的图中的节点和边
highlight(p,T,'EdgeColor','red','LineWidth',3);
kruskal算法
% 适合点多边少的图
1.把图G中的所有边全部去掉,得到所有单独的顶点V构成图T=(V,{}),其中V是顶点集合
2.从G中取出当前权值最小的边,如果该边加入T的边集合后T不形成回路,则加入T;否则舍弃
3.重复第二步,直到T中n-1条边(n是顶点数)
.若第二步中遇到两条权值相同的最小权值边,任选一条即可,所以最小生成树可能不唯一,但权值之和相同。
prim 算法
% 适合边多点少的图
1.设置一个图U,将原图G中任意一顶点取出加入U中
2.在所有的u属于U,v属于(G-U)的边(g,v)中找到一条权值最小的边,并入图U中
3.重复步骤2,直到U中包含了所有的顶点
.若第二步中遇到两条权值相同的最小权值边,任选一条即可,所以最小生成树可能不唯一,但权值之和相同。
GM(1,1)模型
优点:数据少且无明显规律时可用,利用微分方程挖掘数据本质规律
缺点: 灰色预测只适合短期预测、指数增长的预测

特点:数据少,看不出明显规律,适合用灰色预测
这组数看不出规律怎么办?制造规律!
如何制造?累加

如果一个东西长得像鸭子,叫声像鸭子,走路也像鸭子,那它就是一只鸭子
生成得新序列x(1),看起来像一个指数曲线(直线)
可用一个指数曲线乃至一条直线的表达式来逼近这个新序列
构建一阶常微分方程来求解拟合曲线的函数表达式
设x(1)满足:dx(1)/dt + ax(1) = u.若a和u已知则可直接求解出结果
要预测下一年数值,就解出微分方程;要解微分方程,就要知道a和u
想要a和u,就要用最小二乘法,通过最小化误差的平方和寻找数据的最佳函数匹配
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删