#matlab中优化问题.docx

上传人:b****1 文档编号:13743011 上传时间:2023-06-17 格式:DOCX 页数:45 大小:281.30KB
下载 相关 举报
#matlab中优化问题.docx_第1页
第1页 / 共45页
#matlab中优化问题.docx_第2页
第2页 / 共45页
#matlab中优化问题.docx_第3页
第3页 / 共45页
#matlab中优化问题.docx_第4页
第4页 / 共45页
#matlab中优化问题.docx_第5页
第5页 / 共45页
#matlab中优化问题.docx_第6页
第6页 / 共45页
#matlab中优化问题.docx_第7页
第7页 / 共45页
#matlab中优化问题.docx_第8页
第8页 / 共45页
#matlab中优化问题.docx_第9页
第9页 / 共45页
#matlab中优化问题.docx_第10页
第10页 / 共45页
#matlab中优化问题.docx_第11页
第11页 / 共45页
#matlab中优化问题.docx_第12页
第12页 / 共45页
#matlab中优化问题.docx_第13页
第13页 / 共45页
#matlab中优化问题.docx_第14页
第14页 / 共45页
#matlab中优化问题.docx_第15页
第15页 / 共45页
#matlab中优化问题.docx_第16页
第16页 / 共45页
#matlab中优化问题.docx_第17页
第17页 / 共45页
#matlab中优化问题.docx_第18页
第18页 / 共45页
#matlab中优化问题.docx_第19页
第19页 / 共45页
#matlab中优化问题.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

#matlab中优化问题.docx

《#matlab中优化问题.docx》由会员分享,可在线阅读,更多相关《#matlab中优化问题.docx(45页珍藏版)》请在冰点文库上搜索。

#matlab中优化问题.docx

#matlab中优化问题

第5章优化问题

5.1线性规划问题

线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB6.0解决的线性规划问题的标准形式为:

min

sub.to:

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

其它形式的线性规划问题都可经过适当变换化为此标准形式。

在MATLAB6.0版中,线性规划问题

当然,因为版本的向下兼容性,一般说来,低版本中的函数在6.0版中仍可使用。

函数linprog

格式x=linprog(f,A,b>%求minf'*xsub.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表示下界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-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:

[3x1double]

lower:

[3x1double]

>>lambda.ineqlin

ans=

0.0000

1.5000

0.5000

>>lambda.lower

ans=

1.0000

0.0000

0.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=

1

output=

iterations:

9

funcCount:

9

algorithm:

'goldensectionsearch,parabolicinterpolation'

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

解:

先自定义函数:

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

functionf=myfun(x>

f=(x-3>.^2-1。

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

>>x=fminbnd(@myfun,0,5>

则结果显示为:

x=

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]>

结果为:

X=

1.00160.8335

命令利用函数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处的海赛

注意:

当函数的阶数大于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>

结果为:

x=

1.0e-008*

-0.75910.2665

fval=

1.3953e-016

exitflag=

1

output=

iterations:

3

funcCount:

16

stepsize:

1.2353

firstorderopt:

1.6772e-007

algorithm:

'medium-scale:

Quasi-Newtonlinesearch'

grad=

1.0e-006*

-0.1677

0.0114

hessian=

6.00002.0000

2.00002.0000

或用下面方法:

>>fun=inline('3*x(1>^2+2*x(1>*x(2>+x(2>^2'>

fun=

Inlinefunction:

fun(x>=3*x(1>^2+2*x(1>*x(2>+x(2>^2

>>x0=[11];

>>x=fminunc(fun,x0>

x=

1.0e-008*

-0.75910.2665

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

>>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)处的最优解

min

sub.to

解:

约束条件的标准形式为

sub.to

先在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>

则结果为

x=

34

fval=

-13

exitflag=%解收敛

1

output=

iterations:

2

funcCount:

9

stepsize:

1

algorithm:

'medium-scale:

SQP,Quasi-Newton,line-search'

firstorderopt:

[]

cgiterations:

[]

lambda=

lower:

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

upper:

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

eqlin:

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

eqnonlin:

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

ineqlin:

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

ineqnonlin:

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

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

1.0e-006*

-0.1776

0

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

1.0000-0.0000

-0.00001.0000

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

Min

Sub.to

解:

约束条件的标准形式为

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>

结果为:

x=

24.000012.000012.0000

fval=

-3456

5.3.4二次规划问题

二次规划问题

sub.to

其中,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求解下面二次规划问题

sub.to

解:

在MATLAB中实现如下:

>>H=[1-1。

-12]。

>>f=[-2。

-6]。

>>A=[11。

-12。

21]。

>>b=[2。

2。

3]。

>>lb=zeros(2,1>。

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

结果为:

x=%最优解

0.6667

1.3333

fval=%最优值

-8.2222

exitflag=%收敛

1

output=

iterations:

3

algorithm:

'medium-scale:

active-set'

firstorderopt:

[]

cgiterations:

[]

lambda=

lower:

[2x1double]

upper:

[2x1double]

eqlin:

[0x1double]

ineqlin:

[3x1double]

>>lambda.ineqlin

ans=

3.1111

0.4444

0

>>lambda.lower

ans=

0

0

说明第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>

结果为:

x=

1.0000

1.0000

fval=

-1.0000

exitflag=

1

output=

firstorderopt:

0

iterations:

1

cgiterations:

1

algorithm:

[1x58char]

lambda=

eqlin:

1.0000

ineqlin:

[]

lower:

[]

upper:

[]

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

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

sub.to

其中:

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=[],b=[];

Aeq、beq由线性等式约束

确定,没有,则Aeq=[],beq=

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2