matalab优化问题详解综述Word格式文档下载.docx

上传人:b****3 文档编号:18431928 上传时间:2022-12-16 格式:DOCX 页数:38 大小:279.27KB
下载 相关 举报
matalab优化问题详解综述Word格式文档下载.docx_第1页
第1页 / 共38页
matalab优化问题详解综述Word格式文档下载.docx_第2页
第2页 / 共38页
matalab优化问题详解综述Word格式文档下载.docx_第3页
第3页 / 共38页
matalab优化问题详解综述Word格式文档下载.docx_第4页
第4页 / 共38页
matalab优化问题详解综述Word格式文档下载.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

matalab优化问题详解综述Word格式文档下载.docx

《matalab优化问题详解综述Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《matalab优化问题详解综述Word格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。

matalab优化问题详解综述Word格式文档下载.docx

-4;

-6];

A=[1-11;

324;

320];

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:

[3x1double]

eqlin:

[0x1double]

upper:

lower:

lambda.ineqlin

ans=

1.5000

0.5000

lambda.lower

1.0000

表明:

不等约束条件2和3以及第1个下界是有效的

5.2foptions函数

对于优化控制,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。

5.3非线性规划问题

5.3.1有约束的一元函数的最小值

单变量函数求最小值的标准形式为

sub.to

在MATLAB5.x中使用fmin函数求其最小值。

函数fminbnd

格式x=fminbnd(fun,x1,x2)%返回自变量x在区间

上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。

x=fminbnd(fun,x1,x2,options)%options为指定优化参数选项

[x,fval]=fminbnd(…)%fval为目标函数的最小值

[x,fval,exitflag]=fminbnd(…)%xitflag为终止迭代的条件

[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=

0.5223

fval=

0.3974

exitflag=

9

funcCount:

goldensectionsearch,parabolicinterpolation'

例5-3在[0,5]上求下面函数的最小值

先自定义函数:

在MATLAB编辑器中建立M文件为:

functionf=myfun(x)

f=(x-3).^2-1;

保存为myfun.m,然后在命令窗口键入命令:

x=fminbnd(@myfun,0,5)

则结果显示为:

3

5.3.2无约束多元函数最小值

多元函数最小值的标准形式为

其中:

x为向量,如

在MATLAB5.x中使用fmins求其最小值。

命令利用函数fminsearch求无约束多元函数最小值

函数fminsearch

格式x=fminsearch(fun,x0)%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'

[0,0])

结果为

X=

1.00160.8335

或在MATLAB编辑器中建立函数文件

functionf=myfun(x)

f=2*x

(1)^3+4*x

(1)*x

(2)^3-10*x

(1)*x

(2)+x

(2)^2;

保存为myfun.m,在命令窗口键入

X=fminsearch('

myfun'

[0,0])或>

X=fminsearch(@myfun,[0,0])

命令利用函数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处的梯度值

[x,fval,exitflag,output,grad,hessian]=fminunc(…)%目标函数在解x处的海赛(Hessian)值

当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好。

例5-5求

的最小值。

fun='

3*x

(1)^2+2*x

(1)*x

(2)+x

(2)^2'

;

x0=[11];

[x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0)

1.0e-008*

-0.75910.2665

1.3953e-016

16

stepsize:

1.2353

firstorderopt:

1.6772e-007

medium-scale:

Quasi-Newtonlinesearch'

grad=

1.0e-006*

-0.1677

0.0114

hessian=

6.00002.0000

2.00002.0000

或用下面方法:

fun=inline('

fun=

Inlinefunction:

fun(x)=3*x

(1)^2+2*x

(1)*x

(2)+x

(2)^2

x0=[11];

x=fminunc(fun,x0)

5.3.3有约束的多元函数最小值

非线性有约束的多元函数的标准形式为:

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,通过指定函数柄来使用,如:

x=fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:

function[C,Ceq]=mycon(x)

C=…%计算x处的非线性不等约束

的函数值。

Ceq=…%计算x处的非线性等式约束

lambda是Lagrange乘子,它体现哪一个约束有效。

output输出优化信息;

grad表示目标函数在x处的梯度;

hessian表示目标函数在x处的Hessiab值。

例5-6求下面问题在初始点(0,1)处的最优解

约束条件的标准形式为

先在MATLAB编辑器中建立非线性约束函数文件:

function[c,ceq]=mycon(x)

c=(x

(1)-1)^2-x

(2);

ceq=[];

%无等式约束

然后,在命令窗口键入如下命令或建立M文件:

fun='

x

(1)^2+x

(2)^2-x

(1)*x

(2)-2*x

(1)-5*x

(2)'

%目标函数

x0=[01];

A=[-23];

%线性不等式约束

b=6;

Aeq=[];

%无线性等式约束

beq=[];

lb=[];

%x没有下、上界

ub=[];

[x,fval,exitflag,output,lambda,grad,hessian]

=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon)

