一起來學演化計算-matlab優化函數fminunc
覺得有用的話,歡迎一起討論相互學習~
fminunc
- 求無約束多變量函數的最小值
- 非線性編程求解器
- 找到指定問題的最小值,\(min_{x}f(x)\) ,其中f(x)是一個返回一個標量的函數,x是一個向量或者矩陣。
語法
- x = fminunc(fun,x0)
- x = fminunc(fun,x0,options)
- x = fminunc(problem)
- [x,fval] = fminunc( ___ )
- [x,fval,exitflag,output] = fminunc( __ )
- [x,fval,exitflag,output,grad,hessian] = fminunc( ___ )
表示和描述
-
x = fminunc(fun,x0)從x0點開始,嘗試找到fun中描述的函數的一個局部最小x。點x0可以是標量、向量或矩陣。
-
Note fminunc適用於無約束的非線性問題。如果您的問題有約束,通常使用fmincon。參見優化決策表。
-
x = fminunc(fun,x0,options)通過選項中指定的優化選項最小化樂趣。使用 optimoptions 設置這些選項。
-
x = fminunc(problem)找到問題的最小值,其中問題是 Input Arguments 中描述的結構。
-
[x,fval] = fminunc( __ ),對於任何語法,返回目標函數在解x處的值
-
[x,fval,exitflag,output] = fminunc()另外返回一個描述fminunc退出條件的exitflag值,以及一個包含優化過程信息的結構輸出
-
[x,fval,exitflag,output,grad,hessian] = fminunc( __ )另外返回:
- 梯度-解x處的梯度。
- Hessian- 解決方案x的x1和x2的偏導。
-
\[Hessian=H _ { i j } = \frac { \partial ^ { 2 } f } { \partial x _ { i } \partial x _ { j } } \]
示例
最小化一個多項式
求函數梯度
使用問題結構
- 此和上一節的內容相同,但是使用了問題結構的模型,即為problem設置options,x0,objective,solver然后使用fminunc函數優化問題。
problem.options = options;
problem.x0 = [-1,2];
problem.objective = @rosenbrockwithgrad;
problem.solver = 'fminunc';
獲取最佳的目標函數值
- 沒看出和第一個例子有什么區別,但是我感覺第一個函數是能夠計算得到梯度的,而這個函數則不能夠直接計算出梯度信息
檢查解決方案過程
- 可以輸出優化過程和各種參數
輸入參數
Fun 需要被優化的函數
X0 初始點
選項
所有算法
- 尋優算法
- 如果函數能夠提供梯度則選擇"trust-region"選項,否則選擇 擬牛頓法 -"quasi-newton"
- 梯度檢查
- 顯示
- 有限差分類型和步長
- 函數終止
- 迭代調用其他函數
- 畫出結果
- 自定義梯度函數
- TypicalX