優(yōu)化(Optimization)
單變量?jī)?yōu)化
?fminbnd - 查找單變量函數(shù)在定區(qū)間上的最小值
? ? fminbnd 是一個(gè)一維最小值,用于求由以下條件指定的問(wèn)題的最小值:
? ? x = fminbnd(fun,x1,x2)
? ? x = fminbnd(fun,x1,x2,options)
? ? x = fminbnd(problem)
? ? [x,fval] = fminbnd(___)
? ? [x,fval,exitflag] = fminbnd(___)
? ? [x,fval,exitflag,output] = fminbnd(___)
? ? 輸入?yún)?shù)
? ? ? ? fun - 要計(jì)算最小值的函數(shù)
? ? ? ? ? ? 函數(shù)句柄 | 函數(shù)名稱
? ? ? ? x1 - 下界
? ? ? ? ? ? 有限實(shí)數(shù)標(biāo)量
? ? ? ? x2 - 上界
? ? ? ? ? ? 有限實(shí)數(shù)標(biāo)量
? ? ? ? options - 優(yōu)化選項(xiàng)
? ? ? ? ? ? 結(jié)構(gòu)體,例如 optimset 返回的結(jié)構(gòu)體
? ? ? ? problem - 問(wèn)題結(jié)構(gòu)體
? ? ? ? ? ? 結(jié)構(gòu)體
? ? 輸出參數(shù)
? ? ? ? x - 解
? ? ? ? ? ? 實(shí)數(shù)標(biāo)量
? ? ? ? fval - 解處的目標(biāo)函數(shù)值
? ? ? ? ? ? 實(shí)數(shù)
? ? ? ? exitflag - fminbnd 停止的原因
? ? ? ? ? ? 整數(shù)
? ? ? ? output - 有關(guān)優(yōu)化過(guò)程的信息
? ? ? ? ? ? 結(jié)構(gòu)體
eg1.簡(jiǎn)單線搜索

fcn = @sin ;
x1 = 0;
x2 = 2*pi;
[x,fval,exitflag,output] = fminbnd(fcn,x1,x2)
x =
? ? 4.7124
fval =
? ?-1.0000
exitflag =
? ? ?1
output =?
? 包含以下字段的 struct:
? ? iterations: 8
? ? funcCount: 9
? ? algorithm: 'golden section search, parabolic interpolation'
? ??message: '優(yōu)化已終止:? 當(dāng)前的 x 滿足使用 1.000000e-04 的 OPTIONS.TolX 的終止條件?'
eg2.復(fù)雜函數(shù)線搜索

x1 = 1;
x2 = 3;
x = fminbnd(@fcn01,x1,x2)
x =
? ? 2.0061
這里的x即為所求的極值點(diǎn)。
function f = fcn01(x)
k = -10:10;
f = sum((k+1).^2.*cos(k.* x).*exp(-k.^2./2));
eg3.附加可變參數(shù)

objfcn = @(x,a) sin(x-a) ;
a = 9/7;
x1 = 1;
x2 = 2*pi;
[x,fval] = fminbnd(@(x)objfcn(x,a),x1,x2)
x =
? ? 5.9981
fval =
? ?-1.0000
optimset 為四個(gè) MATLAB? 優(yōu)化求解器設(shè)置選項(xiàng):fminbnd、fminsearch、fzero 和 lsqnonneg。
使用optimset進(jìn)行優(yōu)化
MaxFunEvals - 函數(shù)計(jì)算的最大次數(shù),對(duì)于fminbnd默認(rèn)500
Display - 顯示級(jí)別? 其中'iter' - 在每次迭代時(shí)顯示輸出(不適用于 lsqnonneg)
對(duì)可選的選項(xiàng)優(yōu)化
objfcn = @(x,a) sin(x-a) ;
a = 9/7;
x1 = 1;
x2 = 2*pi;
options = optimset("Display","iter","MaxFunEvals",20);
[x,fval] = fminbnd(@(x)objfcn(x,a),x1,x2,options)
Func-count? ? ?x? ? ? ? ? f(x)? ? ? ? ?Procedure
? ? 1? ? ? ? ? 3.018? ? ?0.986989? ? ? ? initial
? ? 2? ? ? ? 4.26519? ? ? 0.16141? ? ? ? golden
? ? 3? ? ? ? 5.03599? ? -0.571791? ? ? ? golden
? ? 4? ? ? ? 5.51238? ? -0.884337? ? ? ? golden
? ? 5? ? ? ? ?5.8068? ? -0.981757? ? ? ? golden
? ? 6? ? ? ? 6.05174? ? -0.998562? ? ? ? parabolic
? ? 7? ? ? ? 5.99981? ? -0.999999? ? ? ? parabolic
? ? 8? ? ? ? 5.99804? ? ? ? ? ?-1? ? ? ? parabolic
? ? 9? ? ? ? ?5.9981? ? ? ? ? ?-1? ? ? ? parabolic
? ?10? ? ? ? 5.99814? ? ? ? ? ?-1? ? ? ? parabolic
優(yōu)化已終止:
?當(dāng)前的 x 滿足使用 1.000000e-04 的 OPTIONS.TolX 的終止條件
x =
? ? 5.9981
fval =
? ?-1.0000
fminbnd計(jì)算的函數(shù)要是連續(xù)的,只能給出局部解
當(dāng)解在區(qū)間邊界上時(shí),fminbnd可能表現(xiàn)出慢收斂
fminbnd算法是基于黃金分割搜索和拋物線插值方法

