2013-06-28 48 views
0

我正在使用fminunc。具體來說,我使用BFGS的準牛頓方法和用戶提供的漸變來最小化函數。它進行了大約3次迭代,然後做了一堆函數評估。我有一個函數,我試圖最小化它在調用時顯示它的值,而且我可以看到,在第4次迭代中調用幾次之後,它顯着小於第三次迭代中的值,但是Matlab繼續評估函數並且我不知道爲什麼。有什麼我可以調整來告訴它接受更新並轉到下一次迭代?Matlab如何決定接受fminunc中的一個步驟?

回答

1

聽起來像是你理解優化得很好,讓我們看看,如果我們可以用optimset設置幫助。從mathworks docs它調用瞭如何放鬆公差終止與下列參數的優化:在函數值

TolFun終止寬容,積極的標量。 默認值是1e-6。在X

TolX終止寬容,積極的標量。默認值是 1e-6。

聽起來像是你有優化工具箱,在這種情況下,我相信你可以使用optimset得到優化參數,然後使用fminunc進行初始化。(該文檔爲常規optimset不叫指出,您可以通過fminunc作爲參數,但我認爲它會在工具箱版本。

options = optimset('fminunc'); 
% you can try either of these two or both, but I would 
% recommend only changing one at a time :-) 
options = optimset(options,'TolFun',myNewTolFun) 
options = optimset(options,'TolX',myNewTolX) 
% then you can make your call to the optimizer 
x = fminunc(fun,x0,options) 

上的Optim的設置難以忍受的細節可以發現here