一、问题
一幢楼房的后面是一个很大的花园,在花园中紧靠着楼房有一个温室,温室伸入花园宽2m,高3m,温室正上方是楼房的窗台。清洁工打扫窗台周围,他得用梯子越过温室,一头放在花园中,一头靠在楼房的墙上。因为温室是不能承受梯子压力的,所以梯子太短是不行的。现清洁工只有一架7m长的梯子,你认为它能达到要求吗?能满足要求的梯子的最小长度为多少?
二、目的
掌握一元函数极值的驻点法,并会用它解决一些实际问题;掌握MATLAB求极小值的命令fminbnd( )。
三、预备知识
1.一元函数的极值及最值的求法。
2.MATLAB求极小值命令提示
格式 x = fminbnd(fun,x1,x2) %返回自变量x在区间 上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。
x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项
[x,fval] = fminbnd(…) % fval为目标函数的最小值
[x,fval,exitflag] = fminbnd(…) %exitflag为终止迭代的条件
[x,fval,exitflag,output] = fminbnd(…) % output为优化信息
说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。
设:梯子与地面角度为 x
花园宽2m,高3m
函数 (2/cos(x))+(3/sin(x))
梯子最小长度 fval
程序如下:
>> [x,fval,exitflag,output] = fminbnd('(2/cos(x))+(3/sin(x))',0,pi/2,x)
x =
0.8528
fval =
7.0235
exitflag =
1
output =
iterations: 8
funcCount: 9
algorithm: 'golden section search, parabolic interpolation'
message: [1x112 char]