国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

瀏覽:34日期:2022-07-31 11:49:09

Rosenbrock函數的定義如下:

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

其函數圖像如下:

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

我分別使用梯度下降法和牛頓法做了尋找Rosenbrock函數的實驗。

梯度下降

梯度下降的更新公式:

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

圖中藍色的點為起點,橙色的曲線(實際上是折線)是尋找最小值點的軌跡,終點(最小值點)為 (1,1)(1,1)。

梯度下降用了約5000次才找到最小值點。

我選擇的迭代步長 α=0.002α=0.002,αα 沒有辦法取的太大,當為0.003時就會發生振蕩:

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

牛頓法

牛頓法的更新公式:

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

Hessian矩陣中的每一個二階偏導我是用手算算出來的。

python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例

牛頓法只迭代了約5次就找到了函數的最小值點。

下面貼出兩個實驗的代碼。

梯度下降:

import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import tickerdef f(x, y): return (1 - x) ** 2 + 100 * (y - x * x) ** 2def H(x, y): return np.matrix([[1200 * x * x - 400 * y + 2, -400 * x], [-400 * x, 200]])def grad(x, y): return np.matrix([[2 * x - 2 + 400 * x * (x * x - y)], [200 * (y - x * x)]])def delta_grad(x, y): g = grad(x, y) alpha = 0.002 delta = alpha * g return delta# ----- 繪制等高線 -----# 數據數目n = 256# 定義x, yx = np.linspace(-1, 1.1, n)y = np.linspace(-0.1, 1.1, n)# 生成網格數據X, Y = np.meshgrid(x, y)plt.figure()# 填充等高線的顏色, 8是等高線分為幾部分plt.contourf(X, Y, f(X, Y), 5, alpha=0, cmap=plt.cm.hot)# 繪制等高線C = plt.contour(X, Y, f(X, Y), 8, locator=ticker.LogLocator(), colors=’black’, linewidth=0.01)# 繪制等高線數據plt.clabel(C, inline=True, fontsize=10)# ---------------------x = np.matrix([[-0.2], [0.4]])tol = 0.00001xv = [x[0, 0]]yv = [x[1, 0]]plt.plot(x[0, 0], x[1, 0], marker=’o’)for t in range(6000): delta = delta_grad(x[0, 0], x[1, 0]) if abs(delta[0, 0]) < tol and abs(delta[1, 0]) < tol: break x = x - delta xv.append(x[0, 0]) yv.append(x[1, 0])plt.plot(xv, yv, label=’track’)# plt.plot(xv, yv, label=’track’, marker=’o’)plt.xlabel(’x’)plt.ylabel(’y’)plt.title(’Gradient for Rosenbrock Function’)plt.legend()plt.show()

牛頓法:

import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import tickerdef f(x, y): return (1 - x) ** 2 + 100 * (y - x * x) ** 2def H(x, y): return np.matrix([[1200 * x * x - 400 * y + 2, -400 * x], [-400 * x, 200]])def grad(x, y): return np.matrix([[2 * x - 2 + 400 * x * (x * x - y)], [200 * (y - x * x)]])def delta_newton(x, y): alpha = 1.0 delta = alpha * H(x, y).I * grad(x, y) return delta# ----- 繪制等高線 -----# 數據數目n = 256# 定義x, yx = np.linspace(-1, 1.1, n)y = np.linspace(-1, 1.1, n)# 生成網格數據X, Y = np.meshgrid(x, y)plt.figure()# 填充等高線的顏色, 8是等高線分為幾部分plt.contourf(X, Y, f(X, Y), 5, alpha=0, cmap=plt.cm.hot)# 繪制等高線C = plt.contour(X, Y, f(X, Y), 8, locator=ticker.LogLocator(), colors=’black’, linewidth=0.01)# 繪制等高線數據plt.clabel(C, inline=True, fontsize=10)# ---------------------x = np.matrix([[-0.3], [0.4]])tol = 0.00001xv = [x[0, 0]]yv = [x[1, 0]]plt.plot(x[0, 0], x[1, 0], marker=’o’)for t in range(100): delta = delta_newton(x[0, 0], x[1, 0]) if abs(delta[0, 0]) < tol and abs(delta[1, 0]) < tol: break x = x - delta xv.append(x[0, 0]) yv.append(x[1, 0])plt.plot(xv, yv, label=’track’)# plt.plot(xv, yv, label=’track’, marker=’o’)plt.xlabel(’x’)plt.ylabel(’y’)plt.title(’Newton’s Method for Rosenbrock Function’)plt.legend()plt.show()

以上這篇python使用梯度下降和牛頓法尋找Rosenbrock函數最小值實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日本亚州视频在线八a | 一级欧美一级日韩 | 午夜不卡av免费 | 真正全免费视频a毛片 | 亚洲国产一区二区三区在线观看 | 国产日本三级 | 国内精品久久久久影院亚洲 | 久久亚洲国产精品五月天 | 久久精品国产精品青草不卡 | 成人免费福利网站在线看 | 午夜香港三级a三级三点 | 99精品视频在线观看免费 | 成人性色大片 | 一级视频在线播放 | 男人的天堂免费网站 | 免费看a级肉片 | 国产成人精品永久免费视频 | 国产亚洲精品自在久久77 | 99久久精品免费看国产一区二区 | 欧美成人免费一级人片 | 青草久久网 | 久久久久9999| www.色亚洲| 三级中文字幕 | 国产成人综合久久精品红 | 18年大片免费在线 | 日韩精品在线免费观看 | 国产成人精品亚洲日本语音 | 亚洲视屏在线观看 | 黄色网址进入 | 国产第一夜| 日本一区二区三区在线 视频观看免费 | 亚洲悠悠色综合中文字幕 | 日韩视频在线观看一区二区 | 久久91视频 | 久久国产精品99久久小说 | 欧美一级毛片欧美大尺度一级毛片 | 久久成年视频 | 欧美日韩一区二区在线观看 | 国产一区二区久久久 | 精品国产亚洲一区二区在线3d |