無(wú)約束優(yōu)化
在matlab里支持fminuc、fminsearch
fminunc - 求無(wú)約束多變量函數(shù)的最小值
? ? 非線性規(guī)劃求解器。
? ? 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(___)
? ? 輸入?yún)?shù)
? ? ? ? fun - 要計(jì)算最小值的函數(shù)
? ? ? ? ? ? 函數(shù)句柄 | 函數(shù)名稱
? ? ? ? x0 - 初始點(diǎn)
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? options - 優(yōu)化選項(xiàng)
? ? ? ? ? ? optimoptions 的輸出 | 結(jié)構(gòu)體,例如 optimset 返回的結(jié)構(gòu)體
? ? ? ? problem - 問(wèn)題結(jié)構(gòu)體
? ? ? ? ? ? 結(jié)構(gòu)體
? ? 輸出參數(shù)
? ? ? ? x - 解
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? fval - 解處的目標(biāo)函數(shù)值
? ? ? ? ? ? 實(shí)數(shù)
? ? ? ? exitflag - fminunc 停止的原因
? ? ? ? ? ? 整數(shù)
? ? ? ? output - 有關(guān)優(yōu)化過(guò)程的信息
? ? ? ? ? ? 結(jié)構(gòu)體
? ? ? ? grad - 解處的梯度
? ? ? ? ? ? 實(shí)數(shù)向量
? ? ? ? hessian - 逼近 Hessian 矩陣
? ? ? ? ? ? 實(shí)矩陣
fminsearch - 使用無(wú)導(dǎo)數(shù)法計(jì)算無(wú)約束的多變量函數(shù)的最小值
? ? 非線性規(guī)劃求解器。搜索由以下公式指定的問(wèn)題的最小值:
? ? x = fminsearch(fun,x0)
? ? x = fminsearch(fun,x0,options)
? ? x = fminsearch(problem)
? ? [x,fval] = fminsearch(___)
? ? [x,fval,exitflag] = fminsearch(___)
? ? [x,fval,exitflag,output] = fminsearch(___)
? ? 輸入?yún)?shù)
? ? ? ? fun - 要計(jì)算最小值的函數(shù)
? ? ? ? ? ? 函數(shù)句柄 | 函數(shù)名稱
? ? ? ? x0 - 初始點(diǎn)
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? options - 優(yōu)化選項(xiàng)
? ? ? ? ? ? 結(jié)構(gòu)體,例如 optimset 返回的結(jié)構(gòu)體
? ? ? ? problem - 問(wèn)題結(jié)構(gòu)體
? ? ? ? ? ? 結(jié)構(gòu)體
? ? 輸出參數(shù)
? ? ? ? x - 解
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? fval - 解處的目標(biāo)函數(shù)值
? ? ? ? ? ? 實(shí)數(shù)
? ? ? ? exitflag - fminsearch 停止的原因
? ? ? ? ? ? 整數(shù)
? ? ? ? output - 有關(guān)優(yōu)化過(guò)程的信息
? ? ? ? ? ? 結(jié)構(gòu)體
eg1.Simple Function

