第5章 优化问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
X= 1.0016 function f=myfun(x) f=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2; X= 1.0016 0.8335
[0,0])
>> X=fminsearch ('myfun', [0,0]) 或 >> X=fminsearch(@myfun, [0,0]) 0.8335
注意:当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续 时,使用fminsearch效果较好。
例5-5 求的最小值。 结果为:
>> fun='3*x(1)^2+2*x(1)*x(2)+x(2)^2'; >> x0=[1 1]; >> [x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0) x= 1.0e-008 * -0.7591 0.2665 fval = 1.3953e-016 exitflag = 1 output = iterations: 3 funcCount: 16 stepsize: 1.2353 firstorderopt: 1.6772e-007 algorithm: 'medium-scale: Quasi-Newton line search' grad = 1.0e-006 * -0.1677 0.0114
或用下面方法:
>> fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2') fun = Inline function: fun(x) = 3*x(1)^2+2*x(1)*x(2)+x(2)^2 >> x0=[1 1]; >> x=fminunc(fun,x0) x= 1.0e-008 * -0.7591 0.2665
5.3 非线性规划问题
5.3.1 有约束的一元函数的最小值
单变量函数求最小值的标准形式为 sub.to 在MATLAB5.x中使用fmin函数求其最小值。 函数 fminbnd un,x1,x2) %返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式 字符串或MATLAB自定义函数的函数柄。 x = fminbnd(fun,x1,x2,options) % options为指定优化参数选 项 [x,fval] = fminbnd(…) % fval为目标函数的最小值 [x,fval,exitflag] = fminbnd(…) %xitflag为终止迭代的条件
命令 利用函数fminunc求多变量无约束函数最小值 函数 fminunc 格式 x = fminunc(fun,x0) %返回给定初始点x0的最小函数值点 x = fminunc(fun,x0,options) % options为指定优化参数 [x,fval] = fminunc(…) %fval最优点x处的函数值 [x,fval,exitflag] = fminunc(…) % exitflag为终止迭代的条 件,与上同。 [x,fval,exitflag,output] = fminunc(…) %output为输出优化信 息 [x,fval,exitflag,output,grad] = fminunc(…) % grad为函数在解 x处的梯度值 ssian] = fminunc(…) %目标函数在解x处的海赛(Hessian)值
表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约 束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是 有效约束;output=iterations表示迭代次数,output=algorithm表示使用的 运算规则,output=cgiterations表示PCG迭代次数。 例5-1 求下面的优化问题 min sub.to 解:
>>f = [-5; -4; -6]; >>A = [1 -1 1;3 2 4;3 2 0]; >>b = [20; 42; 30]; >>lb = zeros(3,1); >>[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb) x = %最优解 0.0000 15.0000 3.0000 fval = %最优值 -78.0000 exitflag = %收敛 1 output = iterations: 6 %迭代次数 cgiterations: 0 algorithm: 'lipsol' %所使用规则 lambda = ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double] >> lambda.ineqlin ans = 0.0000 1.5000 0.5000 >> lambda.lower ans = 1.0000 0.0000 0.0000
[x,fval,exitflag,output] = fminbnd(…) % output为优化信息 说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过 函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数 output=iterations表示迭代次数,output=funccount表示函数赋值次数, output=algorithm表示所使用的算法。 例5-2 计算下面函数在区间(0,1)内的最小值。 解:>> [x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)
x= 3 >> x=fminbnd(@myfun,0,5) function f = myfun(x) f = (x-3).^2 - 1;
5.3.2 无约束多元函数最小值
多元函数最小值的标准形式为 其中:x为向量,如 在MATLAB5.x中使用fmins求其最小值。 命令 利用函数fminsearch求无约束多元函数最小值 函数 fminsearch %x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的 函数柄。 x = fminsearch(fun,x0,options) % options查optimset [x,fval] = fminsearch(…) %最优点的函数值 [x,fval,exitflag] = fminsearch(…) % exitflag与单变量情形一 致 [x,fval,exitflag,output] = fminsearch(…) %output与单变量情形 一致
注意:fminsearch采用了Nelder-Mead型简单搜寻法。
例5-4 求的最小值点
解:>>X=fminsearch('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2', 结果为 或在MATLAB编辑器中建立函数文件 保存为myfun.m,在命令窗口键入 结果为:
第5章 优化问题
5.1 线性规划问题
线性规划问题是目标函数和约束条件均为线性函数的问题, MATLAB6.0解决的线性规划问题的标准形式为:
min sub.to:
其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。 其它形式的线性规划问题都可经过适当变换化为此标准形式。 在MATLAB6.0版中,线性规划问题(Linear Programming)已用函 数linprog取代了MATLAB5.x版中的lp函数。当然,由于版本的向下兼容 性,一般说来,低版本中的函数在6.0版中仍可使用。 函数 linprog 格式 x = linprog(f,A,b) %求min f ' *x sub.to 线性规划的最优解。 x = linprog(f,A,b,Aeq,beq) %等式约束,若没有不等式约束,则A=[ ],b=[ ]。 x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范围,若没有等式约束 ,则Aeq=[ ], beq=[ ] x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %设置初值x0 x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options为指定 的优化参数 [x,fval] = linprog(…) % 返回目标函数最优值,即fval= f ' *x。 [x,lambda,exitflag] = linprog(…) % lambda为解x的Lagrange 乘子。 [x, lambda,fval,exitflag] = linprog(…) % exitflag为终止迭代 的错误条件。 [x,fval, lambda,exitflag,output] = linprog(…) % output为关于 优化的一些信息 说明 若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值 或迭代的最大数字,exitflag<0表示函数不收敛于解x;若lambda=lower
x= 0.5223 fval = 0.3974 exitflag = 1 output = iterations: 9 funcCount: 9 algorithm: 'golden section search, parabolic interpolation'
例5-3 在[0,5]上求下面函数的最小值 解:先自定义函数:在MATLAB编辑器中建立M文件为: 保存为myfun.m,然后在命令窗口键入命令: 则结果显示为:
结果为:
表明:不等约束条件2和3以及第1个下界是有效的
来自百度文库
5.2 foptions函数
对于优化控制,MATLAB提供了18个参数,这些参数的具体意义 为:
options(1)-参数显示控制(默认值为0)。等于1时显示一些结 果。 options(2)-优化点x的精度控制(默认值为1e-4)。 options(3)-优化函数F的精度控制(默认值为1e-4)。 options(4)-违反约束的结束标准(默认值为1e-6)。 options(5)-算法选择,不常用。 options(6)-优化程序方法选择,为0则为BFCG算法,为1则采用 DFP算法。 options(7)-线性插值算法选择,为0则为混合插值算法,为1则采用 立方插算法。 options(8)-函数值显示 (目标—达到问题中的Lambda ) options(9)-若需要检测用户提供的梯度,则设为1。 options(10)-函数和约束估值的数目。 options(11)-函数梯度估值的个数。 options(12)-约束估值的数目。 options(13)-等约束条件的个数。 options(14)-函数估值的最大次数(默认值是100×变量个数) options(15)-用于目标 — 达到问题中的特殊目标。 options(16)-优化过程中变量的最小有限差分梯度值。 options(17)- 优化过程中变量的最大有限差分梯度值。 options(18)-步长设置 (默认为1或更小)。 Foptions已经被optimset和optimget代替,详情请查函数optimset和 optimget。
hessian = 6.0000 2.0000 2.0000 2.0000
5.3.3 有约束的多元函数最小值
非线性有约束的多元函数的标准形式为: sub.to 其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是 返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函 数。 在MATLAB5.x中,它的求解由函数constr实现。 函数 fmincon 格式 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,fval] = fmincon(…) [x,fval,exitflag] = fmincon(…) [x,fval,exitflag,output] = fmincon(…) [x,fval,exitflag,output,lambda] = fmincon(…) [x,fval,exitflag,output,lambda,grad] = fmincon(…) [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…) 参数说明:fun为目标函数,它可用前面的方法定义; x0为初始值; A、b满足线性不等式约束,若没有不等式约束,则取 A=[ ],b=[ ]; Aeq、beq满足等式约束,若没有,则取Aeq=[ ],beq=[ ]; lb、ub满足,若没有界,可设lb=[ ],ub=[ ]; nonlcon的作用是通过接受的向量x来计算非线性不等约束和等 式约束分别在x处的估计C和Ceq,通过指定函数柄来使
[0,0])
>> X=fminsearch ('myfun', [0,0]) 或 >> X=fminsearch(@myfun, [0,0]) 0.8335
注意:当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续 时,使用fminsearch效果较好。
例5-5 求的最小值。 结果为:
>> fun='3*x(1)^2+2*x(1)*x(2)+x(2)^2'; >> x0=[1 1]; >> [x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0) x= 1.0e-008 * -0.7591 0.2665 fval = 1.3953e-016 exitflag = 1 output = iterations: 3 funcCount: 16 stepsize: 1.2353 firstorderopt: 1.6772e-007 algorithm: 'medium-scale: Quasi-Newton line search' grad = 1.0e-006 * -0.1677 0.0114
或用下面方法:
>> fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2') fun = Inline function: fun(x) = 3*x(1)^2+2*x(1)*x(2)+x(2)^2 >> x0=[1 1]; >> x=fminunc(fun,x0) x= 1.0e-008 * -0.7591 0.2665
5.3 非线性规划问题
5.3.1 有约束的一元函数的最小值
单变量函数求最小值的标准形式为 sub.to 在MATLAB5.x中使用fmin函数求其最小值。 函数 fminbnd un,x1,x2) %返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式 字符串或MATLAB自定义函数的函数柄。 x = fminbnd(fun,x1,x2,options) % options为指定优化参数选 项 [x,fval] = fminbnd(…) % fval为目标函数的最小值 [x,fval,exitflag] = fminbnd(…) %xitflag为终止迭代的条件
命令 利用函数fminunc求多变量无约束函数最小值 函数 fminunc 格式 x = fminunc(fun,x0) %返回给定初始点x0的最小函数值点 x = fminunc(fun,x0,options) % options为指定优化参数 [x,fval] = fminunc(…) %fval最优点x处的函数值 [x,fval,exitflag] = fminunc(…) % exitflag为终止迭代的条 件,与上同。 [x,fval,exitflag,output] = fminunc(…) %output为输出优化信 息 [x,fval,exitflag,output,grad] = fminunc(…) % grad为函数在解 x处的梯度值 ssian] = fminunc(…) %目标函数在解x处的海赛(Hessian)值
表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约 束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是 有效约束;output=iterations表示迭代次数,output=algorithm表示使用的 运算规则,output=cgiterations表示PCG迭代次数。 例5-1 求下面的优化问题 min sub.to 解:
>>f = [-5; -4; -6]; >>A = [1 -1 1;3 2 4;3 2 0]; >>b = [20; 42; 30]; >>lb = zeros(3,1); >>[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb) x = %最优解 0.0000 15.0000 3.0000 fval = %最优值 -78.0000 exitflag = %收敛 1 output = iterations: 6 %迭代次数 cgiterations: 0 algorithm: 'lipsol' %所使用规则 lambda = ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double] >> lambda.ineqlin ans = 0.0000 1.5000 0.5000 >> lambda.lower ans = 1.0000 0.0000 0.0000
[x,fval,exitflag,output] = fminbnd(…) % output为优化信息 说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过 函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数 output=iterations表示迭代次数,output=funccount表示函数赋值次数, output=algorithm表示所使用的算法。 例5-2 计算下面函数在区间(0,1)内的最小值。 解:>> [x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)
x= 3 >> x=fminbnd(@myfun,0,5) function f = myfun(x) f = (x-3).^2 - 1;
5.3.2 无约束多元函数最小值
多元函数最小值的标准形式为 其中:x为向量,如 在MATLAB5.x中使用fmins求其最小值。 命令 利用函数fminsearch求无约束多元函数最小值 函数 fminsearch %x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的 函数柄。 x = fminsearch(fun,x0,options) % options查optimset [x,fval] = fminsearch(…) %最优点的函数值 [x,fval,exitflag] = fminsearch(…) % exitflag与单变量情形一 致 [x,fval,exitflag,output] = fminsearch(…) %output与单变量情形 一致
注意:fminsearch采用了Nelder-Mead型简单搜寻法。
例5-4 求的最小值点
解:>>X=fminsearch('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2', 结果为 或在MATLAB编辑器中建立函数文件 保存为myfun.m,在命令窗口键入 结果为:
第5章 优化问题
5.1 线性规划问题
线性规划问题是目标函数和约束条件均为线性函数的问题, MATLAB6.0解决的线性规划问题的标准形式为:
min sub.to:
其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。 其它形式的线性规划问题都可经过适当变换化为此标准形式。 在MATLAB6.0版中,线性规划问题(Linear Programming)已用函 数linprog取代了MATLAB5.x版中的lp函数。当然,由于版本的向下兼容 性,一般说来,低版本中的函数在6.0版中仍可使用。 函数 linprog 格式 x = linprog(f,A,b) %求min f ' *x sub.to 线性规划的最优解。 x = linprog(f,A,b,Aeq,beq) %等式约束,若没有不等式约束,则A=[ ],b=[ ]。 x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范围,若没有等式约束 ,则Aeq=[ ], beq=[ ] x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %设置初值x0 x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options为指定 的优化参数 [x,fval] = linprog(…) % 返回目标函数最优值,即fval= f ' *x。 [x,lambda,exitflag] = linprog(…) % lambda为解x的Lagrange 乘子。 [x, lambda,fval,exitflag] = linprog(…) % exitflag为终止迭代 的错误条件。 [x,fval, lambda,exitflag,output] = linprog(…) % output为关于 优化的一些信息 说明 若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值 或迭代的最大数字,exitflag<0表示函数不收敛于解x;若lambda=lower
x= 0.5223 fval = 0.3974 exitflag = 1 output = iterations: 9 funcCount: 9 algorithm: 'golden section search, parabolic interpolation'
例5-3 在[0,5]上求下面函数的最小值 解:先自定义函数:在MATLAB编辑器中建立M文件为: 保存为myfun.m,然后在命令窗口键入命令: 则结果显示为:
结果为:
表明:不等约束条件2和3以及第1个下界是有效的
来自百度文库
5.2 foptions函数
对于优化控制,MATLAB提供了18个参数,这些参数的具体意义 为:
options(1)-参数显示控制(默认值为0)。等于1时显示一些结 果。 options(2)-优化点x的精度控制(默认值为1e-4)。 options(3)-优化函数F的精度控制(默认值为1e-4)。 options(4)-违反约束的结束标准(默认值为1e-6)。 options(5)-算法选择,不常用。 options(6)-优化程序方法选择,为0则为BFCG算法,为1则采用 DFP算法。 options(7)-线性插值算法选择,为0则为混合插值算法,为1则采用 立方插算法。 options(8)-函数值显示 (目标—达到问题中的Lambda ) options(9)-若需要检测用户提供的梯度,则设为1。 options(10)-函数和约束估值的数目。 options(11)-函数梯度估值的个数。 options(12)-约束估值的数目。 options(13)-等约束条件的个数。 options(14)-函数估值的最大次数(默认值是100×变量个数) options(15)-用于目标 — 达到问题中的特殊目标。 options(16)-优化过程中变量的最小有限差分梯度值。 options(17)- 优化过程中变量的最大有限差分梯度值。 options(18)-步长设置 (默认为1或更小)。 Foptions已经被optimset和optimget代替,详情请查函数optimset和 optimget。
hessian = 6.0000 2.0000 2.0000 2.0000
5.3.3 有约束的多元函数最小值
非线性有约束的多元函数的标准形式为: sub.to 其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是 返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函 数。 在MATLAB5.x中,它的求解由函数constr实现。 函数 fmincon 格式 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,fval] = fmincon(…) [x,fval,exitflag] = fmincon(…) [x,fval,exitflag,output] = fmincon(…) [x,fval,exitflag,output,lambda] = fmincon(…) [x,fval,exitflag,output,lambda,grad] = fmincon(…) [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…) 参数说明:fun为目标函数,它可用前面的方法定义; x0为初始值; A、b满足线性不等式约束,若没有不等式约束,则取 A=[ ],b=[ ]; Aeq、beq满足等式约束,若没有,则取Aeq=[ ],beq=[ ]; lb、ub满足,若没有界,可设lb=[ ],ub=[ ]; nonlcon的作用是通过接受的向量x来计算非线性不等约束和等 式约束分别在x处的估计C和Ceq,通过指定函数柄来使