最优化--牛顿法求解多元函数极值例题(python)
生活随笔
收集整理的這篇文章主要介紹了
最优化--牛顿法求解多元函数极值例题(python)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 一.問題
- 二.python代碼
- 三.結果
一.問題
給定一個函數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 = 1imax = 100W[:,0] = x0 x = x0delta = 1alpha = 1#迭代條件,當迭代次數不少于100次并且精度大于0.1時進行循環while i<imax and delta>0.1:#將海森矩陣的逆與梯度相乘p = -np.dot(np.linalg.inv(hessian(x)),jacobian(x))x0 = xx = x + alpha*pW[:,i] = xdelta = sum((x-x0))print('第',i,'次迭代結果:')print(x,'\n')i=i+1W=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()三.結果
總結
以上是生活随笔為你收集整理的最优化--牛顿法求解多元函数极值例题(python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 诺贝尔奖得主罗伯特·莫顿—唯有信任,方得
- 下一篇: SQL Server 2000~2017