牛顿共轭梯度法求函数极值如何用python代码实现?
时间: 2023-07-27 22:09:47 浏览: 124
牛顿共轭梯度法是一种常用的优化算法,用于求解函数的极值。下面是一个使用 Python 实现牛顿共轭梯度法求函数极值的示例代码:
```python
import numpy as np
def f(x):
return x**2 + 2*x + 1
def gradf(x):
return 2*x + 2
def hessf(x):
return 2
def conjugate_gradient(f, gradf, hessf, x0, n_iter=1000, tol=1e-6):
x = x0
g = gradf(x)
d = -g
for i in range(n_iter):
alpha = -np.dot(g, d) / np.dot(d, np.dot(hessf(x), d))
x = x + alpha * d
g_new = gradf(x)
beta = np.dot(g_new, np.dot(hessf(x), d)) / np.dot(d, np.dot(hessf(x), d))
d = -g_new + beta * d
if np.linalg.norm(g_new) < tol:
break
g = g_new
return x
x0 = np.array([0])
x_opt = conjugate_gradient(f, gradf, hessf, x0)
print("Optimal solution: x* = ", x_opt)
print("Minimum value: f(x*) = ", f(x_opt))
```
在这个示例中,我们定义了一个一元二次函数 $f(x) = x^2 + 2x + 1$,以及它的一阶导数 $f'(x) = 2x + 2$ 和二阶导数 $f''(x) = 2$。我们使用牛顿共轭梯度法来求解这个函数的极小值,初始点为 $x_0 = 0$。在代码中,我们使用了 Numpy 库来进行矩阵运算,并使用 `np.linalg.norm` 函数来计算向量的范数。
阅读全文