myfun = @(x) x(1)^2+x(2)^2 ;
x0 = [-1;2];
options = optimset("MaxFunEvals",100,"Display","iter") ;
[x,fval,exitflag,output] = fminunc(myfun,x0,options)
Iteration? Func-count? ? ? ?f(x)? ? ? ? Step-size? ? ? ?optimality
? ? ?0? ? ? ? ? ?3? ? ? ? ? ? ? ? 5? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4
? ? ?1? ? ? ? ? ?6? ? ? ? ? ? ?1.25? ? ? ? ? ?0.25? ? ? ? ? ? ? 2??
? ? ?2? ? ? ? ? ?9? ? ? ? 4.996e-16? ? ? ? ? ? ? 1? ? ? ?5.96e-08??
Local minimum found.
Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>
x =
? ?1.0e-07 *
? ? 0.2235
? ? 0.0000
fval =
? ?4.9960e-16
exitflag =
? ? ?1
output =?
? 包含以下字段的 struct:
? ? ? ?iterations: 2
? ? ? ? funcCount: 9
? ? ? ? ?stepsize: 1.1180
? ? ?lssteplength: 1
? ? firstorderopt: 5.9605e-08
? ? ? ? algorithm: 'quasi-newton'
? ? ? ??message: 'Local minimum found.
Optimization completed because the size of the gradient is less than?the value of the optimality tolerance.??<stopping criteria details>??Optimization completed: The first-order optimality measure, 1.192093e-08, is less ?than options.OptimalityTolerance = 1.000000e-06.'
eg2 Rosenbrock函數(shù)
在數(shù)學(xué)最優(yōu)化中,Rosenbrock函數(shù)是一個(gè)用來(lái)測(cè)試最優(yōu)化算法性能的非凸函數(shù),由Howard Harry Rosenbrock在1960年提出??。也稱為Rosenbrock山谷或Rosenbrock香蕉函數(shù),也簡(jiǎn)稱為香蕉函數(shù)。(摘自百度百科)

myfun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [0;0];
options = optimset("MaxFunEvals",500,"Display","iter","TolX",1e-14);
[x,fval,flag] = fminunc(myfun,x0,options)
Iteration? Func-count? ? ? ?f(x)? ? ? ? Step-size? ? ? ?optimality
? ? ?0? ? ? ? ? ?3? ? ? ? ? ? ? ? 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2
? ? ?1? ? ? ? ? 12? ? ? ? ?0.771192? ? ? 0.0817341? ? ? ? ? ?5.34??
? ? ?2? ? ? ? ? 15? ? ? ? ?0.610658? ? ? ? ? ? ? 1? ? ? ? ? ?6.73??
? ? ?3? ? ? ? ? 18? ? ? ? ?0.522451? ? ? ? ? ? ? 1? ? ? ? ? ?7.11??
? ? ?4? ? ? ? ? 24? ? ? ? ?0.261629? ? ? ? ?0.7075? ? ? ? ? ?1.88??
? ? ?5? ? ? ? ? 30? ? ? ? ?0.248996? ? ? ? ? ? 0.5? ? ? ? ? ?3.44??
? ? ?6? ? ? ? ? 33? ? ? ? ?0.207486? ? ? ? ? ? ? 1? ? ? ? ? ?2.94??
? ? ?7? ? ? ? ? 36? ? ? ? ?0.125351? ? ? ? ? ? ? 1? ? ? ? ? ? 1.5??
? ? ?8? ? ? ? ? 39? ? ? ? 0.0893498? ? ? ? ? ? ? 1? ? ? ? ? ?3.93??
? ? ?9? ? ? ? ? 42? ? ? ? 0.0308666? ? ? ? ? ? ? 1? ? ? ? ? ?1.23??
? ? 10? ? ? ? ? 48? ? ? ? 0.0200762? ? ? ?0.322023? ? ? ? ? ?1.95??
? ? 11? ? ? ? ? 51? ? ? ? 0.0138484? ? ? ? ? ? ? 1? ? ? ? ? ?1.57??
? ? 12? ? ? ? ? 54? ? ? ? 0.0044155? ? ? ? ? ? ? 1? ? ? ? ? 0.303??
? ? 13? ? ? ? ? 60? ? ? ?0.00268685? ? ? ? ? ? 0.5? ? ? ? ? ?1.14??
? ? 14? ? ? ? ? 63? ? ? 0.000276528? ? ? ? ? ? ? 1? ? ? ? ? ?0.28??
? ? 15? ? ? ? ? 66? ? ? ?4.2104e-05? ? ? ? ? ? ? 1? ? ? ? ? 0.122??
? ? 16? ? ? ? ? 69? ? ? 1.37272e-06? ? ? ? ? ? ? 1? ? ? ? 0.00796??
? ? 17? ? ? ? ? 72? ? ? 7.48542e-07? ? ? ? ? ? ? 1? ? ? ? ?0.0303??
? ? 18? ? ? ? ? 75? ? ? 3.34562e-09? ? ? ? ? ? ? 1? ? ? ? 0.00221??
? ? 19? ? ? ? ? 78? ? ? 6.71604e-11? ? ? ? ? ? ? 1? ? ? ?7.22e-05??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? First-order?
?Iteration? Func-count? ? ? ?f(x)? ? ? ? Step-size? ? ? ?optimality
? ? 20? ? ? ? ? 81? ? ? 1.94742e-11? ? ? ? ? ? ? 1? ? ? ?1.06e-06??
Local minimum found.
Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
<stopping criteria details>
x =
? ? 1.0000
? ? 1.0000
fval =
? ?1.9474e-11
flag =
? ? ?1
fminunc針對(duì)的是可以微分的連續(xù)函數(shù),使用的算法Quasi-Newton 、Trust Region Algorithms,它可以提供Hessian矩陣。
myfun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [0;0];
options = optimset("PlotFcns","optimplotfval","MaxFunEvals",500,"Display","iter","TolX",1e-14,"TolFun",1e-14);
[x,fval,flag] = fminsearch(myfun,x0,options)

