You are on page 1of 25

《工程结构优化设计》

上机实验(三)

2013.12.04
上机目的
1、会使用Matlab工具箱求函数的极值;
2、会使用Matlab工具箱解决无约束最优化问题.

上机内容
1、 Matlab中函数的输入与调用;

2、函数极值的求法;
3、无约束最优化问题.
第一节 Matlab中函数的输入与调用
一、自变量为数量形式的函数的输入

在Matlab中,函数是采用M文件的方式存储的。
具体步骤如下:

1、新建一个M文件:通过点击主窗口左上的新建按钮。
2、输入函数内容:

例:函数 f(x1,x2)=exp(X1^2+X2)

应在M文件中输入如下:
注意:
(1)、函数标识关键字:function
(2)、函数名:f1=f1 自变量: (x1,x2)
(3)、函数表达式:a=exp(x1^2+x2)
函数表达式可以由多个式子组成。
(4)、给函数结果赋值:f1=a
3、存储函数:点击编辑窗口的保存按钮。
注意:不要改变保存路径,文件名称必须和函数名称一致。

4、函数的调用:
函数保存后,在命令窗口中即可调用该函数。
如求上述函数在x1=1,x2=2处的函数值,即可在命令
窗口中输入:f1(1,2)
其中 f1 为刚才所输入的函数名。
二、自变量为向量形式函数的输入

例:函数f(x)=exp(x(1)^2+x(2)).其中x=(x(1),x(2)),
即x为一个二维向量。
此时的输入与调用方式与数量时不同。

1、输入:
2、调用:
此时自变量为向量,调用格式为:f2([1,2])
或 x=[1 2]; f2(x) 即,自变量需采用向量形式输入。

3、实际运行结果如下:
>> f2([1,2])
ans =
20.0855
>> x=[1,2];
>> f2(x)
ans =
20.0855
第二节 函数极值的求法
一、一元函数极值的求法
Matlab中,求一元函数极值的函数为 fminbnd

1、此函数最简输入格式为:x=fminbnd(f,a,b)
含义为:求函数f在区间[a,b]上的最小值点(自变量值).

2、对于最大值问题,需转化为最小值问题来处理。
( -f(x)在区间[a,b]上的最小值就是f(x)在[a,b]的最大值)
3、常用格式[x,fval]=fminbnd(f,a,b).
结果中,fval为最小值,x为取到最小值的点。

例:Matlab命令:
[x,fval]=fminbnd('x.^2+3*x+1',-2,3)
含义是:求函数f(x)=x^2+3*x+1在[-2,3]内的最小值。
结果为
x = -1.5000 fval = -1.2500

注:此时函数很简单,故没有使用M文件。
二、多元函数极值的求法
多元函数的最小值问题,在Matlab中有2个经常
使用的函数:
1、fminsearch 2、fminunc

注意:
(1)、在使用这两个函数时,必须首先用M文
件的形式存储待求最值的函数,并且需以向量函数
的形式表达;
( 2)、最大值问题需转化为最小值问题。
1、 fminsearch

(1)、此函数使用单纯型法搜索最值;

(2)、使用格式:
[x,fval]= fminsearch(@f,x0)
其中f为待求最值的向量函数,x0为搜索过程
开始时自变量的初始值。

例:fminsearch(@f,[1,2]) 含义为:在x=[1,2]附近搜
寻函数f的最小值。
例:求函数f(x,y)= -(x+y)+(x^2+y^2+1)在x=1,y=2
附近的最小值点。
解决步骤:
1、建立M文件,保存函数f;
M文件内容为:
function f1=f1(x)
a=-(x(1)+x(2));
b=(x(1)^2+x(2)^2+1);
f1=a+b;
2、调用fminsearch函数求最值.
在命令窗口中,输入:
x0=[1,2];
[x,fval]=fminsearch(@f1,x0)
3、输出结果为:
X = 0.5000 0.5000
fval =0.5000
2、 fminunc
(1)、此函数与fminsearch不同的地方在于使用的
搜索方法不同,它使用牛顿法搜索最值,在效率上
有所提高;

(2)、使用格式与fminsearch类似:
[x,fval]= fminunc(@f,x0)
其中f为待求最值的向量函数,x0为搜索过程开
始时自变量的初始值。

例:fminunc(@f,[1,2]) 含义为:在x=[1,2]附近搜寻
函数f的最小值。
第三节 无约束最优化问题

求解无约束最优化问题的的基本思想

* Matlab优化工具箱简介
一、求解无约束最优化问题的基本思想
标准形式: minn f  X 
XE

其中 f : E n  E1
maxn f  X  = minn [ f  X ]
XE X E

求解的基本思想 ( 以二元函数为例 )
x2 f ( X 0 )  f ( X1 )  f ( X 2 )
f ( x1 x2 )

