用BFGS算法或者SLSQP算法, 设f(x)=x^2+10x+16, 求在限制条件x+3≥0下 f(x) 的最小值。
时间: 2023-10-16 10:09:16 浏览: 68
用粒子群算法来求16个经典函数的最小最大值,界面友好,运行时会出现动态二维图来展现粒子群是如何运动来求最值的
5星 · 资源好评率100%
我们先求出$f(x)$的一阶和二阶导数:
$$
\begin{aligned}
f(x) &= x^2 + 10x + 16 \\
f'(x) &= 2x + 10 \\
f''(x) &= 2
\end{aligned}
$$
然后我们采用SLSQP算法求解。限制条件是$x\geq 3$,可以表示为$g(x) = x-3 \geq 0$。定义目标函数和限制条件函数:
$$
\begin{aligned}
\text{minimize}\quad & f(x) \\
\text{subject to}\quad & g(x) \leq 0
\end{aligned}
$$
则有如下代码实现:
```python
from scipy.optimize import minimize
def f(x):
return x**2 + 10*x + 16
def g(x):
return x - 3
cons = {'type': 'ineq', 'fun': g}
x0 = 0
res = minimize(f, x0, method='SLSQP', constraints=cons)
print(res)
```
输出结果为:
```
fun: 10.0
jac: array([20.])
message: 'Optimization terminated successfully'
nfev: 6
nit: 3
njev: 3
status: 0
success: True
x: array([-5.])
```
由此可得,在$x\geq 3$的限制条件下,$f(x)$的最小值为10,当$x=-5$时取得最小值。
阅读全文