最優化演算法與matlab應用3:最速下降法
最速下降法是一種沿著n維目標函式的負梯度方向搜尋最小值的方法。
(1)演算法原理
函式的負梯度表示如下:
搜尋步長可調整ak,通常記為 (第k次迭代的步長)。該演算法利用一維的線性搜尋方法,如二次逼近法,沿著負梯度方向不斷搜尋函式的較小值,從而找出最優解。
(2)演算法步驟
(3)演算法實現
%用最速下降法求最優化解
f3= inline(
'x(1)*(x(1)-5-x(2))+x(2)*(x(2)-4)','x'
);%目標函式
grad=inline(
'[2*x(1)-5-x(2),-x(1)+2*x(2)-4]','x'
); %目標函式的梯度函式
x0 =
[1 4]
;tolx = 1e-4;
tolfun = 1e-9;
maxiter = 100;
dist0=1;
[xo,fo]
= opt_steepest(f3,grad,x0,tolx,tolfun,dist0,maxiter)
執行結果:xo=4.666 4.333 fo=-20.333
function
[xo,fo]
= opt_steepest(f,grad,x0,tolx,tolfun,dist0,maxiter)
% 用最速下降法求最優化解
%輸入:f為函式名 grad為梯度函式
%x0為解的初值 tolx,tolfun分別為變數和函式的誤差閾值
%dist0為初始步長 maxiter為最大迭代次數
%輸出: xo為取最小值的點 fo為最小的函式值
% f0 = f(x(0))
%%%%%%判斷輸入的變數數,設定一些變數為預設值
if nargin < 7
maxiter = 100; %最大迭代次數預設為100
endif nargin < 6
dist0 = 10; %初始步長預設為10
endif nargin < 5
tolfun = 1e-8; %函式值誤差為1e-8
endif nargin < 4
tolx = 1e-6; %自變數距離誤差
end%%%%%第一步,求解的初值的函式值
x = x0;
fx0 = feval(f,x0)
;fx = fx0;
dist = dist0;
kmax1 = 25; %線性搜尋法確定步長的最大搜尋次數
warning = 0;
%%%%%迭代計算求最優解
for k = 1: maxiter
g = feval(grad,x)
; g = g/norm(g)
; %求在x處的梯度方向
%%線性搜尋方法確定步長
dist = dist*2; %令步長為原步長的二倍
fx1 = feval(f,x-dist*2*g)
;for k1 = 1:kmax1
fx2 = fx1;
fx1 = feval(f,x-dist*g)
;if fx0 > fx1+tolfun & fx1 < fx2 - tolfun %fx0 > fx1 < fx2,
den = 4*fx1 - 2*fx0 - 2*fx2;num = den - fx0 + fx2; %二次逼近法
dist = dist*num/den;
x = x - dist*g; fx = feval(f,x)
; %確定下一點
break
;else
dist = dist/2;
endend
if k1 >= kmax1
warning = warning + 1; %無法確定最優步長
else
warning = 0;
endif warning >= 2|
(norm(x - x0)
< tolx&abs(fx - fx0)
< tolfun)
break
; end
x0 = x;
fx0 = fx;
endxo = x; fo = fx;
if k == maxiter
fprintf(
'just best in %d iterations',maxiter)
;end
MATLAB 最優化計算 (二)
matlab 程式設計 1,for start increment end 若預設步長為1,則為 for start end end while condition end 2,matlab 程式 m script m function 字尾均為 m 指令碼檔案中儲存的是可用於自動重複執行的一組命令...
最優化 牛頓優化演算法
本人總結的常用優化演算法pdf版本,主要講解原理 主要包括梯度下降,共軛梯度法 牛頓法,擬牛頓法 信賴域方法,罰函式法。coding utf 8 author uniquez file 牛頓法,基於dfp的擬牛頓法 date 2017 06 24 remark 原方程為 x1 2 2 x2 2 im...
最優化 數值優化演算法
核心思路 對梯度方向做一些修正,使得每次迭代尋找最優點都在可行域的內部進行。我們從可行域內部的某個點開始搜尋,一開始沿著梯度方向進行迭代搜尋,一旦碰到邊界 說明下一步可能會離開可行域 就要扭轉方向,使得搜尋過程始終在可行域的內部進行。當點落在可行域外部時,該怎樣選擇搜尋方向,衍生出了下列的演算法。1...