X0


X1
微 3 1 X2
0
x2 5
x1 x1
0
唯一极小
(全局极小)

f ( x1 x2 )  2 x12  2 x1 x2  x22  3x1  x2

f  0

f  0.298

f  0.298
多局部极小
最优点 (1 1)
搜索过程 min f ( x1 x2 )  100( x2  x )  (1  x1 )
2 2
1
2
初始点 (-1 1)
x1 x2 f
-1 1 4.00
-0.79 0.58 3.39
-0.53 0.23 2.60
-0.18 0.00 1.50
0.09 -0.03 0.98
0.37 0.11 0.47
0.59 0.33 0.20
0.80 0.63 0.05
0.95 0.90 0.003
0.99 0.99 1E-4
0.999 0.998 1E-5
0.9997 0.9998 1E-8
二、用Matlab解无约束优化问题(举例说明)
1. 一元函数无约束优化问题: min f(x) x1  x  x2
常用格式如下:
(1)x= fminbnd (fun,x1,x2)
(2)x= fminbnd (fun,x1,x2 ,options)
(3)[x,fval]= fminbnd(...)
(4)[x,fval,exitflag]= fminbnd(...)
(5)[x,fval,exitflag,output]= fminbnd(...)

其中(3)、(4)、(5)的等式右边可选用(1)或(2)
的等式右边。
函数fminbnd的算法基于黄金分割法和二次插值法,它要
求目标函数必须是连续函数,并可能只给出局部最优解。
x
例1 求 f = 2e sin x 在 0<x<8 中的最小值与最大值
解 在matlab命令窗口中输入:
f='2*exp(-x).*sin(x)';
fplot(f,[0,8]); %作图语句
[xmin,ymin]=fminbnd (f, 0,8)
f1='-2*exp(-x).*sin(x)';
[xmax,ymax]=fminbnd (f1, 0,8)

运行结果:
xmin = 3.9270 ymin = -0.0279
xmax = 0.7854 ymax = 0.6448
例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以
制成方形无盖水槽,问如何剪法使水槽的容积最大?
解 设剪去的正方形的边长为x,则水槽的容积为: (3  2 x)2 x
建立无约束优化模型为:min y=- (3  2 x) x , 0<x<1.5
2

先编写M文件fun0.m如下:
function f=fun0(x)
f=-(3-2*x).^2*x;
主程序为:
[x,fval]=fminbnd('fun0',0,1.5);
xmax=x
fmax=-fval

运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边


长为0.5米时水槽的容积最大,最大容积为2立方米.
2、多元函数无约束优化问题
标准型为:min F(X)

命令格式为:
(1)x= fminunc(fun,X0 );或x=fminsearch(fun,X0 )
(2)x= fminunc(fun,X0 ,options);
或x=fminsearch(fun,X0 ,options)
(3)[x,fval]= fminunc(...);
或[x,fval]= fminsearch(...)
(4)[x,fval,exitflag]= fminunc(...);
或[x,fval,exitflag]= fminsearch
(5)[x,fval,exitflag,output]= fminunc(...);
或[x,fval,exitflag,output]= fminsearch(...)
说明:
•fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明:
[1] fminunc为无约束优化提供了大型优化和中型优化算法。由options中
的参数LargeScale控制:
LargeScale=’on’(默认值),使用大型算法
LargeScale=’off’(默认值),使用中型算法

[2] fminunc为中型优化算法的搜索方向提供了4种算法,由 options中的参


数HessUpdate控制:
HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;
HessUpdate=’dfp’,拟牛顿法的DFP公式;
HessUpdate=’steepdesc’,最速下降法

[3] fminunc为中型优化算法的步长一维搜索提供了两种算法,由options中参
数LineSearchType控制:
LineSearchType=’quadcubic’(缺省值),混合的二次和三次多项式插值;
LineSearchType=’cubicpoly’,三次多项式插

•使用fminunc和 fminsearch可能会得到局部最优解.
例3 min f(x)=(4x12+2x22+4x1x2+2x2+1)*exp(x1)

1、编写M-文件 fun1.m:
function f = fun1 (x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);

2、输入命令窗口中输入:
x0 = [-1, 1];
x=fminunc('fun1',x0);
y=fun1(x)

3、运行结果:
x= 0.5000 -1.0000
y = 1.3029e-10
上机作业(三)
1、求函数 f ( x)  x2  3x  2 在区间[-10,10]内的最值?

2 x 2  3x  4
2、求函数 f ( x)  2 在区间[-1,3]内的最值?
x  2x  2

3、某工厂要制作一个容积为100立方米的无盖长方体
容器,问:怎样制作材料最省?

4、要制作一表面积为108平米的水池,问:怎样选择
长宽高,能使得容积最大?

You might also like