内容发布更新时间 : 2024/11/14 23:58:29星期一 下面是文章的全部内容请认真阅读。
龙源期刊网 http://www.qikan.com.cn
一些最优化问题的Matlab实现
作者:陈小平 史雪莹
来源:《科技视界》2014年第14期
【摘 要】本文研究了Matlab中几种常用求最优化问题的函数,以及它们的调用格式,通过简单的典型例子来说明其用法,主要目的通过这一分析能便于学生在解决数学建模的一些问题时能起到帮助,使其能更快地掌握数学建模中求解最优化问题的思想和方法。 【关键词】Matlab,最优化问题,典型实例,数学建模 The Realization of Some Optimization Problems by Matlab CHEN xiao-ping SHI xue-ying
(Department of Basic,Jincheng college of NUAA,Nanjing Jiangsu 211156,China) 【Abstract】In this paper, several common optimization functions,and their formats are studied.Besides we illustrate their typical usages by the simple mathematical examples.The main purpose of our paper is to give some helps for the students in solving some problems of the
mathematical modeling, and to make them more quickly grasp the thoughts and methods for the optimization problems in the mathematical modeling.
【Key words】Matlab; optimization problems; typical examples; mathematical modeling Matlab是美国Math Works公司推出的一个应用软件,它已被广泛的应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等方面。本文就Matlab在解决优化问题中的一些应用结合一些实例列来加以说明,主要目的便于学生在解决数学建模的一些问题时能起到一定的帮助,因为数学建模中的许多问题都可以转化为最优化模型,比如大家比较熟悉的往年数学建模真题中的“逢山开路”问题,本质上为路线设计最优化问题;投资的收益和风险问题,本质为数学规划问题,以及车灯线光源的设计和饮酒驾车问题等等本质上均为最优化问题。鉴于以上原因,下面将Matlab中一些求解数学建模中的一些最优化方法结合本人在指导学生数学建模竞赛的经验来做一简单的归纳与分析,希望能起到抛砖引玉的作用。
首先先介绍一下什么是优化问题。它是指用最好的方式使用或分配有限的资源即劳动力原材料机器资金等使得费用最小或利润最大。 其数学模型如下: ■=f(x)(1)
龙源期刊网 http://www.qikan.com.cn
s.t. s.t.gi(x)≤0(i=1,2,...,n) (2)
其中是x=(x1,x2,...,xn)T为n维向量,称f(x)为目标函数,称gi(x)≤0为约束条件,称若只有(1)的模型为无约束优化模型;称由(1)、(2)组成的模型为约束优化模型。
若上述优化模型中的目标函数f(x)和约束条件gi(x) 均为线性函数,则称该模型为线性规划;若目标函数或约束条件中至少有一个为非线性函数,则此时的优化问题称之为非线性规划问题。下面分为三个方面来介绍。 1 无约束优化问题
无约束优化问题的模型一般表达式为:■=f(x),其中x为n维向量。
Matlab中求无约束优化模型最基本的是fmin与fmins函数,具体格式、功能及举例如下: (a)x=fmin('fun',x1,x2);
(b)x=fminu('fun',x0)或者x=fmins('fun',x0);
(c)x=fminu('fun',x0,options)或者x=fmins('fun',x0,options);
其中:(a)用于求解一元函数无约束极小化问题, x1,x2分别为x的上、下界;而(b)和(c)用于求多元函数的无约束极小化问题,x0为初始迭代值。此外,fmin与fmins可以直接定义函数F(x),不一定非要用M-文件,而fminu必须先用M-文件定义函数F(x)。
例1 用Matlab求f(x)=2e-xsinx在(0,8)中的最小值和最大值。 在Matlab命令窗口输入如下命令:
>> f='2*exp(-x).*sin(x)'; xmin=fmin(f,0,8); x=xmin; ymin=eval(f),f1='-2*exp(-x).*sin(x)'; xmax=fmin(f1,0,8); x=xmax; ymax=eval(f1) 以上命令运行结果为:
ymin =-0.0279; ymax=-0.6448; 2 线性规划问题
Matlab中求无约束优化模型最基本的是linprog函数,具体格式、功能及举例如下:
龙源期刊网 http://www.qikan.com.cn
(a) x=linprog(c,A,b)
用于求解下列形式的模型min z=cxs.t.Ax≤b (b) x=linprog(c,A,b,vlb,vub)
用于求解下列形式的模型min z=cxs.t.Ax≤bvlb≤x≤vub (c) x=linprog(c,A,b,vlb,vub,x0) 也用于求解(b)中的模型,其中x0表示初始点。 (d) x=linprog(c,A,b,vlb,vub,x0,N)
也用于求解(b)中的模型,其中x0表示初始点,N表示Ax≤b中的前N个约束是等式约束。
例2 用Matlab求minf(x)=-80x1-125x2,s.t.8x1+5x2≤35006x1+4x2≤18004x1+5x2≤3500x1,x2≥0 在Matlab命令窗口输入如下命令:
c=[-80 -125]; A=[8 5;6 4;4 5];b=[3500;1800;2800];vlb=[0;0];vub=[inf;inf]; x=lp(c,A,b,vlb,vub),f=c*x 以上命令运行结果为: x = 0 450
f =-5.625e+004 3 非线性规划问题
此部分主要以二次规划问题为例,讨论如何使用Matlab求解这类问题。二次规划模型一般表达式为:minF(x),s.t.A≤b。
Matlab中求二次规划模型最基本的是quadprog函数,具体格式、功能及举例如下: (a) x=quadprog(H,c,A,b);