数学建模 -实验报告2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
the current x satisfies the term...' 即最小值在 x=0.2176 附近,为-1.1312。
题目二
Matlab 程序
fun='(x^2+4*x+4)'; ezplot(fun,[-4,4]) [X,fval,exitflag,output]=fminbnd(fun,-4,2)
中的病床看作是长度和宽度都可以变化的活动床,那么,只要我们就可以从两个角度来考虑这个问题:一
个角度是求出当床长度一定时可以转过走廊的最小宽度,显然这个最小宽度是由走廊宽度和病床长度确定
的;另一个角度是求出当病床宽度一定时的最小长度,同样的道理,这个最小长度是由走廊宽度和病床宽
度确定的。这样一来就可以得到问题的答案。
运行结果 X=
11.0000 3.0000 0.0000 0.0000 1.5000
fval =
-9.5000
题目 3
解:根据题意我们可以建立目标函数和约束条件
目标函数: min z 5 100(x1 x2 x3 x4 x5 x6 x7)
x1 x4 x5 x6 x7 16 x1 x2 x5 x6 x7 15 x1 x2 x3 x6 x7 16 约束条件: x1 x2 x3 x4 x7 19 x1 x2 x3 x4 x5 14 x2 x3 x4 x5 x6 12 x3 x4 x5 x6 x7 18
-8.2197 fval =
-1.0156e+04 exitflag =
1 output =
iterations: 9 funcCount: 10 algorithm: 'golden section search, parabolic interpolation' message: 'Optimization terminated:
1
output =
iterations: 11 funcCount: 12 algorithm: 'golden section search, parabolic interpolation'
message: 'Optimization terminated: the current x satisfies the term...'
的充分必要条件是:病床长度 L Lmin (w, ) 。因此,问题归结为求函数 L( , w, ) 关于变量 的最小值
Lmin (w, ) 。
令 t sin cos 得:1 t
2
, sin
cos
t2
1
,代入(6)式得
2
L( , w, ) f (t, w, )
the current x satisfies the term...'
所以 f(x)得最小值为-1.0156e+004
三. 完成教材 P222 的 的 1,2
题目一
Matlab 程序
%confun1.m function [c,ceq]=confun1(x) c=[-x(1)+1;-x(2)]; ceq=[]; end
x1, x2 , x3, x4 , x5 , x6 , x7 均大于 0 且为整数
程序代码
clear c=5*[100,100,100,100,100,100,100]; A=[-1,0,0,-1,-1,-1,-1; -1,-1,0,0,-1,-1,-1; -1,-1,-1,0,0,-1,-1; -1,-1,-1,-1,0,0,-1; -1,-1,-1,-1,-1,0,0; 0,-1,-1,-1,-1,-1,0; 0,0,-1,-1,-1,-1,-1]; b=[-16,-15,-16,-19,-14,-12,-18]; LB=[0;0;0;0;0;0;0]; [X,fval]=intlinprog(c,A,b,[],[],LB,[])
%myfun1.m function f=myfun1(x) f=1/3*(x(1)+1)^3+x(2); end
运行结果
所以 f(x)得最小值为 2.6667。
题目二
Matlab 程序
%myfun2.m function f=myfun2(x) f=2*x(1)^2+2*x(2)^2-2*x(1)*x(2)-4*x(1)-6*x(2); end
%confun2.m function [c,ceq]=confun2(x) c=[x(1)+x(2)-2;x(1)+5*x(2)-5]; ceq=[];
end
运行结果
所以 f(x)得最小值为-7.1613。
四.病床转弯问题
病床转弯问题的数学模型
一、问题
如图-1 所示,设走廊宽度为 w 、病床长度 L 、病床宽度 h 三者之间的关系来解决,即归结为如下形式 的问题:已知走廊宽度为 w ,病床长度和宽度分别为 L 和 h ,当 w 、 L 、 h 满足是么关系时可以把病床平
运行结果 X=
0.0000 0.0000 -0.0371 2.9092
fval =
fval
14.8428
题目 2:
程序
f=[-1,1,1,1,-1]; A=[0,0,1,0,6;0,0,-1,0,-6;1,-4,0,0,2;-1,4,0,0,-2;0,2,0,1, 2;0,-2,0,-1,-2]; b=[9,-9,2,-2,9,-9]; LB=[0;0;0;0;0]; [X,fval]=linprog(f,A,b,[],[],LB)
将(3)、(4)、(5) 式代入(2)式得
L(
,
w,
)
w
sin cos sin cos
( 0 , 0 1, w 0 ) 2
(6)
只要求出 L( , w, ) 关于变量 的最小值 Lmin (w, ) ,我们立即可以得到病床可以平推转过走廊拐角
2w
t t2 1
2w( t
1 1
t121), 其中
(1
t
2 , w 0 ,0 1)
(7)
注意到(7)式中当1 t
题目一
直接将区间范围改为[-5,5]时,结果如下: Matlab 程序代码
fun='(x^5+x^3+x^2-1)/(exp(x^2)+sin(-x))'; [X,fval,exitflag,output]=fminbnd(fun,-5,5) 运行结果 X=
-1.5715
fval =
-0.9359
exitflag =
图2
只要
L 2 h2 w2 2
0hw
化简得: L 2 w2 h2
源自文库
0hw
(1)
即:当病床的长度 L 不超过走廊宽度 w 与病床宽度 h 的平方差的平方根
倍时,我们就可以把病床平推转过走廊拐角。 到此,我们似乎已经完全解决了这个问题。在下结论之前,我们来
Q B
O
F
D
运行结果 X=
-2 fval =
0 exitflag =
1 output =
iterations: 5 funcCount: 6
所以 f(x)得最小值为 0。
题目三
Matlab 程序
fun='((x-2)^4*sin(x)-(x-1)^2*cos(x))'; ezplot(fun,[-10,10]) [X,fval,exitflag,output]=fminbnd(fun,-10,-6) 运行结果 X=
动病床。由于当病床宽度超过走廊宽度时不可能把病床推进走廊,因
设0 h w。
如图 2 所示, AO OB L , AC BD h 。在转动过程中 2
B O
D A
此假
C, D
两点的轨迹是一 O 点为圆心, R OC OD 为半径的圆弧,因此,
C
圆弧的半径不超过走廊宽度就可以 把病床平推过走廊拐角,即:
那么究竟是从定长变宽的角度考虑问题好还是从定宽变长的角度来考虑问题好?在图-3 中,从病床的
左上角开始按顺时针方向对病床的四个顶点进行编号为A、B、C、D,记在转弯过程中AB便于水平走
廊的夹角为 ,延长AB边交水平和垂直的走廊与P、Q点,记走廊的拐角点为O。分别作OE、OF垂
直于水平和垂直的走廊于E、F点。从图-2可以看出,当病床的宽度一定时可以很方便地求出冰床的长
(2)
2
PQ
PO
OQ
w cos
w sin
(0 ,w0) 2
(3)
PA AC tg h tg wtg ( 0 , 0 1, w 0 ) (4) 2
BQ BF ctg h ctg wctg ( 0 , 0 1,) (5) 2
运行结果 X= 2.0000 2.0000 4.0000
3.0000 3.0000 0.0000 8.0000 fval = 11000 所以周一开始工作到从周日开始工作的雇员数分别为 2 人、2 人、4 人、3 人、3 人、0 人、8 人时,总聘用费用最少为 11000 元。
二. 完成教材 P218 的 1,2,3 题实验
度AB,但是,当病床的长度一定时,要计算病床的宽度就比较麻烦,因此我们从定宽变长的角度来考虑
问题。这样就得到了这个问题的模型二。
假设:1、在转弯过程中我们的策略是转动与推进相结合;
2、在转弯的过程中,病床的宽度 h w 保持不变(显然 0 1 )。
记当病床的AB边与水平走廊的夹角为 时,恰好与走廊相抵的病床长度AB为 L( , w, ) (参看
最小值点取在 x=-1.5715 处,然而,当区间为[-2,2]时,函数的最小值为-1.1312<-0.9359,相应的 x 值 为 0.2176,即没有得到最小值,所以上述程序运行结果不正确。为了改进这个结果,可以在求最小值前先 将函数在一个较大区间内的图像画出来,根据图像判断最小值的大致位置,将区间修改到一个较小的范围。 在这一题中图像为
图-2),显然
L(0, w, )
L(
, w, )
,故我们只需对 0
的情况进行讨论。由图-2知,
2
2
AC DB h w , APC QOF QDB , OE OF w ,并且有如下关系成立:
L( , ) PQ PA BQ ( 0 , 0 1)
推转过走廊的拐角。
二、模型一
这个问题看起来非常简单。先把病床推进走廊拐角,使靠拐角一边的中点恰好顶住拐角,然后转动病
床,只要病床另外一边的两个角在转动过程中碰不到走廊的墙即可把病床平推转过拐角。根据这个思路,
我们得到这个问题的第一个模型。 假设在转弯过程中我们的策略是先把病床推进走廊拐角,使靠拐角一边的中点恰好顶住拐角,然后转
A
)
的二
P
CE
图3
对照
一下生活中的相似经验,看看有没有什么遗漏。稍有搬家经验的人都知
道,
在把体积庞大的家俱搬过走廊拐角时单靠转动往往是的无法完成的,我们必须采取转动与推进相结合的办
法才能把家俱搬过走廊拐角。那么,采用转动与推进相结合转弯策略会有不同的结论呢?
三、模型二
从表面上看,直接求解这个问题似乎不好下手,但是,如果我们换一个角度来看问题,即把转弯过程
可以看出最小值在 0 附近,因此可将区间改为[-1,1],从而得到正确结果: Matlab 程序
[X,fval,exitflag,output]=fminbnd(fun,-1,1)
运行结果 X=
0.2176
fval = -1.1312
exitflag = 1
output = iterations: 9 funcCount: 10 algorithm: 'golden section search, parabolic interpolation' message: 'Optimization terminated:
实验报告 二
一. 完成教材 P213 的 1,2,3 题
题目 1:
程序代码
clear; C=[3,2,-8,5]; A=[-3,6,-5,2;7,-3,-1,3]; B=[-3;-1]; aeq=[1,8,1,-1]; beq=-2; LB=[0;;0;]; [X,fval]=linprog(C,A,B,aeq,beq,LB); X
题目二
Matlab 程序
fun='(x^2+4*x+4)'; ezplot(fun,[-4,4]) [X,fval,exitflag,output]=fminbnd(fun,-4,2)
中的病床看作是长度和宽度都可以变化的活动床,那么,只要我们就可以从两个角度来考虑这个问题:一
个角度是求出当床长度一定时可以转过走廊的最小宽度,显然这个最小宽度是由走廊宽度和病床长度确定
的;另一个角度是求出当病床宽度一定时的最小长度,同样的道理,这个最小长度是由走廊宽度和病床宽
度确定的。这样一来就可以得到问题的答案。
运行结果 X=
11.0000 3.0000 0.0000 0.0000 1.5000
fval =
-9.5000
题目 3
解:根据题意我们可以建立目标函数和约束条件
目标函数: min z 5 100(x1 x2 x3 x4 x5 x6 x7)
x1 x4 x5 x6 x7 16 x1 x2 x5 x6 x7 15 x1 x2 x3 x6 x7 16 约束条件: x1 x2 x3 x4 x7 19 x1 x2 x3 x4 x5 14 x2 x3 x4 x5 x6 12 x3 x4 x5 x6 x7 18
-8.2197 fval =
-1.0156e+04 exitflag =
1 output =
iterations: 9 funcCount: 10 algorithm: 'golden section search, parabolic interpolation' message: 'Optimization terminated:
1
output =
iterations: 11 funcCount: 12 algorithm: 'golden section search, parabolic interpolation'
message: 'Optimization terminated: the current x satisfies the term...'
的充分必要条件是:病床长度 L Lmin (w, ) 。因此,问题归结为求函数 L( , w, ) 关于变量 的最小值
Lmin (w, ) 。
令 t sin cos 得:1 t
2
, sin
cos
t2
1
,代入(6)式得
2
L( , w, ) f (t, w, )
the current x satisfies the term...'
所以 f(x)得最小值为-1.0156e+004
三. 完成教材 P222 的 的 1,2
题目一
Matlab 程序
%confun1.m function [c,ceq]=confun1(x) c=[-x(1)+1;-x(2)]; ceq=[]; end
x1, x2 , x3, x4 , x5 , x6 , x7 均大于 0 且为整数
程序代码
clear c=5*[100,100,100,100,100,100,100]; A=[-1,0,0,-1,-1,-1,-1; -1,-1,0,0,-1,-1,-1; -1,-1,-1,0,0,-1,-1; -1,-1,-1,-1,0,0,-1; -1,-1,-1,-1,-1,0,0; 0,-1,-1,-1,-1,-1,0; 0,0,-1,-1,-1,-1,-1]; b=[-16,-15,-16,-19,-14,-12,-18]; LB=[0;0;0;0;0;0;0]; [X,fval]=intlinprog(c,A,b,[],[],LB,[])
%myfun1.m function f=myfun1(x) f=1/3*(x(1)+1)^3+x(2); end
运行结果
所以 f(x)得最小值为 2.6667。
题目二
Matlab 程序
%myfun2.m function f=myfun2(x) f=2*x(1)^2+2*x(2)^2-2*x(1)*x(2)-4*x(1)-6*x(2); end
%confun2.m function [c,ceq]=confun2(x) c=[x(1)+x(2)-2;x(1)+5*x(2)-5]; ceq=[];
end
运行结果
所以 f(x)得最小值为-7.1613。
四.病床转弯问题
病床转弯问题的数学模型
一、问题
如图-1 所示,设走廊宽度为 w 、病床长度 L 、病床宽度 h 三者之间的关系来解决,即归结为如下形式 的问题:已知走廊宽度为 w ,病床长度和宽度分别为 L 和 h ,当 w 、 L 、 h 满足是么关系时可以把病床平
运行结果 X=
0.0000 0.0000 -0.0371 2.9092
fval =
fval
14.8428
题目 2:
程序
f=[-1,1,1,1,-1]; A=[0,0,1,0,6;0,0,-1,0,-6;1,-4,0,0,2;-1,4,0,0,-2;0,2,0,1, 2;0,-2,0,-1,-2]; b=[9,-9,2,-2,9,-9]; LB=[0;0;0;0;0]; [X,fval]=linprog(f,A,b,[],[],LB)
将(3)、(4)、(5) 式代入(2)式得
L(
,
w,
)
w
sin cos sin cos
( 0 , 0 1, w 0 ) 2
(6)
只要求出 L( , w, ) 关于变量 的最小值 Lmin (w, ) ,我们立即可以得到病床可以平推转过走廊拐角
2w
t t2 1
2w( t
1 1
t121), 其中
(1
t
2 , w 0 ,0 1)
(7)
注意到(7)式中当1 t
题目一
直接将区间范围改为[-5,5]时,结果如下: Matlab 程序代码
fun='(x^5+x^3+x^2-1)/(exp(x^2)+sin(-x))'; [X,fval,exitflag,output]=fminbnd(fun,-5,5) 运行结果 X=
-1.5715
fval =
-0.9359
exitflag =
图2
只要
L 2 h2 w2 2
0hw
化简得: L 2 w2 h2
源自文库
0hw
(1)
即:当病床的长度 L 不超过走廊宽度 w 与病床宽度 h 的平方差的平方根
倍时,我们就可以把病床平推转过走廊拐角。 到此,我们似乎已经完全解决了这个问题。在下结论之前,我们来
Q B
O
F
D
运行结果 X=
-2 fval =
0 exitflag =
1 output =
iterations: 5 funcCount: 6
所以 f(x)得最小值为 0。
题目三
Matlab 程序
fun='((x-2)^4*sin(x)-(x-1)^2*cos(x))'; ezplot(fun,[-10,10]) [X,fval,exitflag,output]=fminbnd(fun,-10,-6) 运行结果 X=
动病床。由于当病床宽度超过走廊宽度时不可能把病床推进走廊,因
设0 h w。
如图 2 所示, AO OB L , AC BD h 。在转动过程中 2
B O
D A
此假
C, D
两点的轨迹是一 O 点为圆心, R OC OD 为半径的圆弧,因此,
C
圆弧的半径不超过走廊宽度就可以 把病床平推过走廊拐角,即:
那么究竟是从定长变宽的角度考虑问题好还是从定宽变长的角度来考虑问题好?在图-3 中,从病床的
左上角开始按顺时针方向对病床的四个顶点进行编号为A、B、C、D,记在转弯过程中AB便于水平走
廊的夹角为 ,延长AB边交水平和垂直的走廊与P、Q点,记走廊的拐角点为O。分别作OE、OF垂
直于水平和垂直的走廊于E、F点。从图-2可以看出,当病床的宽度一定时可以很方便地求出冰床的长
(2)
2
PQ
PO
OQ
w cos
w sin
(0 ,w0) 2
(3)
PA AC tg h tg wtg ( 0 , 0 1, w 0 ) (4) 2
BQ BF ctg h ctg wctg ( 0 , 0 1,) (5) 2
运行结果 X= 2.0000 2.0000 4.0000
3.0000 3.0000 0.0000 8.0000 fval = 11000 所以周一开始工作到从周日开始工作的雇员数分别为 2 人、2 人、4 人、3 人、3 人、0 人、8 人时,总聘用费用最少为 11000 元。
二. 完成教材 P218 的 1,2,3 题实验
度AB,但是,当病床的长度一定时,要计算病床的宽度就比较麻烦,因此我们从定宽变长的角度来考虑
问题。这样就得到了这个问题的模型二。
假设:1、在转弯过程中我们的策略是转动与推进相结合;
2、在转弯的过程中,病床的宽度 h w 保持不变(显然 0 1 )。
记当病床的AB边与水平走廊的夹角为 时,恰好与走廊相抵的病床长度AB为 L( , w, ) (参看
最小值点取在 x=-1.5715 处,然而,当区间为[-2,2]时,函数的最小值为-1.1312<-0.9359,相应的 x 值 为 0.2176,即没有得到最小值,所以上述程序运行结果不正确。为了改进这个结果,可以在求最小值前先 将函数在一个较大区间内的图像画出来,根据图像判断最小值的大致位置,将区间修改到一个较小的范围。 在这一题中图像为
图-2),显然
L(0, w, )
L(
, w, )
,故我们只需对 0
的情况进行讨论。由图-2知,
2
2
AC DB h w , APC QOF QDB , OE OF w ,并且有如下关系成立:
L( , ) PQ PA BQ ( 0 , 0 1)
推转过走廊的拐角。
二、模型一
这个问题看起来非常简单。先把病床推进走廊拐角,使靠拐角一边的中点恰好顶住拐角,然后转动病
床,只要病床另外一边的两个角在转动过程中碰不到走廊的墙即可把病床平推转过拐角。根据这个思路,
我们得到这个问题的第一个模型。 假设在转弯过程中我们的策略是先把病床推进走廊拐角,使靠拐角一边的中点恰好顶住拐角,然后转
A
)
的二
P
CE
图3
对照
一下生活中的相似经验,看看有没有什么遗漏。稍有搬家经验的人都知
道,
在把体积庞大的家俱搬过走廊拐角时单靠转动往往是的无法完成的,我们必须采取转动与推进相结合的办
法才能把家俱搬过走廊拐角。那么,采用转动与推进相结合转弯策略会有不同的结论呢?
三、模型二
从表面上看,直接求解这个问题似乎不好下手,但是,如果我们换一个角度来看问题,即把转弯过程
可以看出最小值在 0 附近,因此可将区间改为[-1,1],从而得到正确结果: Matlab 程序
[X,fval,exitflag,output]=fminbnd(fun,-1,1)
运行结果 X=
0.2176
fval = -1.1312
exitflag = 1
output = iterations: 9 funcCount: 10 algorithm: 'golden section search, parabolic interpolation' message: 'Optimization terminated:
实验报告 二
一. 完成教材 P213 的 1,2,3 题
题目 1:
程序代码
clear; C=[3,2,-8,5]; A=[-3,6,-5,2;7,-3,-1,3]; B=[-3;-1]; aeq=[1,8,1,-1]; beq=-2; LB=[0;;0;]; [X,fval]=linprog(C,A,B,aeq,beq,LB); X