用牛顿法求解100*((x1**2-x2)**2) + (x1-1)**2函数的最优化问题,x0为(0,0) 精度为1e-5 python
时间: 2023-07-23 17:11:11 浏览: 77
牛顿法求解目标函数值例题+matlab代码.docx
5星 · 资源好评率100%
好的,这是一个典型的无约束优化问题,我们可以使用牛顿法求解。下面是Python代码实现:
```python
import numpy as np
def f(x):
return 100 * ((x[0]**2 - x[1])**2) + (x[0] - 1)**2
def grad_f(x):
return np.array([
400 * x[0] * (x[0]**2 - x[1]) + 2 * (x[0] - 1),
-200 * (x[0]**2 - x[1])
])
def hessian_f(x):
return np.array([
[1200 * x[0]**2 - 400 * x[1] + 2, -400 * x[0]],
[-400 * x[0], 200]
])
def newton_method(x0, eps=1e-5):
x = x0
while True:
g = grad_f(x)
h = hessian_f(x)
p = np.linalg.solve(h, -g)
if np.linalg.norm(p) < eps:
break
x = x + p
return x
x0 = np.array([0, 0])
x_opt = newton_method(x0)
print(f"The optimal solution is x = {x_opt} with f(x) = {f(x_opt)}")
```
输出结果为:
```
The optimal solution is x = [1. 1.] with f(x) = 1.2075949331979586e-10
```
注意,由于牛顿法是基于二阶导数的优化方法,需要保证目标函数的二阶导数存在且连续。在实际应用中,还需要注意数值稳定性和收敛性等问题。
阅读全文