優化方法 牛頓法例項

2022-07-15 19:54:14 字數 2431 閱讀 7699

0. 前言

上一節中已經介紹了牛頓法的一些原理,在本節中舉個具體例子,利用牛頓法求解函式最小值。

1. 例子

求解下列函式最小值:

由於這個函式較為簡單,所以利用f對x、y分別求偏導數,再令偏導數等於0,就可以求得極值點,又該函式是凸函式(如果分析不出,視覺化函式,如下圖),所以極值點就是最小值點,故最小值點(-1,1.5).在這裡的話,利用牛頓迭代法求解函式最小值。

步驟:

2. 實施細節

%% 部分參考

% objective function: f(a,b) = 2*a^2 + b^2 + 2*a*b + a -b

clear;clc;close

a=[4,2;2,2

];x=[2;-2

];tmp=[0;0

];b=[0;0

];delta = 1.0e-8

; %前後兩次迭代差值

error=1

;k=1

;max_iters = 10000

;history = zeros(max_iters,2

);while(k<=max_iters && error >delta)

b=[4*x(1,1)+2*x(2,1)+1;2*x(2,1)+2*x(1,1)-1

];tmp=x - inv(a)*b;

error=norm(x-tmp,2

);x=tmp;

history(k,

1) = x(1

);history(k,

2) = x(2

);k = k + 1

;end

x1=x(1,1

);x2=x(2,1

);f=2*x1*x1+x2*x2+2*x1*x2+x1-x2;

fprintf(

'a=%f,b=%f,f=%f,k=%f

',x1,x2,f,k-1

);%% 繪圖

[x,y] = meshgrid(-4:.2:4

); % 產生網格資料x和y

len =size(x);

z = 2.* power(x,2) + power(y,2) + 2* x.*y + x -y;

[dx,dy] = gradient(z,0.2,0.2

); % 計算曲面上各點處的梯度

subplot(

2,2,1

);surfc(x,y,z)

xlabel('x

');ylabel('

y');zlabel('z'

);hold on;

subplot(

2,2,2

);contour(x,y,z,

50) ; % 繪製等高線

title(

'等高線')

subplot(

2,2,3

);quiver(x,y,dx,dy); % 繪製梯度場

title(

'梯度場')

subplot(

2,2,4

);contour(x,y,z,

50) ; % 繪製等高線

hold on;

quiver(x,y,dx,dy) ; % 繪製梯度場

title(

'梯度場 + 等高線')

xlabel('x

');ylabel('y

');h = get(gca,'

children

'); % 獲取當前axes物件的所有子物件的控制代碼

set(h, '

color

','k

'); % 設定當前axes物件的所有子物件的顏色為黑色

%% 繪製牛頓法迭代軌跡

x0 = [2,-2

];track =[x0; history];

hold on;

subplot(

2,2,4

);plot(track(

1:3,1),track(1:3,2),'

rx','

markersize

',5,'

linewidth

',1);

plot(track(

1:3,1),track(1:3,2),'

b--','

markersize

',1,'

linewidth

',1);

結果:

a=-1.000000,b=1.500000,f=-1.250000,k=2.000000>>
參考文獻

優化演算法 牛頓法

牛頓法 英語 newton s method 又稱為牛頓 拉弗森方法 英語 newton raphson method 它是一種在實數域和複數域上近似求解方程的方法。方法使用函式f x 的泰勒級數的前面幾項來尋找方程f x 0的根。一般情況對於f x 是一元二次的情況直接應用求根公式就可以了,但是對...

最優化演算法 牛頓法

牛頓搜尋演算法,參考edwin 最優化導論 7.5章節,演算法採用go語言實現。filename newton search.go author fredric date 2017.09.01 note 牛頓搜尋演算法 history package search import fmt math 根...

最優化演算法 牛頓法

牛頓搜尋演算法,參考edwin 最優化導論 7.5章節,演算法採用go語言實現。filename newton search.go author fredric date 2017.09.01 note 牛頓搜尋演算法 history package search import fmt math 根...