Iteration? ?Func-count? ? ?min f(x)? ? ? ? ?Procedure
? ? ?0? ? ? ? ? ? 1? ? ? ? ? ? ? ? 1? ? ? ? ?
? ? ?1? ? ? ? ? ? 3? ? ? ? ? ?0.9995? ? ? ? ?initial simplex
? ? ?2? ? ? ? ? ? 4? ? ? ? ? ?0.9995? ? ? ? ?reflect
? ? ?3? ? ? ? ? ? 6? ? ? ? ?0.998515? ? ? ? ?expand
? ? ?4? ? ? ? ? ? 8? ? ? ? ?0.998001? ? ? ? ?expand
? ? ?5? ? ? ? ? ?10? ? ? ? ?0.995798? ? ? ? ?expand
? ? ?6? ? ? ? ? ?12? ? ? ? ?0.993647? ? ? ? ?expand
? ? ?7? ? ? ? ? ?14? ? ? ? ?0.988291? ? ? ? ?expand
? ? ?8? ? ? ? ? ?16? ? ? ? ?0.981289? ? ? ? ?expand
? ? ?9? ? ? ? ? ?18? ? ? ? ?0.967873? ? ? ? ?expand
? ? 10? ? ? ? ? ?20? ? ? ? ?0.947913? ? ? ? ?expand
? ? 11? ? ? ? ? ?22? ? ? ? ?0.918174? ? ? ? ?expand
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
? ?148? ? ? ? ? 279? ? ? 4.53053e-28? ? ? ? ?contract inside
? ?149? ? ? ? ? 281? ? ? 4.53053e-28? ? ? ? ?contract outside
? ?150? ? ? ? ? 283? ? ? 2.92914e-28? ? ? ? ?contract inside
? ?151? ? ? ? ? 285? ? ? 1.90115e-28? ? ? ? ?contract inside
? ?152? ? ? ? ? 287? ? ? 4.44227e-29? ? ? ? ?contract inside
? ?153? ? ? ? ? 288? ? ? 4.44227e-29? ? ? ? ?reflect
? ?154? ? ? ? ? 290? ? ? 4.44227e-29? ? ? ? ?contract inside
? ?155? ? ? ? ? 292? ? ? 1.59744e-29? ? ? ? ?contract inside
? ?156? ? ? ? ? 294? ? ? 5.71924e-30? ? ? ? ?contract inside
? ?157? ? ? ? ? 296? ? ? 5.71924e-30? ? ? ? ?contract inside
優(yōu)化已終止:
?當(dāng)前的 x 滿足使用 1.000000e-14 的 OPTIONS.TolX 的終止條件,
F(X) 滿足使用 1.000000e-14 的 OPTIONS.TolFun 的收斂條件
x =
? ? 1.0000
? ? 1.0000
fval =
? ?5.7192e-30
flag =
? ? ?1
從函數(shù)使用來(lái)看,fminsearch可用的參數(shù)設(shè)置遠(yuǎn)多于fminunc,所以有時(shí)會(huì)取得更好的效果,但它需要的計(jì)算和迭代過(guò)程遠(yuǎn)超過(guò)fminunc。
fminsearch僅對(duì)實(shí)數(shù)取最小值,及向量或數(shù)組x只能由實(shí)數(shù)組成,且f(x)必須只返回實(shí)數(shù),當(dāng)x具有復(fù)數(shù)值時(shí),將x拆分為實(shí)部和虛部。
fminsearch使用lagarias等單純形搜索法,可解決不可微分問(wèn)題或者具有不連續(xù)問(wèn)題。

