用python求最小值:z = x2 + y2 初值 x = 3, y=2 采用牛顿法求解
时间: 2023-08-16 17:09:34 浏览: 260
简单介绍Python中用于求最小值的min()方法
牛顿法是一种迭代求解函数零点或最值的方法。对于求解函数最小值的问题,我们需要求解函数的导数为0的点,即梯度为0的点。我们可以使用牛顿法来逼近这个点。具体步骤如下:
1. 定义函数 f(x,y) = x^2 + y^2
2. 求解函数的梯度 grad_f(x,y) = [2x, 2y]
3. 初值设为 x=3, y=2
4. 迭代更新公式为:
```
x_{n+1} = x_n - (grad_f(x_n, y_n) / H_f(x_n, y_n))_x
y_{n+1} = y_n - (grad_f(x_n, y_n) / H_f(x_n, y_n))_y
```
其中,H_f(x,y) 是函数 f(x,y) 的 Hessian 矩阵,即
```
H_f(x,y) = [[2, 0],
[0, 2]]
```
5. 重复步骤4直到收敛(梯度的模趋近于0)
下面是Python代码实现:
```python
def f(x, y):
return x**2 + y**2
def grad_f(x, y):
return [2*x, 2*y]
def H_f(x, y):
return [[2, 0], [0, 2]]
x = 3
y = 2
tol = 1e-6
while True:
grad = grad_f(x, y)
H = H_f(x, y)
dx = -grad[0] / H[0][0]
dy = -grad[1] / H[1][1]
x += dx
y += dy
if abs(grad[0]) < tol and abs(grad[1]) < tol:
break
print("min f(x,y) = %.6f, x = %.6f, y = %.6f" % (f(x, y), x, y))
```
运行结果为:
```
min f(x,y) = 0.000000, x = 0.000000, y = 0.000000
```
说明函数的最小值为0,在点 (0,0) 处取到。
阅读全文