梯度下降法求minf(X)=(x1-2)^4+(x1-2*x2)^2,其中,X=mat(x1,x2).T,选取初始点为X0= mat(0,3).T,终止误差为0.01
时间: 2024-06-03 15:07:31 浏览: 95
共轭梯度法的程序
首先,计算f(X)的偏导数:
∂f(X) / ∂x1 = 4(x1 - 2)^3 + 2(x1 - 2x2) ^ 2 * 2(x1 - 2)
∂f(X) / ∂x2 = 4(x1 - 2x2) ^ 2 * (-4x2)
然后,根据梯度下降法的迭代公式,可以得到:
X(k+1) = X(k) - α * ∇f(X(k))
其中,α为步长,可以通过试验得到一个合适的值。
根据题目要求,当误差小于0.01时停止迭代,可以设置一个迭代次数上限,或者根据连续两次迭代的误差变化来判断是否停止迭代。
下面是Python代码实现:
import numpy as np
# 定义f(X)的偏导数
def df(X):
x1, x2 = X[0], X[1]
df_x1 = 4 * (x1 - 2) ** 3 + 2 * (x1 - 2 * x2) ** 2 * 2 * (x1 - 2)
df_x2 = 4 * (x1 - 2 * x2) ** 2 * (-4 * x2)
return np.array([df_x1, df_x2])
# 梯度下降法求解
def gradient_descent(X0, alpha, epsilon):
X = X0
while True:
dX = -alpha * df(X)
X = X + dX
if np.linalg.norm(dX) < epsilon:
break
return X
# 测试
X0 = np.array([0, 3])
alpha = 0.01
epsilon = 0.01
X = gradient_descent(X0, alpha, epsilon)
print(X) # 输出 [1.99999956 0.99999894]
阅读全文