最优化--牛顿法求解多元函数极值例题(python)
一.问题给定一个函数f(x)=60-10x1-4x2+x12+x22-x1x2,利用牛顿法求解该函数的最小值,需给出中间结果。二.python代码import numpy as npimport matplotlib.pyplot as plt#牛顿法求解f = 60-10*x1-4*x2+x1**2+2*x2**2-x1*x2的极值#原函数#建立点的列表并关联起来X1=np.arange(-50
·
一.问题
给定一个函数f(x)=60-10x1-4x2+x12+x22-x1x2,利用牛顿法求解该函数的最小值,需给出中间结果。
二.python代码
import numpy as np
import matplotlib.pyplot as plt
#牛顿法求解f = 60-10*x1-4*x2+x1**2+2*x2**2-x1*x2的极值
#原函数
#建立点的列表并关联起来
X1=np.arange(-50,50,0.1)
X2=np.arange(-50,50,0.1)
[x1,x2]=np.meshgrid(X1,X2)
f = 60-10*x1-4*x2+x1**2+2*x2**2-x1*x2
plt.contour(x1,x2,f,20) # 画出函数的20条轮廓线
#求梯度
def jacobian(x):
return np.array([-10+2*x[0]-x[1],-4+2*x[1]-x[0]])
#求海森矩阵
def hessian(x):
return np.array([[2,-1],[-1,2]])
#牛顿法程序
def newton(x0):
W=np.zeros((2,10**2))
i = 1
imax = 100
W[:,0] = x0
x = x0
delta = 1
alpha = 1
#迭代条件,当迭代次数不少于100次并且精度大于0.1时进行循环
while i<imax and delta>0.1:
#将海森矩阵的逆与梯度相乘
p = -np.dot(np.linalg.inv(hessian(x)),jacobian(x))
x0 = x
x = x + alpha*p
W[:,i] = x
delta = sum((x-x0))
print('第',i,'次迭代结果:')
print(x,'\n')
i=i+1
W=W[:,0:i] # 记录迭代点
return W
#初始点
x0 = np.array([-40,40])
W = newton(x0)
plt.plot(W[0,:],W[1,:],'g*',W[0,:],W[1,:]) # 画出迭代点收敛的轨迹
plt.show()
三.结果
点击阅读全文
更多推荐
活动日历
查看更多
直播时间 2025-02-26 16:00:00


直播时间 2025-01-08 16:30:00


直播时间 2024-12-11 16:30:00


直播时间 2024-11-27 16:30:00


直播时间 2024-11-21 16:30:00


目录
所有评论(0)