好文档 - 专业文书写作范文服务资料分享网站

Matlab在最优化问题中的应用

天下 分享 时间: 加入收藏 我要投稿 点赞

f=3*x(1)^2+2*x(1)*x(2)+x(2)^2;

然后调用fminunc函数求[1,1]附近f (x)函数的最小值: >> x0=[1,1];

>> [x,fval]=fminunc(@Ex10071,x0)

Warning: Gradient must be provided for trust-region method; using line-search method instead.

> In E:\\matlab6p1\\toolbox\\optim\\fminunc.m at line 211 Optimization terminated successfully: Search direction less than 2*options.TolX x =

1.0e-008 *

-0.7591 0.2665 fval =

1.3953e-016

下面用提供的梯度g最小化函数,修改M文件为Ex10072.m: function [f,g]=Ex10072(x)

f=3*x(1)^2+2*x(1)*x(2)+x(2)^2; if nargout>1

g(1)=6*x(1)+2*x(2); g(2)=2*x(1)+2*x(2); end

下面通过将优化选项结构options.GradObj设置为’on’来得到梯度值。 >> options=optimset('GradObj','on'); >> x0=[1,1];

>> [x,fval]=fminunc(@Ex10072,x0,options) Optimization terminated successfully:

First-order optimality less than OPTIONS.TolFun, and no negative/zero

curvature detected

x =

1.0e-015 *

0.1110 -0.8882 fval =

6.2862e-031

x122

例10-8 求函数f (x) = e (4x1+2x2+4x1x2+2x2+1)的最小值。 解:在Matlab中实现:

>>[x,fval,exitflag,output]=fminunc('exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)',[-1,1])

Warning: Gradient must be provided for trust-region method; using line-search method instead.

> In E:\\matlab6p1\\toolbox\\optim\\fminunc.m at line 211 Optimization terminated successfully:

Current search direction is a descent direction, and magnitude of directional derivative in search direction less than 2*options.TolFun x =

0.5000 -1.0000 fval =

1.3028e-010 exitflag = 1 output =

iterations: 7

funcCount: 40 stepsize: 1

firstorderopt: 8.1998e-004

algorithm: 'medium-scale: Quasi-Newton line search' 例10-9 求无约束非线性问题

222

f (x) = 100 (x2-x1)+(1-x1) x0 = [-1.2, 1] 解:在Matlab中实现: >> x0=[-1.2,1];

>> [x,fval]=fminunc('100*(x(2)-x(1)^2)^2+(1-x(1))^2',x0) Warning: Gradient must be provided for trust-region method; using line-search method instead.

> In E:\\matlab6p1\\toolbox\\optim\\fminunc.m at line 211 Optimization terminated successfully:

Current search direction is a descent direction, and magnitude of directional derivative in search direction less than 2*options.TolFun x =

1.0000 1.0000 fval =

1.9116e-011

10.2.2 二次规划

数学模型:如果某非线性规划的目标函数为自变量的二次函数,约束条件全是线性函数,就称这种规划为二次规划。其数学模型为

1TxHx?fTx x2 A?x?b

Aeq?x?beq lb?x?ub

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

函数:quadprog

功能:求解二次规划问题。 格式:x = quadprog(H,f,A,b)

x = quadprog(H,f,A,b,Aeq,beq)

x = quadprog(H,f,A,b,Aeq,beq,lb,ub) x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options,p1,p2,...) [x,fval] = quadprog(...)

[x,fval,exitflag] = quadprog(...)

[x,fval,exitflag,output] = quadprog(...)

[x,fval,exitflag,output,lambda] = quadprog(...) 说明:

x = quadprog(H,f,A,b) 返回向量x,最小化函数1/2*x’*H*x+f’*x,其约束条件为A*x<=b。

x = quadprog(H,f,A,b,Aeq,beq) 仍求上面的解,但添加了等式约束条件Aeq*x = beq。 x = quadprog(H,f,A,b,Aeq,beq,lb,ub) 定义设计变量的下界lb和上界ub,使得lb<=x<=ub。

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 = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options,p1,p2,...) 将参数P1,P2等直

min接输给Hessian乘子函数,如果存在,用options参数中的HessMult属性指定。

[x,fval] = quadprog(...) 返回解x处的目标函数fval = 1/2*x’*H*x+f’*x。 [x,fval,exitflag] = quadprog(...) 返回exitflag参数,描述计算的退出条件。 [x,fval,exitflag,output] = quadprog(...) 返回包含优化信息的结构输出output。 [x,fval,exitflag,output,lambda] = quadprog(...) 返回解x处包含Lagrange乘子的lambda参数。

各变量的意义同前。 注意:

(1)一般地,如果问题不是严格凸性的,用quadprog函数得到的可能是局部最优解; (2)如果用Aeq和Beq明确地指定等式约束,而不是用lb和ub指定,则可以得到更好的数值解;

(3)若x的组分没有上限或下限,则quadprog函数希望将对应的组分设置为Inf(对于上限)或-Inf(对于下限),而不是强制性地给予上限一个很大的数或给予下限一个很小的负数;

(4)对于大型优化问题,若没有提供初值x0,或x0不是严格可行,则quadprog函数会选择一个新的初始可行点;

(5)若为等式约束,且quadprog函数发现负曲度(negative curvature),则优化过程终止,exitflag的值等于-1;

(6)此时,显示水平只能选择’off’和’final’,迭代参数’iter’不可用; (7)当问题不定或负定时,常常无解(此时exitflag参数给出一个负值,表示优化过程不收敛)。若正定解存在,则quadprog函数可能只给出局部极小值,因为问题可能是非凸的;

