MATLAB 函数解优化问题 下载本文

最低总运费为:122元。

§2 非线性规划模型

一.非线性规划课题

实例1 表面积为36平方米的最大长方体体积。 建立数学模型:

设x、y、z分别为长方体的三个棱长,f为长方体体积。

max f = x y (36-2 x y)/2 (x+y) 实例2 投资决策问题

某公司准备用5000万元用于A、B两个项目的投资,设x1、x2分别表示配给项目A、B的投资。预计项目A、B的年收益分别为20%和16%。同时,投资后总的风险损失将随着总投资和单位投资的增加而增加,已知总的风险损失为2x12+x22+(x1+x2)2.问应如何分配资金,才能使期望的收益最大,同时使风险损失为最小。

建立数学模型:

max f=20x1+16x2-λ[2x12+x22+(x1+x2)2] s.t x1+x2≤5000 x 1≥0,x2≥0

目标函数中的λ≥0是权重系数。

由以上实例去掉实际背景,其目标函数与约束条件至少有一处是非线性的,称其为非线性问题。

非线性规划问题可分为无约束问题和有约束问题。实例1为无约束问题,实例2为有约束问题。

二.无约束非线性规划问题:

求解无约束最优化问题的方法主要有两类:直接搜索法(Search method)和梯度法(Gradient method).

1.fminunc函数

调用格式: x=fminunc(fun,x0) x=fminunc(fun,x0,options) x=fminunc(fun,x0,options,P1,P2) [x,fval]=fminunc(…) [x,fval, exitflag]=fminunc(…) [x,fval, exitflag,output]=fminunc(…)

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

说明:fun为需最小化的目标函数,x0为给定的搜索的初始点。options指定优化参数。 返回的x为最优解向量;fval为x处的目标函数值;exitflag描述函数的输出条件;output返回优化信息;grad返回目标函数在x处的梯度。Hessian返回在x处目标函数的Hessian矩阵信息。

例1 : 求 程序:编辑ff1.m文件 function f=ff1(x)

f=8*x(1)-4*x(2) +x(1)^2+3*x(2)^2; 通过绘图确定一个初始点: [x,y]=meshgrid(-10:.5:10); z= 8*x-4*y +x.^2+3*y.^2; surf(x,y,z)

--[endif]-->

选初始点:x0=(0,0) x0=[0,0];

[x,fval,exitflag]=fminunc(@ff1,x0) 结果:x =

-4.0000 0.6667 fval =

-17.3333 exitflag = 1 例2:

程序:编辑ff2.m文件: function f=ff2(x)

f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2; 取初始点:x0=(1,1)

x0=[1,1];

[x,fval,exitflag]=fminunc(@ff2,x0) 结果: x = 1.0e-007 * -0.1721 0.1896

fval =

2.7239e-016

exitflag =

1

例3:将上例用提供的梯度g最小化函数进行优化计算。 修改M文件为:

function [f,g]=ff3(x)

f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2; if nargut >1

g(1)=8*x(1)+5*x(2); g(2)=5*x(1)+4*x(2); end

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

[x,fval,exitflag]=fminunc(@ff3,x0,options) 结果: x =

1.0e-015 * -0.2220 -0.2220