则结果为

34

-13

exitflag=%解收敛

2

SQP,Quasi-Newton,line-search'

[]

[2x1double]%x下界有效情况,通过lambda.lower可查看。

[2x1double]%x上界有效情况,为0表示约束无效。

[0x1double]%线性等式约束有效情况,不为0表示约束有效。

eqnonlin:

[0x1double]%非线性等式约束有效情况。

2.5081e-008%线性不等式约束有效情况。

ineqnonlin:

6.1938e-008%非线性不等式约束有效情况。

grad=%目标函数在最小值点的梯度

-0.1776

hessian=%目标函数在最小值点的Hessian值

1.0000-0.0000

-0.00001.0000

例5-7求下面问题在初始点x=(10,10,10)处的最优解。

Min

Sub.to

fun='

-x

(1)*x

(2)*x(3)'

x0=[10,10,10];

A=[-1-2-2;

122];

b=[0;

72];

[x,fval]=fmincon(fun,x0,A,b)

24.000012.000012.0000

-3456

5.3.4二次规划问题

二次规划问题(quadraticprogramming)的标准形式为:

其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量

其它形式的二次规划问题都可转化为标准形式。

MATLAB5.x版中的qp函数已被6.0版中的函数quadprog取代。

函数quadprog

格式x=quadprog(H,f,A,b)%其中H,f,A,b为标准形中的参数,x为目标函数的最小值。

x=quadprog(H,f,A,b,Aeq,beq)%Aeq,beq满足等约束条件

x=quadprog(H,f,A,b,Aeq,beq,lb,ub)%lb,ub分别为解x的下界与上界。

x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)%x0为设置的初值

x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)%options为指定的优化参数

[x,fval]=quadprog(…)%fval为目标函数最优值

[x,fval,exitflag]=quadprog(…)%exitflag与线性规划中参数意义相同

[x,fval,exitflag,output]=quadprog(…)%output与线性规划中参数意义相同

[x,fval,exitflag,output,lambda]=quadprog(…)%lambda与线性规划中参数意义相同

例5-8求解下面二次规划问题

在MATLAB中实现如下:

H=[1-1;

-12];

f=[-2;

A=[11;

-12;

21];

b=[2;

2;

3];

lb=zeros(2,1);

[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],[],lb)

0.6667

1.3333

-8.2222

active-set'

[2x1double]

3.1111

0.4444

说明第1、2个约束条件有效,其余无效。

例5-9求二次规划的最优解

maxf(x1,x2)=x1x2+3

sub.tox1+x2-2=0

化成标准形式:

sub.tox1+x2=2

在Matlab中实现如下:

H=[0,-1;

-1,0];

f=[0;

0];

Aeq=[11];

b=2;

[x,fval,exitflag,output,lambda]=quadprog(H,f,[],[],Aeq,b)

-1.0000

[1x58char]

5.4“半无限”有约束的多元函数最优解

“半无限”有约束多元函数最优解问题的标准形式为

x、b、beq、lb、ub都是向量;

A、Aeq是矩阵;

C(x)、Ceq(x)、

是返回向量的函数,f(x)为目标函数;

f(x)、C(x)、Ceq(x)是非线性函数;

为半无限约束,

通常是长度为2的向量。

在MTALAB5.x中,使用函数seminf解决这类问题。

函数fseminf

格式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,fval]=fseminf(…)

[x,fval,exitflag]=fseminf(…)

[x,fval,exitflag,output]=fseminf(…)

[x,fval,exitflag,output,lambda]=fseminf(…)

x0为初始估计值;

fun为目标函数,其定义方式与前面相同;

A、b由线性不等式约束

确定,没有,则A=[]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1