(8)对于大型问题,不能依靠线性等式,因为Aeq必须是行满秩的,即Aeq的行数必须不多于列数。若不满足要求,必须调用中型算法进行计算;

(9)大型化问题 大型化问题不允许约束上限和下限相等,如若lb (2)= =ub (2),则给出以下出错信息:

Equal upper and lower bounds not permitted in this large-scale method.Use equality constraints and the medium-scale method instead.

若优化模型中只有等式约束,仍然可以使用大型算法;如果模型中既有等式约束又有边界约束,则必须使用中型方法。

中型优化问题 当解不可行时,quadprog函数给出以下警告:

Warning: The constraints are overly stringent; there is no feasible solution. 这里,quadprog函数生成使约束条件矛盾最坏程度最小的结果。 当等式约束不连续时,给出下面的警告信息:

Warning: The equality constraints are overly stringent; there is no feasible solution.

当Hessian矩阵为负半定时,生成无边界解,给出下面的警告信息:

Warning: The solution is unbounded and at infinity; the constraints are not restrictive enough.

这里,quadprog函数返回满足约束条件的x值。 例10-10 求解下面的最优化问题: 目标函数

f(x)?122x1?x2?x1x2?2x1?6x2 2约束条件

x1?x2?2 ?x1?2x2?2 2x1?x2?3

0?x1,0?x2

解:首先,目标函数写成下面的矩阵形式:

?x1??1?1???2?x?f? H??,,?x? ???6??12?2?????在Matlab中实现: >> H=[1 -1;-1 2]; >> f=[-2;-6];

>> A=[1 1;-1 2;2 1]; >> b=[2;2;3]; >> lb=zeros(2,1);

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

Warning: Large-scale method does not currently solve this problem formulation, switching to medium-scale method.

> In E:\\matlab6p1\\toolbox\\optim\\quadprog.m at line 213 Optimization terminated successfully. x =

0.6667 1.3333 fval = -8.2222 exitflag = 1 output =

iterations: 3

algorithm: 'medium-scale: active-set' firstorderopt: [] cgiterations: [] lambda =

lower: [2x1 double] upper: [2x1 double] eqlin: [0x1 double] ineqlin: [3x1 double] >> lambda.lower ans = 0 0

>> lambda.ineqlin ans =

3.1111 0.4444 0

10.2.3 有约束规划

函数:fmincon

功能:求多变量有约束非线性函数的最小值。 数学模型:

minf(x)

x c(x)?0 ceq(x)?0 A?x?b

Aeq?x?beq lb?x?ub

其中,x,b,beq,lb和ub为向量,A和Aeq为矩阵,c(x)和ceq(x)为函数,返回标量。f(x),c(x)和ceq(x)可以是非线性函数。 格式: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(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...) [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(...) 说明:

fmincon 求多变量有约束非线性函数的最小值。该函数常用于有约束非线性优化问题。 x = fmincon(fun,x0,A,b) 给定初值x0,求解fun函数的最小值点x。fun函数的约束条件为A*x<=b,x0可以是标量、向量或矩阵。

x = fmincon(fun,x0,A,b,Aeq,beq) 最小化fun函数,约束条件为A*x<=b和Aeq*x = beq。若没有不等式存在,则设置A = [ ],b = [ ]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 定义设计变量x的下界lb和上界ub,使得lb<=x<=

ub。若无等式存在,则令Aeq = [ ],beq = [ ]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 在上面的基础上,在nonlcon参数中提供非线性不等式c (x)或等式ceq (x)。fmincon函数要求c (x)<=0且ceq (x) = 0。当无边界存在时,令lb = [ ]和(或)ub = [ ]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 用options参数指定的参数进行最小化。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...) 将问题参数P1,P2等直接传递给函数fun和nonlcon。若不需要参数A,b,Aeq,beq,lb,ub,nonlcon和options,将它们设置为空矩阵。

[x,fval] = fmincon(...) 返回解x处的目标函数值。

[x,fval,exitflag] = fmincon(...) 返回exitflag参数,描述计算的退出条件。 [x,fval,exitflag,output] = fmincon(...) 返回包含优化信息的结构输出output。 [x,fval,exitflag,output,lambda] = fmincon(...) 返回解x处包含Lagrange乘子的lambda参数。

[x,fval,exitflag,output,lambda,grad] = fmincon(...) 返回解x处fun函数的梯度。

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...) 返回解x处fun函数的Hessian矩阵。

·nonlcon参数

该参数计算非线性不等式约束c (x)<=0和非线性等式约束ceq (x) = 0。nonlcon参数是一个包含函数名的字符串。该函数可以是M文件、内部文件或MEX文件。它要求输入一个向量x,返回两个变量——解x处的非线性不等式向量c和非线性等式向量ceq。例如,若nonlcon = ‘mycon’,则M文件mycon.m具有下面的形式:

function [c, ceq] = mycon (x)

c = … %计算x处的非线性不等式 ceq =… %计算x处的非线性等式 若还计算了约束的梯度,即

options = optimset (‘GradConstr’, ‘on’)

Matlab在最优化问题中的应用

f=3*x(1)^2+2*x(1)*x(2)+x(2)^2;然后调用fminunc函数求[1,1]附近f(x)函数的最小值:>>x0=[1,1];>>[x,fval]=fminunc(@Ex10071,x0)Warning:Gradientmustbeprovidedfortrust-regionmethod;u
推荐度:
点击下载文档文档为doc格式
22ukl4kbpj207lq1bbd16zh7s4eqk601d4z
领取福利

微信扫码领取福利

微信扫码分享