【学习网址:MOOC---郑州轻工业大学---数学建模与实验】数学建模专栏
- 笔记01【第1、2章】【概述、软件介绍】
- 笔记02【第3章】【数据处理方法】
- 笔记03【第4章】【规划模型】
- 笔记04【第5章】【图与网络模型】
目 录
第2章 软件介绍
第2章 软件介绍作业1
1、指数函数-平面图形-作图(plot)
2、极坐标作图(polar)
3、参数函数作图(plot)
4、空间曲面图形作图(meshgrid)
5、题解and运行截图
第2章 软件介绍作业2
第3章 数据处理方法
3.1、数据插值练习题
1、估计每隔1/10小时的温度值。
2、作出山区的地貌图和等高线图,并对几种插值方法进行比较。
3.2、数据拟合练习题
3、多项式拟合方法
4、非线性最小二乘拟合获得待定系数
第4章 规划模型
1.求下列线性规划问题的解.
1、原始输入
2、集合法
2.使用 fmincon 求解下列非线性规划问题。
第5章 图与网络模型
作业1、给出8个城市间的最小生成树
作业2、试求从仓库可运往市场的最大流量
用subplot分别在不同的坐标系下作出四条曲线:
- 平面图形(参数方程):plot
- 空间三维曲线:plot3
- 空间曲面:mesh
- 极坐标:polar
步长越小,越密集,光滑程度越好!
1)曲线的图形,要求曲线颜色为蓝色,曲线形式为虚线,标记符为“o”,图形的标题为“平面图形作图”;
exp 指数函数 【 x0本身是矢量(向量),矢量运算要用“.”。】
x0 = -5:0.1:5;
y0 = exp(-x0.^2);
plot(x0,y0,'b--o') % b:蓝色;--:虚线;o:标记符号(英文字母o)plot(x, y, style)描点分段拟合(x, y),style有三部分:b--o (颜色,线条,点)
x0 = -5:0.1:5;
y0 = exp(-x0.^2);
plot(x0,y0,'b--*')
四叶玫瑰线 ;(polar函数),要求图形的标题为“极坐标作图”;
polar(r, p, style):做极坐标(r, p)图像。
向量运算:加“.” 。
% 3、叶形线
t = 0:0.1:5000;
x2 = 3*t./(1+t.^3);
y2 = 3*t.^2./(1+t.^3);
% plot(x2,y2,'r-.*')
,其中-30
meshgrid(x, y) :以x轴、y轴做出平面格点;mesh(X, Y, Z)做空间图像。
% 4、空间曲面
x = -10:0.05:10; % x是向量
y = x; % y也是向量
[X, Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps; % eps:一个很小的正数【开根号,可能会有误差,eps相当于误差的补偿。】
Z = sin(pi*R);
subplot(m, n, i)做一个m*n的画布,下一张图画在第i个位置。
title(str)设置当前图像的标题为str。
% 1、指数函数
x0 = -5:0.1:5;
y0 = exp(-x0.^2);
% plot(x0,y0) plot(x0,y0,'b--o')
% 2、四叶玫瑰线
theta = 0:0.01*pi:2*pi;
rho = sin(2*theta);
% 3、叶形线
t = 0:0.1:5000;
x2 = 3*t./(1+t.^3);
y2 = 3*t.^2./(1+t.^3);
% plot(x2,y2,'r-.*')
% 4、空间曲面
x = -10:0.05:10;
y = x;
[X, Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(pi*R);
subplot(2,2,1),plot(x0,y0,'r--o'),title('平面图形作图')
subplot(2,2,2),polar(theta,rho,'*'),title('极坐标作图')
subplot(2,2,3),plot(x2,y2,'r.-'),title('参数函数作图')
subplot(2,2,4),mesh(X,Y,Z),title('空间曲线图形作图')
保存图形【英文 命名】【文件 --> 另存为】
- .fig:保留文件所有信息。
- .jpg
- .png(文件小,不太清晰)
- .bmp(所占空间大)
建立一个命令M-文件:求所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。
例如,153是一个水仙花数,因为153=13+53+33。
i = 0; j = 0; m = 0; k = 1;
a = zeros(); % 空数组 未定义几维
for i = 1:9 % 百位
for j = 0:9 % 十位
for m = 0:9 % 个位
if i*100 + j*10 + m == i^3 + j^3 + m^3;
a(k,1) = i; %第1行的第1个位置 存放i
a(k,2) = j; %第1行的第2个位置 存放j
a(k,3) = m; %第1行的第3个位置 存放m
a(k,4) = i^3 + j^3 + m^3; %第1行的第4个位置 存放和
k = k + 1;
end
end
end
end
a
在1-12的11小时内,每隔1小时测量一次温度,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。试估计每隔1/10小时的温度值。
hours = 1:12;
temps = [5 8 9 15 25 29 31 30 22 25 27 24];
h = 1:0.1:12;
t = interp1(hours,temps,h,'spline') % (直接输出数据将是很多的)
plot(hours, temps, '+')
hold on
plot(h, t, hours, temps, 'r:') %作图
xlabel('Hour'),ylabel('Degrees Celsius')
某山区地貌:
在某山区测得一些地点的高程如下表。平面区域为
(1200<=x<=4000,1200<=y<=3600)
试作出该山区的地貌图和等高线图,并对几种插值方法进行比较。
X
Y
1200
1600
2000
2400
2800
3200
3600
4000
1200
1130
1250
1280
1230
1040
900
500
700
1600
1320
1450
1420
1400
1300
700
900
850
2000
1390
1500
1500
1400
900
1100
1060
950
2400
1500
1200
1100
1350
1450
1200
1150
1010
2800
1500
1200
1100
1550
1600
1550
1380
1070
3200
1500
1550
1600
1550
1600
1600
1600
1550
3600
1480
1500
1550
1510
1430
1300
1200
980
通过此题对最近邻点插值、双线性插值方法和双三次插值方法的插值效果进行比较。
相似题目
分别用多项式拟合的方法,在不同阶次下 拟合 函数y=(x2-3x+5)e-5xsinx中给出的数据。
该数据的三次多项式拟合:
>> x0=0:0.1:1; y0=(x0.^2-3*x0+5).*exp(-5*x0).*sin(x0);
>> p3=polyfit(x0,y0,3); vpa(poly2sym(p3),10)
ans =
2.839962923*x^3-4.789842696*x^2+1.943211631*x+.5975248921e-1
绘制拟合曲线:
>> x=0:0.01:1; ya=(x.^2-3*x+5).*exp(-5*x).*sin(x);
>> y1=polyval(p3,x); plot(x,y1,x,ya,x0,y0,'o')
>>p6=polyfit(x0,y0,6); y2=polyval(p6,x);
>>vpa(poly2sym(p6),10)
就不同的次数进行拟合:
>> p4=polyfit(x0,y0,4); y2=polyval(p4,x);
>> p5=polyfit(x0,y0,5); y3=polyval(p5,x);
>> p8=polyfit(x0,y0,8); y4=polyval(p8,x);
拟合最高次数为8的多项式:
>> vpa(poly2sym(p8),5)
ans =
-8.2586*x^8+43.566*x^7-101.98*x^6+140.22*x^5-125.29*x^4+74.450*x^3-27.672*x^2+4.9869*x+.42037e-6
Taylor幂级数展开:
>> syms x; y=(x^2-3*x+5)*exp(-5*x)*sin(x);
>> vpa(taylor(y,9),5)
ans =
5.*x-28.*x^2+77.667*x^3-142.*x^4+192.17*x^5-204.96*x^6+179.13*x^7-131.67*x^8
由下面语句生成一组数据,其中ai为待定系数。
>> x=0:.1:10;
>> y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);
并且该数据满足y(x)=a1*exp(-a2*x)+a3exp(-a4*x)*sin(a5*x)采用非线性最小二乘拟合获得待定系数,使得目标函数的值最小。
2、编写函数:
>> f=inline('a(1)*exp(-a(2)*x)+a(3)*exp(-a(4)*x).*sin(a(5)*x)','a','x');
>> [xx,res]=lsqcurvefit(f,[1,1,1,1,1],x,y);
>>xx'
>>res
输出结果:
Optimization terminated successfully:
Relative function value changing by less than OPTIONS.TolFun
ans =
0.1197
0.2125
0.5404
0.1702
1.2300
res =
7.1637e-007
修改最优化选项:
>> ff=optimset; ff.TolFun=1e-20; ff.TolX=1e-15; % 修改精度限制
>> [xx,res]=lsqcurvefit(f,[1,1,1,1,1],x,y,[],[],ff); xx',res
Optimization terminated successfully:
Relative function value changing by less than OPTIONS.TolFun
ans =
0.1200
0.2130
0.5400
0.1700
1.2300
res =
9.5035e-021
绘制曲线:
>> x1=0:0.01:10; y1=f(xx,x1); plot(x1,y1,x,y,'o')
Max = 400*x1 + 1000*x2 + 300*x3 - 200*x4;
-2*x2 + x3 + x4 = 0;
2*x1 + 3*x2 <= 16;
3*x1 + 4*x2 <= 24;
x3 < 5;
end
!Max = 400*x1 + 1000*x2 + 300*x3 - 200*x4;
! -2*x2 + x3 + x4 = 0 等式约束;
! 2*x1 + 3*x2 <= 16 不等式约束;
! 3*x1 + 4*x2 <= 24 不等式约束;
! x3 < 5 不等式约束;
!四行四列的约束矩阵 ;
sets:
k/1..4/:c,x,b; ! 四维变量集合k, ;
h/1..3/; !;
links(k,k):constr; !四行四列 矩阵用constr表示;
endsets
data:
c = 400 1000 300 -200;
b=0 16 24 5;
constr = 0,-2,1,1
2,3,0,0
3,4,0,0
0,0,1,0;
enddata
max=@sum(k(I):c(I)*x(I)); ! 目标函数 c*x k(I): I从1到4 Σci*xi;
@sum(k(J):constr(1,J)*x(J))=b(1); !等式约束 k(J): J从1到4 矩阵的第1行 ;
@for(h(I):@sum(k(J):constr(I+1,J)*x(J))<=b(I+1));
end
% xiti2.m文件
function ff = xiti2(x)
ff = x(1)^2 - 2*x(1)*x(2) + 2*x(2)^2 - 4*x(1) - 12*x(2) + x(3)^2;
% contxiti2.m文件
function [c1, ceq1] = contxiti2(x) % c1 不等式、ceq1 等式
c1 = 2*x(1)^2 + x(2) - 3*x(3) - 2;
ceq1 = 2*x(1)^2 + 5*x(2)^2 + 8*x(3)^2 - 4;
% xiti2tiaoyong.m文件
x0 = [0 1 1];
A = [-2, 2, -1]; % 线性不等式约束
b = -5;
Aeq = [1, 1, 2];
beq = 2;
lb = [];ub = [8, 4, 1];
[x, fval] = fmincon(@xiti2, x0, A, b, Aeq, beq, lb, ub, @contxiti2);
% @xiti2:调用目标函数 @contxiti2:调用非线性约束 x0:初始条件
% A、b 不等式线性约束 Aeq, beq:等式线性约束 lb 下界, ub 上界
北京(Pe)、东京(T)、莫斯科(Mo)、纽约(N)、渥太华(O)、墨西哥城(Me)、伦敦(L)、巴黎(Pa)各城市之间的航线距离如表5.1所列,给出8个城市间的最小生成树。
表5.1八城市间的航线距离
L
Me
Mo
N
O
Pa
Pe
T
L
56
26
35
53
21
51
60
Me
56
55
33
36
91
124
113
Mo
26
55
180
31
28
57
80
N
35
33
180
5
58
150
108
O
53
36
31
5
56
104
96
Pa
21
91
28
58
56
82
94
Pe
51
124
57
150
104
82
20
T
60
113
80
108
98
94
20
% 将伦敦(L)、墨西哥城(Me)、莫斯科(Mo)、纽约(N)、渥太华(O)、巴黎(Pa)、北京(Pe)、东京(T) % 分别标为顶点1、2、3、4、5、6、7、8.记图G(V, E, W),用matlab求最小生成树如下: a=zeros(8); a(1,2)=56;a(1,3)=26;a(1,4)=35;a(1,5)=53;a(1,6)=21;a(1,7)=51;a(1,8)=60; a(2,3)=55;a(2,4)=33;a(2,5)=36;a(2,6)=91;a(2,7)=124;a(2,8)=113; a(3,4)=180;a(3,5)=31;a(3,6)=28;a(3,7)=57;a(3,8)=80; a(4,5)=5;a(4,6)=58;a(4,7)=150;a(4,8)=108; a(5,6)=56;a(5,7)=104;a(5,8)=96; a(6,7)=82;a(6,8)=94; a(7,8)=20; a=a+a'; % 以上:构造8个城市间的模型 G=sparse(a); % 转稀疏矩阵 % G必须是稀疏矩阵 直接调用算法,可以不转化为稀疏矩阵 Tree:最小生成树 Pred:前驱节点 [Tree,pred]=graphminspantree(G, 'method', 'Kruskal') nodestr={'L', 'Me', 'Mo', 'N', 'O', 'Pa', 'Pe', 'T'} % 给8个点命名 h=view(biograph(Tree,nodestr,'ShowArrows','off','ShowWeights','on')) % view转可视图 biograph画图 'ShowArrows','off' 给不给箭头,不给箭头(无向图);给不给权重 给
建模过程中,如果能够将结果转为可视化的图(或 表...),一定要转化为可视化的图(或 表...)。
文字描述,看起来 比较费劲(尤其对于 非专业阅读者)。
view()函数:画图 biograph 【解法2:直接使用Kruskal算法,可以不将矩阵转为稀疏矩阵】
某产品从仓库运往市场销售。已知各仓库的可供量、各市场需求量及从i仓库至j市场的路径的运输能力如表5.2所列(0表示无路可通),试求从仓库可运往市场的最大流量,各市场需求能否满足?
市场j
仓库i
1
2
3
4
可供量
A
30
10
0
40
20
B
0
0
10
50
20
C
20
10
40
5
100
需求量
20
20
60
20
3个发点,4个收点 --> 构造虚拟点:1个发点、1个收点 ------ 集中发货点 发给 A、B、C(容量是可供应量),收点(需求量)
发点到收点的最大流(两点之间,经过中间网络的最大流)
% 解:应用最大流算法必须是单源单汇的网络,因此,构造一个虚拟发点Vs, % A、B、C的可供应量分别为20、20、100,可令弧VsA、VsB、VsC上的容量分别为 % 20、20、100。构造一个虚拟收点Vt,由于市场1、2、3、4的需求量分别为20、20、 % 60、20,可令弧1vt、2vt、3vt、4vt的容量分别为20、20、60、20。构造赋权有 % 向图G=(V,E,W),其中顶点集V,弧集为E,W为对应各弧容量的邻接矩阵,计算时, % 将点Vs,A,B,C,1,2,3,4,vt分别编号为1、2、3、4、5、6、7、8、9 % 从仓库到市场的最大流问题归结为求Vs到Vt的最大流。用matlab求解如下: a=zeros(n); % 生产0矩阵 a(1,2)=20;a(1,3)=20;a(1,4)=100; a(2,5)=30;a(2,6)=10;a(2,8)=40; a(3,7)=10;a(3,8)=50; a(4,5)=20;a(4,6)=10;a(4,7)=40;a(4,8)=5; a(5,9)=20;a(6,9)=20;a(7,9)=60;a(8,9)=20; % 建立9*9的邻接矩阵 上三角 a=sparse(a); % 转为稀疏矩阵 [b,c]=graphmaxflow(a,1,9) % 用命令函数求两点之间的最大流 点1到点9之间的最大流 % 求得从仓库运往1、2、3、4市场流量为20、20、50、20,最大流量为110,其中市场3不能满足需求。