单变量最小化可以单独解决对应的最优化问题,但更多的是作为更复杂最优化问题的基础进行使用。常用的单变量最小化算法有黄金分割法和Brent法等。下面结合一个实例介绍在MATLAB和Python中怎样求解单变量最小化问题。
对边长为3m的正方形铁板,在4个角处剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
假设剪去的正方形的边长为x,则水槽的容积为
\[f(x)=(3-2x{)}^{2}x\]
现在要求在区间(0,1.5)上确定一个x,使\(f(x)\)最大化。
Python中可以使用SciPy包进行求解。使用该包前需要先进行安装。在电脑连接互联网的情况下,在Power Shell窗口键入:
pip install scipy
进行安装。使用SciPy包中的optimize子包进行求解。
在Python IDLE Shell窗口键入下面的命令行,先定义计算目标函数的函数f:
code.python
>>> def f(x):
return -(3-2*x)**2*x
然后从scipy.optimize子包中导入minimize_scalar函数进行求解。
code.python
>>> from 400">scipy.optimize import minimize_scalar
>>> res=minimize_scalar(f,bounds=(0,1.5),method=class="text-primary">'bounded')
>>> res
fun: -1.9999999999962486
message: class="text-primary">'Solution found.'
nfev: 10
status: 0
success: class="text-secondary">True
x: 0.5000007907227136
即剪掉的正方形的边长为0.5m时水槽的容积最大。