日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB-fminsearch函数的使用

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB-fminsearch函数的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。