MATLAB 无约束一维极值问题
無約束一維極值問題
?
極值問題表達式:min?f(x)??x,x[?x1?x2];
?
一維極值的搜索方式包括線性搜索和非線性搜索,線性搜索包含黃金分割法、斐波那契法和牛頓法,非線性方法包含拋物線法和三次樣條插值。
?
1、進退法
??
算法原理:
?進退法就是用來確定搜索區(qū)間的算法,理論依據(jù):f(x)為函數(shù)有一極值,且【a?b】為極值的區(qū)間,對于任一x1?和x2屬于【a?b】,如果f(x1)<f(x2),則【a?x2】為極小值的搜索區(qū)間,如果f(x1)>f(x2),則搜索區(qū)間為【x1?b】為極小值的搜索區(qū)間,
因此,給定初始值x0,初始搜索步長h的情況下,首先以初始步長進行搜索,計算f(x0+h),
(1)如果f(x0)<f(x0+h)
則搜索區(qū)間為【x?x+h】,為確定x,計算f(x0+?h),,
(2)如果f(x0)>f(x0+h)
則搜索區(qū)間為【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),停止計算,極小點包含區(qū)間[x(0)?x(1)],或者【x(3)?x(1)]
?
算法代碼:
<span style="font-size:18px;"><strong>%進退法 % 功能:用進退法法求解一維函數(shù)極值 %目標函數(shù):f % 初始點:x0 % 初始步長h0 % 精度 eps % 目標函數(shù)取包含極值的區(qū)間左端點 minx % 目標函數(shù)取包含極值的區(qū)間右端點 maxx function [minx,maxx]=minJT(f,x0,h0,eps) format long; if nargin==3eps=1.0e-6; end x1=x0; k=0; h=h0; while 1x4=x1+h;k=k+1;f4=subs(f,findsym(f),x4);f1=subs(f,findsym(f),x1);if f4<f1x2=x1;x1=x4;f2=f1;f1=f4;h=2*h;elseif k==1h=-h;x2=x4;f2=f4;elsex3=x2;x2=x1;x1=x4;break;endend end minx=min(x1,x3); maxx=x1+x3-minx; format short;</strong></span>?
總結
以上是生活随笔為你收集整理的MATLAB 无约束一维极值问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab中varargin函数
- 下一篇: MATLAB 求图像的极大值极小值,平