約束優(yōu)化問(wèn)題
fmincon - 尋找約束非線性多變量函數(shù)的最小值
? ? 非線性規(guī)劃求解器。
? ? x = fmincon(fun,x0,A,b)
? ? x = fmincon(fun,x0,A,b,Aeq,beq)
? ? x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
? ? x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
? ? x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
? ? x = fmincon(problem)
? ? [x,fval] = fmincon(___)
? ? [x,fval,exitflag,output] = fmincon(___)
? ? [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)
? ? 輸入?yún)?shù)
? ? ? ? fun - 要計(jì)算最小值的函數(shù)
? ? ? ? ? ? 函數(shù)句柄 | 函數(shù)名稱
? ? ? ? x0 - 初始點(diǎn)
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? A - 線性不等式約束
? ? ? ? ? ? 實(shí)矩陣
? ? ? ? b - 線性不等式約束
? ? ? ? ? ? 實(shí)數(shù)向量
? ? ? ? Aeq - 線性等式約束
? ? ? ? ? ? 實(shí)矩陣
? ? ? ? beq - 線性等式約束
? ? ? ? ? ? 實(shí)數(shù)向量
? ? ? ? lb - 下界
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? ub - 上界
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? nonlcon - 非線性約束
? ? ? ? ? ? 函數(shù)句柄 | 函數(shù)名稱
? ? ? ? options - 優(yōu)化選項(xiàng)
? ? ? ? ? ? optimoptions 的輸出 | 結(jié)構(gòu)體,例如 optimset 返回的結(jié)構(gòu)體
? ? ? ? problem - 問(wèn)題結(jié)構(gòu)體
? ? ? ? ? ? 結(jié)構(gòu)體
? ? 輸出參數(shù)
? ? ? ? x - 解
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? fval - 解處的目標(biāo)函數(shù)值
? ? ? ? ? ? 實(shí)數(shù)
? ? ? ? exitflag - fmincon 停止的原因
? ? ? ? ? ? 整數(shù)
? ? ? ? output - 有關(guān)優(yōu)化過(guò)程的信息
? ? ? ? ? ? 結(jié)構(gòu)體
? ? ? ? lambda - 解處的拉格朗日乘數(shù)
? ? ? ? ? ? 結(jié)構(gòu)體
? ? ? ? grad - 解處的梯度
? ? ? ? ? ? 實(shí)數(shù)向量
? ? ? ? hessian - 逼近 Hessian 矩陣
? ? ? ? ? ? 實(shí)矩陣
?fseminf - 求解半無(wú)限約束多變量非線性函數(shù)的最小值
? ? fseminf 是非線性規(guī)劃求解器,用于求由下式指定的問(wèn)題的最小值
? ? x = fseminf(fun,x0,ntheta,seminfcon)
? ? x = fseminf(fun,x0,ntheta,seminfcon,A,b)
? ? x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)
? ? x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)
? ? x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)
? ? x = fseminf(problem)
? ? [x,fval] = fseminf(___)
? ? [x,fval,exitflag,output] = fseminf(___)
? ? [x,fval,exitflag,output,lambda] = fseminf(___)
? ? 輸入?yún)?shù)
? ? ? ? fun - 要計(jì)算最小值的函數(shù)
? ? ? ? ? ? 函數(shù)句柄 | 函數(shù)名稱
? ? ? ? x0 - 初始點(diǎn)
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? ntheta - 半無(wú)限約束的數(shù)量
? ? ? ? ? ? 正整數(shù)
? ? ? ? seminfcon - 計(jì)算非線性約束和半無(wú)限約束的函數(shù)
? ? ? ? ? ? 函數(shù)句柄 | 函數(shù)名稱
? ? ? ? A - 線性不等式約束
? ? ? ? ? ? 實(shí)矩陣
? ? ? ? b - 線性不等式約束
? ? ? ? ? ? 實(shí)數(shù)向量
? ? ? ? Aeq - 線性等式約束
? ? ? ? ? ? 實(shí)矩陣
? ? ? ? beq - 線性等式約束
? ? ? ? ? ? 實(shí)數(shù)向量
? ? ? ? lb - 下界
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? ub - 上界
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? options - 優(yōu)化選項(xiàng)
? ? ? ? ? ? optimoptions 的輸出 | 結(jié)構(gòu)體,例如 optimset 返回的結(jié)構(gòu)體
? ? ? ? problem - 問(wèn)題結(jié)構(gòu)體
? ? ? ? ? ? 結(jié)構(gòu)體
? ? 輸出參數(shù)
? ? ? ? x - 解
? ? ? ? ? ? 實(shí)數(shù)向量 | 實(shí)數(shù)數(shù)組
? ? ? ? fval - 解處的目標(biāo)函數(shù)值
? ? ? ? ? ? 實(shí)數(shù)
? ? ? ? exitflag - fseminf 停止的原因
? ? ? ? ? ? 整數(shù)
? ? ? ? output - 有關(guān)優(yōu)化過(guò)程的信息
? ? ? ? ? ? 結(jié)構(gòu)體
? ? ? ? lambda - 解處的拉格朗日乘數(shù)
? ? ? ? ? ? 結(jié)構(gòu)體
eg1.

