数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正。
前言
主要复习的是两个问题的数学模型建立的过程,代码实现省略。
非线性规划问题
供应与选址
问题描述
某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:km)及水泥日用量d(t)由下表给出.目前有两个临时料场位于A(5,1),B(2,7),日储量各有20t.假设从料场到工地之间均有直线道路相连.
(1)试制定每天的供应计划,即从A,B两料场分别向各工地运送多少水泥,可使总的吨千米数最小.
(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20t,问应建在何处,节省的吨千米数有多大?
模型建立
- 符号说明
工地的位置为( a i , b i a_i,b_i ai,bi),水泥的日用量 d i d_i di,i=1,2……,6;料场位置为( x j , y j x_j,y_j xj,yj),日储量为 e j e_j ej,j=1,2;料场j向工地i运送的水泥量为 X i j X_{ij} Xij. - 问题1模型建立
目标: min f = ∑ j = 1 2 ∑ i = 1 6 X i j ( x j − a i ) 2 + ( y j − b i ) 2 \min f = \sum\limits_{j = 1}^2 {\sum\limits_{i = 1}^6 { {X_{ij}}\sqrt { { {({x_j} - {a_i})}^2} + { {({y_j} - {b_i})}^2}} } } minf=j=1∑2i=1∑6Xij(xj−ai)2+(yj−bi)2
约束: ∑ j = 1 2 X i j = d i , i = 1 , 2 , ⋯ , 6 ∑ i = 1 6 X i j ≤ e j , j = 1 , 2 \begin{array}{l} \sum\limits_{j = 1}^2 { {X_{ij}}} = {d_i},{\rm{ }}i = 1,2, \cdots ,6\\ \sum\limits_{i = 1}^6 { {X_{ij}}} \le {e_j},{\rm{ }}j = 1,2 \end{array} j=1∑2Xij=di,i=1,2,⋯,6i=1∑6Xij≤ej,j=1,2
此时使用临时料场的决策变量为: X i j X_{ij} Xij. - 问题2模型建立
min f = ∑ j = 1 2 ∑ i = 1 6 X i j ( x j − a i ) 2 + ( y j − b i ) 2 \min f = \sum\limits_{j = 1}^2 {\sum\limits_{i = 1}^6 { {X_{ij}}\sqrt { { {({x_j} - {a_i})}^2} + { {({y_j} - {b_i})}^2}} } } minf=j=1∑2i=1∑6Xij(xj−ai)2+(yj−bi)2
s.t. ∑ j = 1 2 X i j = d i , i = 1 , 2 , ⋯ , 6 ∑ 6 X i j ≤ e j , j = 1 , 2 \begin{array}{l} \text { s.t. } \sum_{j=1}^{2} X_{i j}=d_{i}, \quad i=1,2, \cdots, 6 \\ \sum^{6} X_{i j} \leq e_{j}, \quad j=1,2 \end{array} s.t. ∑j=12Xij=di,i=1,2,⋯,6∑6Xij≤ej,j=1,2
此时不使用临时料场,决策变量变为: X i j 、 x j 、 y j X_{ij}、x_j、y_j Xij、xj、yj。
无约束最优化
梯子长度问题
问题描述
一楼房的后面是一个很大的花园. 在花园中紧靠着楼房有一个温室, 高3m,温室伸入花园2m,温室正上方是楼房的窗台. 清洁工打扫窗台周围,他得用梯子越过温室,一头放在花园中,一头靠在楼房的墙上. 因为温室是不能承受梯子压力的,所以梯子太短是不行的.现清洁工只有一架7m长的梯子,你认为它能达到要求吗? 能满足要求的梯子的最小长度为多少?
模型建立
-
符号假设
L : 梯 子 的 长 度 L:梯子的长度 L:梯子的长度;
L 1 : 梯 子 的 上 半 段 L_1:梯子的上半段 L1:梯子的上半段;
L 2 : 梯 子 的 下 半 段 L_2:梯子的下半段 L2:梯子的下半段;
θ : 梯 子 与 地 面 的 夹 角 \theta:梯子与地面的夹角 θ:梯子与地面的夹角; -
模型建立
据题意易得: L = L 1 + L 2 ( 1 ) ; L=L_1+L_2(1); L=L1+L2(1);
其中:
L 1 = a c o s ( θ ) ( 2 ) L_1=\frac{a}{cos(\theta)}(2) L1=cos(θ)a(2)
L 2 = b s i n ( θ ) ( 3 ) L_2=\frac{b}{sin(\theta)}(3) L2=sin(θ)b(3)
综合(1)、(2)、(3)式可得原式可等效为:
m i n L = 2 c o s ( θ ) + 3 s i n ( θ ) 其 中 : 0 ≤ θ ≤ π 2 min L=\frac{2}{cos(\theta)}+\frac{3}{sin(\theta)}其中:0\leq\theta\leq\frac{\pi}{2} minL=cos(θ)2+sin(θ)3其中:0≤θ≤2π -
数学方式求:
对 θ \theta θ求导令导数为零,其为零时可得对应的最值,再求对应的二阶导可判断其的取值情况。 -
Matlab求取:
%梯子问题
a=2;
b=3;
str=[num2str(a),'/cos(x)+',num2str(b),'/sin(x)'];
f=str2func(['@(x)',str])
ezplot(str,[0,pi/2])
[x,fmin]=fminsearch(f,1)

x =0.8527
fmin =7.0235
即梯子的最小长度为7.0235米。
水槽问题
问题描述
有边长为3m的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
问题求解
- 模型
设裁剪的正方形的边长为 x x x,这水槽的容积为: ( 3 − 2 x ) 2 x (3-2x)^2x (3−2x)2x
可建立无约束优化模型:min y = ( 3 − 2 x 2 ) x y=(3 - 2{x^2})x y=(3−2x2)x 0<x<1.5; - Matlab求解
%铁板问题
f='-(3-2*x).^2*x'
[x,fval]=fminbnd(f,0,1.5);
ezplot(f,[0,1.5])
xmax=x
fmax=-fval
- 结果
xmax =0.5000
fmax =2.0000
可得边长取0.5m取得最大容积 2 m 3 2m^3 2m3