MATLAB 無約束一維極值問題
阿新 • • 發佈:2019-02-01
無約束一維極值問題
極值問題表示式:min f(x) x,x[ x1 x2];
一維極值的搜尋方式包括線性搜尋和非線性搜尋,線性搜尋包含黃金分割法、斐波那契法和牛頓法,非線性方法包含拋物線法和三次樣條插值。
1、進退法
演算法原理:
進退法就是用來確定搜尋區間的演算法,理論依據:f(x)為函式有一極值,且【a b】為極值的區間,對於任一x1 和x2屬於【a b】,如果f(x1)<f(x2),則【a x2】為極小值的搜尋區間,如果f(x1)>f(x2),則搜尋區間為【x1 b】為極小值的搜尋區間,
因此,給定初始值x0,初始搜尋步長h的情況下,首先以初始步長進行搜尋,計算f(x0+h) ,
(1)如果f(x0)<f(x0+h)
則搜尋區間為【x x+h】,為確定x,計算f(x0+ƪh),,
(2)如果f(x0)>f(x0+h)
則搜尋區間為【x+h x】,為確定x,計算f(x0+ƪh),,
演算法步驟:
1、給定初值x(0),初始步長h0,領h=h0,x(1)=x(0),k=0
2、給定x(4)=x(1)+h,置k=k+1
3、若f(x(4))<f(x(0)),則轉到4,否則轉到5
4、令x(2)=x(1),x(1)=x(4),f(x(2))=f(x(1)),f(x(1))=f(x(4)),令h=2*h
5、若k=1,轉到6,否則轉到7
6、令h=-h,x(2)=x(4),f(x(2))=f(x(4)), 轉到2
7、令x(3)=x(2),x(2)=x(1),x(1)=x(4),停止計算,極小點包含區間[x(0) x(1)],或者【x(3) x(1)]
演算法程式碼:
<span style="font-size:18px;"><strong>%進退法 % 功能:用進退法法求解一維函式極值 %目標函式:f % 初始點:x0 % 初始步長h0 % 精度 eps % 目標函式取包含極值的區間左端點 minx % 目標函式取包含極值的區間右端點 maxx function [minx,maxx]=minJT(f,x0,h0,eps) format long; if nargin==3 eps=1.0e-6; end x1=x0; k=0; h=h0; while 1 x4=x1+h; k=k+1; f4=subs(f,findsym(f),x4); f1=subs(f,findsym(f),x1); if f4<f1 x2=x1; x1=x4; f2=f1; f1=f4; h=2*h; else if k==1 h=-h; x2=x4; f2=f4; else x3=x2; x2=x1; x1=x4; break; end end end minx=min(x1,x3); maxx=x1+x3-minx; format short;</strong></span>