MATLAB-fminsearch函数的使用
?????fminsearch函數用來求解多維無約束的線性優化問題
?????用derivative-free的方法找到多變量無約束函數的最小值
???
語法
???x = fminsearch(fun,x0)
???x = fminsearch(fun,x0,options)
???[x,fval] = fminsearch(...)
???[x,fval,exitflag] = fminsearch(...)
???[x,fval,exitflag,output] = fminsearch(...)
????解釋
????fminsearch能夠從一個初始值開始,找到一個標量函數的最小值。通常被稱為無約束非線性優化
????x = fminsearch(fun,x0) 從x0開始,找到函數fun中的局部最小值x,x0可以是標量,向量,矩陣。fun是一個函數句柄
????x = fminsearch(fun,x0,options) 以優化參數指定的結構最小化函數,可以用optimset函數定義這些參數。(見matlab help)
[x,fval] = fminsearch(...)返回在結果x出的目標函數的函數值
[x,fval,exitflag] = fminsearch(...) 返回exitflag值來表示fminsearch退出的條件:
1--函數找到結果x
0--函數最大功能評價次數達到,或者是迭代次數達到
-1--算法由外部函數結束
[x,fval,exitflag,output] = fminsearch(...) 返回一個結構輸出output,包含最優化函數的信息:output.algorithm 使用的優化算法
output.funcCount 函式計算次數
output.iterations 迭代次數
output.message 退出信息
?
另外
fun是需要最小化的函數,他的輸入為input,輸出為標量f,目標函數在x上作出估計,函數可以為M文件的一個句柄函數(當是M文件時,用單引號括起文件名):
functionx = fminsearch(@myfun, x0)
這里function f = myfun(x)
f = ... 其自變量為x
或者直接寫出
asx = fminsearch(@(x)sin(x^2), x0);
?
例子
例1:一個典型的測試就是求多維the Rosenbrock banana function函數的最小值,其最小值在(1,1),其值為0. 一般開始迭代在(-1.2,1). 這里定義一個句柄函數banana = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;將這個函數傳遞給fminsearch為x,fval] = fminsearch(banana,[-1.2, 1])。結果
x =
????1.0000????1.0000
????
fval =
????8.1777e-010
說明函數在x處有近似于0的最小值,且估計結果有四位小數
例2:
如果fun是有參數的,那么可以定義個匿名函數去獲得獨立的參數,例如,若果需要估計的函數為
function f = myfun(x,a)
f = x(1)^2 + a*x(2)^2
因為myfun中有一個位置參數a,所以不能直接傳給fminsearch中。所以需要最優化具體的a,例如a = 1.5
首先定義 a = 1.5;
然后x = fminsearch(@(x) myfun(x,a),[0,1])
?
?
for a specific value of a, such as a = 1.5.Assign the value to a. a = 1.5; % define parameter firstCall fminsearch with a
one-argument anonymous function that captures that value of a and
calls myfun with two arguments:x = fminsearch(@(x) myfun(x,a),[0,1])
例3 我們可以將例1中的banana函數改變一下,這樣最小值點改變到了[a,a^2].
對于一個特定的a,如a=sqrt(2),我們可以如下做
a = sqrt(2);
banana = @(x)100*(x(2)-x(1)^2)^2+(a-x(1))^2;
然后[x,fval] = fminsearch(banana, [-1.2, 1], optimset('TolX',1e-8));
則可以找到一個比默認值準確度高的x,使[sqrt(2), 2] 為最小值
算法
fminsearch使用單純型法,這是一種不會使用數值或者梯度分析的直接的方法
假如x的長度為n,那么會有n+1個頂點,兩維空間中,單純型是三角形,三維空間,他是一個錐形。搜索的每一步中,都會產生離當前單純型比較近的點,在新的點上的函數值回合單純型各個頂點上的值比較,一般都會有一個定點被替代,產生一個新的單純型,重復步驟,直到單純型的大小小于閾值。
限制
fminsearch可以處理不連續的問題,如果得不到全局最優,則其會得到局部最優
它只能最小化時數,復數并不在其能力范圍之內,且f(x)的返回值也必須是時數,如果x為復數,則其必須分解為實部和虛部兩部分。
?
我們可以稍微對進行一些變換,就可實現利用fminsearch進行參數估計。
例如,原始信號發生器模型為:Z=3*exp(-0.4*x)+12*exp(-3.2*x);
假設有兩個參數我們未知,即我們要進行參數估計的模型為
z=a(1)*exp(a(2)*x)+a(3)*exp(a(4)*x);
下面我們只需采用以下代碼就可以實現上述參數的估計。
x=[0:0.2:4]';
Z=3*exp(-0.4*x)+12*exp(-3.2*x);
c=[1 1 1 1];
options=optimset('fminsearch');
options.TolX=0.001;
options.Display='off';
[a,sfval,sexit,soutput]=fminsearch(@fun,c,options,x,Z)
函數定義為:
function E=fun(a,x,Z)
z=a(1)*exp(a(2)*x)+a(3)*exp(a(4)*x);
E=sum((Z-z).^2);
結果為:
a =
????3.0004???-0.4001???11.9994???-3.2000
sfval =
1.5099e-007
sexit =
?????1
soutput =
????iterations: 190
?????funcCount: 322
?????algorithm: 'Nelder-Mead simplex direct search'
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的MATLAB-fminsearch函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab读取/播放视频的函数(2)
- 下一篇: 人眼中亮斑的检测、定位和去除(2)