您所在的位置:读书频道 > 设计开发 > 软件工程 > 15.3.3 用MATLAB求解优化问题

15.3.3 用MATLAB求解优化问题

2010-07-21 11:31 于艳华等译 清华大学出版社 字号:T | T
一键收藏,随时查看,分享好友!

《工程数值方法(第6版)》第15章约束优化,本章讨论带有约束条件的优化问题。首先关注目标函数和约束条件都是线性函数的情况。利用这些线性性质来求解问题的方法统称为线性规划(linear programming)方法。本节为大家介绍用MATLAB求解优化问题。

AD:

15.3.3  用MATLAB求解优化问题

如表15-1所示,MATLAB软件有多种内建的函数可以完成最优化求解。下面两个例子将说明它们是如何使用的。

表15-1  实现最优化的MATLAB函数

   

   

fminbnd

fminsearch

带有绑定约束的单变量函数最小化

多变量函数最小化

例15.5  使用MATLAB求解一维优化问题

问题:使用MATLAB中的fminbnd函数在[0,4]区间中求

 

的最大值。第13章使用了几种方法解这个问题,该问题的解为

解:首先新建一个M-文件来表示该函数。

 
因为我们关注的是最大值,而fminbnd函数是求最小值的,所以将函数取反。然后,使用fminbnd函数求解:
 
注意,该函数还可以设置参数。一个很有用的参数是设置优化选项,比如误差限(Error Tolerance)或最大迭代次数。设置这些参数是通过optimset函数实现的(在前面的例7.6中使用过该函数),其一般格式为:
 

MATLAB有许多处理多维函数的功能。第13章提到,一维搜索的图形类似于过山车,而二维搜索的图形类似于山峰和山谷。在下面的例子中,MATLAB的画图功能为可视化这类函数提供了一个方便的方式。

例15.6  绘制二维函数的图形

问题:使用MATLAB的画图功能绘制如下函数的图形,以便以可视方式评估在区间?2 ≤ x1 ≤ 0和0 ≤ x2 ≤ 3中的最小值。

 
解:下面的脚本会生成函数的等高线图和网格图:
 
如图15-8所示,这两个图都指出,该函数在x1 = -1,x2 = 1.5处达到最小值,此时的f (x1, x2) 在 0到1之间。
 
标准MATLAB有一个函数fminsearch,可用于确定多维函数的最小值。它基于Nelder-Mead法,Nelder-Mead法是一个直接法,它仅使用函数值(不需要计算导数),来处理不光滑的目标函数。其语法的简单表达如下:
  1. [xmin, fval] = fminsearch(function,x1,x2) 

其中xmin和fval是最小值点的位置和值,function是要计算的函数名,x1和x2是要搜索的区间。

例15.7  使用MATLAB求解多维优化问题

问题:用MATLAB的fminsearch函数求解例15.6中的简单函数

 

的最大值,初始估计值为x=-0.5,y = 0.5。

解:使用fminsearch函数求解:

  1. >> f=@(x) 2+x(1)-x(2)+2*x(1)^2+2*x(1)*x(2)+x(2)^2;  
  2. >> [x,fval]=fminsearch(f,[-0.5,0.5])  
  3. x =  
  4.    -1.0000 1.5000  
  5. fval =  
  6. 0.7500 

这个函数与上面使用的fminbnd函数一样,也可以指定优化过程中的附加参数。比如,可以使用optimset函数限制最大迭代次数:

  1. >> [x,fval]=fminsearch(f,[-0.5,0.5],optimset('MaxIter',2)) 

结果为:

  1. Exiting: Maximum number of iterations has been exceeded  
  2. - increase MaxIter option.  
  3. Current function value: 1.225625  
  4. x =  
  5. -0.5000 0.5250  
  6. fval =  
  7. 1.2256 

从结果可知,在迭代次数上的严格限制使函数没有达到最大值,而优化求解被迫终止。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

菜鸟与诸神:讲述ActionScript 3与Web Game的故事

本书采用故事模式讲述一门编程语言,以一个无知的菜鸟成长过程为[详细]

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点专题

更多>>

读书

Linux编程技术详解
本书全面介绍了Linux编程相关的知识,内容涵盖Linux基本知识、如何建立Linux开发环境、Linux开发工具、Linux文件系统、文件I/O操

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i