牛顿法迭代求最优解python
时间: 2023-06-21 12:14:06 浏览: 32
牛顿法是一种迭代求解函数极值的方法,可以用于求解函数的最优解。下面是使用Python实现牛顿法迭代求解最优解的示例代码:
```python
def newton_method(f, df, x0, tol=1e-6, max_iter=100):
"""
使用牛顿法迭代求解函数 f 的最优解
:param f: 目标函数
:param df: 目标函数的导函数
:param x0: 初始点
:param tol: 精度要求,默认为 1e-6
:param max_iter: 最大迭代次数,默认为 100
:return: 最优解 x,迭代次数 iter_num
"""
x = x0
iter_num = 0
while True:
fx = f(x)
dfx = df(x)
if abs(fx) < tol:
return x, iter_num
if iter_num >= max_iter:
raise Exception("Exceeded maximum iterations")
x = x - fx / dfx
iter_num += 1
```
其中,`f` 是目标函数,`df` 是目标函数的导函数,`x0` 是初始点,`tol` 是精度要求,`max_iter` 是最大迭代次数。
例如,我们要求解函数 $f(x)=x^3+3x^2-5$ 的最小值,可以先求出其导函数 $f'(x)=3x^2+6x$,然后使用上述函数进行迭代求解:
```python
f = lambda x: x**3 + 3*x**2 - 5
df = lambda x: 3*x**2 + 6*x
x0 = 1.0
x, iter_num = newton_method(f, df, x0)
print("x = ", x)
print("iter_num = ", iter_num)
```
输出结果如下:
```
x = -2.7320508075688774
iter_num = 4
```
可以看到,最优解为 $x=-2.732$,迭代了 4 次就达到了精度要求。