myfun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
A = [1,2];
b = 1;
x0 = [0;0];
[x,fval,flag] = fmincon(myfun,x0,A,b)
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in?
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
<stopping criteria details>
x =
? ? 0.5022
? ? 0.2489
fval =
? ? 0.2489
flag =
? ? ?1
eg2.線性約束

myfun = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
A = [1,2];
b = 1;
Aeq = [1,1];
beq = 1;
x0 = [0;0];
[x,fval,flag] = fmincon(myfun,x0,A,b,Aeq,beq)
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in?
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
<stopping criteria details>
x =
? ? 1.0000
? ?-0.0000
fval =
? 100.0000
flag =
? ? ?1
eg3、無(wú)線性約束,箱集

myfun = @(x) 1+x(1)/(1+x(2))-3*x(1)*x(2)+x(2)*(1+x(1));
lb = [0;0];
ub = [1;2];
x0 = [0;0];
[x,fval,flag] = fmincon(myfun,x0,[],[],[],[],lb,ub)
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in?
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
<stopping criteria details>
x =
? ? 1.0000
? ? 2.0000
fval =
? ?-0.6667
flag =
? ? ?1
eg4、全約束

myfun = @(x) x(1)^2+x(2)^2-2*x(1)*x(2)+x(3)^2+x(4)^2;
A? = [1 1 1 0];
b = 6;
Aeq=[1 1 1 0;1 5 0 1];
beq = [3;6];
lb = zeros(4,1);
ub = [];
x0 = zeros(4,1);
[x,fval,flag] = fmincon(myfun,x0,A,b,Aeq,beq,lb,ub,@fcons01)
function [c,ceq] = fcons01(x)
c = x(1)^2+x(2)^2+x(3)^2-5;
ceq = x(2)^2+x(3)^2+x(4)^2-4;
x =
? ? 0.6086
? ? 0.8837
? ? 1.5076
? ? 0.9727
fval =
? ? 3.2947
flag =
? ? ?1
最后感謝西南科技大學(xué)龍強(qiáng)老師的分享
