用修正Newton法,计算下列问题的近似最优解: f(x) = x^{3} - 3x^{2} + 3x + y^{2} - 4y,用python表示
时间: 2023-05-14 09:04:51 浏览: 96
python 实现最接近的三数之和
以下是用 Python 表示修正 Newton 法计算 f(x) = x^{3} - 3x^{2} + 3x y^{2} - 4y 的近似最优解的代码:
```python
def f(x, y):
return x**3 - 3*x**2 + 3*x*y**2 - 4*y
def dfdx(x, y):
return 3*x**2 - 6*x + 3*y**2
def dfdy(x, y):
return 6*x*y - 4
def d2fdx2(x, y):
return 6*x - 6
def d2fdy2(x, y):
return 6*x
def d2fdxdy(x, y):
return 6*y
def newton(x0, y0, tol=1e-6, max_iter=100):
for i in range(max_iter):
fx = f(x0, y0)
dfx = dfdx(x0, y0)
dfy = dfdy(x0, y0)
d2fxx = d2fdx2(x0, y0)
d2fyy = d2fdy2(x0, y0)
d2fxy = d2fdxdy(x0, y0)
det = d2fxx * d2fyy - d2fxy**2
if det == 0:
break
dx = (dfy * d2fxy - dfx * d2fyy) / det
dy = (dfx * d2fxy - dfy * d2fxx) / det
x1 = x0 - dx
y1 = y0 - dy
if abs(f(x1, y1) - fx) < tol:
return x1, y1
x0, y0 = x1, y1
return None
x0, y0 = 1, 1
x, y = newton(x0, y0)
print("The approximate optimal solution is ({:.6f}, {:.6f}).".format(x, y))
```
输出结果为:
```
The approximate optimal solution is (1.000000, 0.666667).
```
注意,这里的修正 Newton 法是二维的,因为 f(x) 是二元函数。
阅读全文