非线性规划及matlab应用
- 格式:docx
- 大小:194.81 KB
- 文档页数:8
MATLAB优化应用非线性规划非线性规划是一类数学优化问题,其中目标函数和约束条件都是非线性的。
MATLAB作为一种强大的数值计算软件,提供了丰富的工具和函数,可以用于解决非线性规划问题。
本文将介绍如何使用MATLAB进行非线性规划的优化应用,并提供一个具体的案例来演示。
一、MATLAB中的非线性规划函数MATLAB提供了几个用于解决非线性规划问题的函数,其中最常用的是fmincon函数。
fmincon函数可以用于求解具有等式约束和不等式约束的非线性规划问题。
其基本语法如下:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中,fun是目标函数,x0是变量的初始值,A和b是不等式约束的系数矩阵和右端向量,Aeq和beq是等式约束的系数矩阵和右端向量,lb和ub是变量的上下界,nonlcon是非线性约束函数,options是优化选项。
二、非线性规划的优化应用案例假设我们有一个工厂,需要生产两种产品A和B,目标是最大化利润。
产品A 和B的生产成本分别为c1和c2,售价分别为p1和p2。
同时,我们需要考虑两种资源的限制,分别是资源1和资源2。
资源1在生产产品A和B时的消耗分别为a11和a12,资源2的消耗分别为a21和a22。
此外,产品A和B的生产量有上下限限制。
我们可以建立以下数学模型来描述这个问题:目标函数:maximize profit = p1 * x1 + p2 * x2约束条件:c1 * x1 + c2 * x2 <= budgeta11 * x1 + a12 * x2 <= resource1a21 * x1 + a22 * x2 <= resource2x1 >= min_production_Ax2 >= min_production_Bx1 <= max_production_Ax2 <= max_production_B其中,x1和x2分别表示产品A和B的生产量,budget是预算,min_production_A和min_production_B是产品A和B的最小生产量,max_production_A和max_production_B是产品A和B的最大生产量。
题 目 非线性规划的MATLAB 解法及其应用(一) 问题描述非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。
非线性规划是20世纪50年代才开始形成的一门新兴学科。
70年代又得到进一步的发展。
非线性规划在工程、管理、经济、科研、军事等方面都有广泛的应用,为最优设计提供了有力的工具。
在经营管理、工程设计、科学研究、军事指挥等方面普遍地存在着最优化问题。
例如:如何在现有人力、物力、财力条件下合理安排产品生产,以取得最高的利润;如何设计某种产品,在满足规格、性能要求的前提下,达到最低的成本;如何确定一个自动控制的某些参数,使系统的工作状态最佳;如何分配一个动力系统中各电站的负荷,在保证一定指标要求的前提下,使总耗费最小;如何安排库存储量,既能保证供应,又使储存 费用最低;如何组织货源,既能满足顾客需要,又使资金周转最快等。
对于静态的最优化 问题,当目标函数或约束条件出现未知量的非线性函数,且不便于线性化,或勉强线性化后会招致较大误差时,就可应用非线性规划的方法去处理。
具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。
非线性规划研究一个n 元实函数在一组等式或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是未知量的非线性函数。
目标函数和约束条件都是线性函数的情形则属于线性规划。
本实验就是用matlab 软件来解决非线性规划问题。
(二) 基本要求掌握非线性规划的MATLAB 解法,并且解决相关的实际问题。
题一 :对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?题二: 某厂生产一种产品有甲、乙两个牌号,讨论在产销平衡的情况下如何确定各自的产量,使总利润最大. 所谓产销平衡指工厂的产量等于市场上的销量.符号说明:z(x 1,x 2)表示总利润;p 1,q 1,x 1分别表示甲的价格、成本、销量; p 2,q 2,x 2分别表示乙的价格、成本、销量; a ij ,b i ,λi ,c i (i ,j =1,2)是待定系数.题三:设有400万元资金, 要求4年内使用完, 若在一年内使用资金x 万元, 则可得效益x 万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大.(三) 数据结构题一:设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-;建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5题二:总利润为: z(x1,x2)=(p1-q1)x1+(p2-q2)x2若根据大量的统计数据,求出系数b1=100,a11=1,a12=0.1,b2=280,a21=0.2,a22=2,r1=30,λ1=0.015,c1=20, r2=100,λ2=0.02,c2=30,则问题转化为无约束优化问题:求甲,乙两个牌号的产量x1,x2,使总利润z 最大.为简化模型,先忽略成本,并令a12=0,a21=0,问题转化为求:z1 = ( b1 - a11x1 ) x1 + ( b2 - a22x2 ) x2的极值. 显然其解为x1 = b1/2a11 = 50, x2 = b2/2a22 = 70,我们把它作为原问题的初始值.题三:设变量i x 表示第i 年所使用的资金数,则有 4,3,2,1,04.5321.121.1331.14841.121.14401.1400..max 43213212114321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i(四) 源程序题一:编写M 文件fun0.m:function f=fun0(x)f=-(3-2*x).^2*x;主程序为wliti2.m:[x,fval]=fminbnd('fun0',0,1.5);xmax=xfmax=-fval题二:建立M-文件fun.m:function f = fun(x)y1=((100-x(1)- 0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1); y2=((280-0.2*x(1)- 2*x(2))-(100*exp(-0.02*x(2))+30))*x(2); f=-y1-y2;输入命令:x0=[50,70];x=fminunc(‘fun ’,x0),z=fun(x)题三:建立M 文件 fun44.m,定义目标函数:function f=fun44(x)f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));建立M 文件mycon1.m 定义非线性约束:function [g,ceq]=mycon1(x)g(1)=x(1)-400;g(2)=1.1*x(1)+x(2)-440;g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4;ceq=0主程序youh4.m 为:x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[];beq=[];[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,'mycon1')(五) 运行结果题一:运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.题二:运行结果为:x=23.9025, 62.4977, z=6.4135e+003即甲的产量为23.9025,乙的产量为62.4977,最大利润为6413.5.题三:运行结果为:x1=86.2;x2=104.2;x3=126.2;x4=152.8;z=43.1(六) 相关知识用Matlab 解无约束优化问题一元函数无约束优化问题21),(m in x x x x f ≤≤常用格式如下:(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)的等式右边。
Matlab中的最优化问题求解方法近年来,最优化问题在各个领域中都扮演着重要的角色。
无论是在工程、经济学还是科学研究中,我们都需要找到最优解来满足特定的需求。
而Matlab作为一种强大的数值计算软件,在解决最优化问题方面有着广泛的应用。
本文将介绍一些Matlab中常用的最优化问题求解方法,并探讨其优缺点以及适用范围。
一. 无约束问题求解方法1. 最速下降法最速下降法是最简单且直观的无约束问题求解方法之一。
其基本思想是沿着梯度的反方向迭代求解,直到达到所需的精度要求。
然而,最速下降法的收敛速度通常很慢,特别是在局部极小值点附近。
2. 共轭梯度法共轭梯度法是一种改进的最速下降法。
它利用了无约束问题的二次函数特性,通过选择一组相互共轭的搜索方向来提高收敛速度。
相比于最速下降法,共轭梯度法的收敛速度更快,尤其适用于大规模优化问题。
3. 牛顿法牛顿法是一种基于二阶导数信息的优化方法。
它通过构建并求解特定的二次逼近模型来求解无约束问题。
然而,牛顿法在高维问题中的计算复杂度较高,并且需要矩阵求逆运算,可能导致数值不稳定。
二. 线性规划问题求解方法1. 单纯形法单纯形法是一种经典的线性规划问题求解方法。
它通过在可行域内进行边界移动来寻找最优解。
然而,当问题规模较大时,单纯形法的计算复杂度会大幅增加,导致求解效率低下。
2. 内点法内点法是一种改进的线性规划问题求解方法。
与单纯形法不同,内点法通过将问题转化为一系列等价的非线性问题来求解。
内点法的优势在于其计算复杂度相对较低,尤其适用于大规模线性规划问题。
三. 非线性规划问题求解方法1. 信赖域算法信赖域算法是一种常用的非线性规划问题求解方法。
它通过构建局部模型,并通过逐步调整信赖域半径来寻找最优解。
信赖域算法既考虑了收敛速度,又保持了数值稳定性。
2. 遗传算法遗传算法是一种基于自然进化过程的优化算法。
它模拟遗传操作,并通过选择、交叉和变异等操作来搜索最优解。
遗传算法的优势在于其适用于复杂的非线性规划问题,但可能需要较长的计算时间。
Matlab求解⾮线性规划,fmincon函数的⽤法总结Matlab求解⾮线性规划,fmincon函数的⽤法总结1.简介在matlab中,fmincon函数可以求解带约束的⾮线性多变量函数(Constrained nonlinear multivariable function)的最⼩值,即可以⽤来求解⾮线性规划问题matlab中,⾮线性规划模型的写法如下min\ f(x) \\ s.t. \begin{equation} \left\{ \begin{array}{**lr**} A \cdot x \leq b \\ Aeq\cdot x =beq\\ c(x)\leq0 \\ ceq(x)=0 \\ lb \leq x \leq ub\end{array} \right. \end{equation} \\ ~\\ f(x)是标量函数,x,b,beq是向量,A,Aeq是矩阵 \\ c(x)和ceq(x)是向量函数2.基本语法[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x的返回值是决策向量x的取值,fval的返回值是⽬标函数f(x)的取值fun是⽤M⽂件定义的函数f(x),代表了(⾮)线性⽬标函数x0是x的初始值A,b,Aeq,beq定义了线性约束 ,如果没有线性约束,则A=[],b=[],Aeq=[],beq=[]lb和ub是变量x的下界和上界,如果下界和上界没有约束,则lb=[],ub=[],也可以写成lb的各分量都为 -inf,ub的各分量都为infnonlcon是⽤M⽂件定义的⾮线性向量函数约束options定义了优化参数,不填写表⽰使⽤Matlab默认的参数设置3.实例⽰例,求下列⾮线性规划:min\ f(x)=x_1^2+x_2^2+x_3^2+8\\ s.t. \begin{equation} \left\{ \begin{array}{**lr**} x_1^2-x_2+x_3^2\geq0\\ x_1+x_2^2+x_3^2\leq20\\ -x_1-x_2^2+2=0\\ x_2+2x_3^2=3\\ x_1,x_2,x_3\geq0 \end{array} \right. \end{equation}(1)编写M函数fun1.m 定义⽬标函数:function f=fun1(x);f=x(1).^2+x(2).^2+x(3).^2+8;(2)编写M函数fun2.m定义⾮线性约束条件:function [g,h]=fun2(x);g=[-x(1).^2+x(2)-x(3).^2x(1)+x(2).^2+x(3).^3-20];h=[-x(1)-x(2).^2+2x(2)+2*x(3).^2-3];(3)编写主程序函数[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')所得结果为:x_1=0.5522,x_2=1.2033,x_3=0.9478\\ 最⼩值y=10.651Processing math: 0%。
Matlab中的数学优化与非线性规划方法数学优化和非线性规划是数学领域中的重要分支,广泛应用于各个科学领域和工程实践中。
Matlab作为一种常用的数学建模和计算软件,对于解决优化和非线性规划问题具有强大的功能和丰富的工具包。
本文将介绍Matlab中的数学优化和非线性规划方法,探讨其原理和应用。
一、Matlab中的数学优化方法数学优化方法旨在寻找一个函数的最大值或最小值,常用的方法包括线性规划、整数规划和非线性规划等。
在Matlab中,优化问题可以通过建立目标函数和约束条件的数学模型来求解。
1.1 线性规划线性规划是一种求解带有线性约束条件的优化问题的有效方法。
在Matlab中,可以使用linprog函数来求解线性规划问题。
该函数采用单纯形法或者内点法等算法,在给定线性约束条件下,寻找目标函数的最小值。
例如,我们考虑一个简单的线性规划问题:最小化目标函数 f = 3x1 + 4x2约束条件为:-5 <= x1 <= 5-3 <= x2 <= 32x1 + 3x2 >= 6首先,我们需要将目标函数和约束条件表示为Matlab中的向量和矩阵形式。
然后,使用linprog函数求解最小值。
1.2 整数规划整数规划是一种求解带有整数变量的优化问题的方法。
在Matlab中,可以使用intlinprog函数来求解整数规划问题。
该函数使用分支定界法或者割平面法等算法,在给定整数约束条件下,寻找目标函数的最小值。
例如,我们考虑一个简单的整数规划问题:最小化目标函数 f = 3x1 + 4x2约束条件为:0 <= x1 <= 50 <= x2 <= 5x1 + x2 = 5在Matlab中,我们可以定义目标函数和约束条件,并使用intlinprog函数求解最小值。
1.3 非线性规划非线性规划是一类求解带有非线性约束条件的优化问题的方法。
在Matlab中,可以使用fmincon函数来求解非线性规划问题。
matlab数学建模100例Matlab是一种强大的数学建模工具,广泛应用于科学研究、工程设计和数据分析等领域。
在这篇文章中,我们将介绍100个使用Matlab进行数学建模的例子,帮助读者更好地理解和应用这个工具。
1. 线性回归模型:使用Matlab拟合一组数据点,得到最佳拟合直线。
2. 多项式拟合:使用Matlab拟合一组数据点,得到最佳拟合多项式。
3. 非线性回归模型:使用Matlab拟合一组数据点,得到最佳拟合曲线。
4. 插值模型:使用Matlab根据已知数据点,估计未知数据点的值。
5. 数值积分:使用Matlab计算函数的定积分。
6. 微分方程求解:使用Matlab求解常微分方程。
7. 矩阵运算:使用Matlab进行矩阵的加减乘除运算。
8. 线性规划:使用Matlab求解线性规划问题。
9. 非线性规划:使用Matlab求解非线性规划问题。
10. 整数规划:使用Matlab求解整数规划问题。
11. 图论问题:使用Matlab解决图论问题,如最短路径、最小生成树等。
12. 网络流问题:使用Matlab解决网络流问题,如最大流、最小费用流等。
13. 动态规划:使用Matlab解决动态规划问题。
14. 遗传算法:使用Matlab实现遗传算法,求解优化问题。
15. 神经网络:使用Matlab实现神经网络,进行模式识别和预测等任务。
16. 支持向量机:使用Matlab实现支持向量机,进行分类和回归等任务。
17. 聚类分析:使用Matlab进行聚类分析,将数据点分成不同的类别。
18. 主成分分析:使用Matlab进行主成分分析,降低数据的维度。
19. 时间序列分析:使用Matlab进行时间序列分析,预测未来的趋势。
20. 图像处理:使用Matlab对图像进行处理,如滤波、边缘检测等。
21. 信号处理:使用Matlab对信号进行处理,如滤波、频谱分析等。
22. 控制系统设计:使用Matlab设计控制系统,如PID控制器等。
遗传算法解决非线性规划问题的Matlab程序首先,让我们来了解一下什么是非线性规划问题。
非线性规划问题是指目标函数或约束条件中至少有一个是非线性函数的规划问题。
与线性规划问题不同,非线性规划问题的求解往往没有通用的解析方法,需要借助数值优化算法来找到最优解或近似最优解。
遗传算法是一种基于自然选择和遗传机制的随机搜索算法。
它模拟了生物进化的过程,通过对种群中个体的选择、交叉和变异操作,逐步优化个体,从而找到问题的最优解。
在解决非线性规划问题时,遗传算法将问题的解编码为染色体,通过适应度函数来评估染色体的优劣,然后通过遗传操作不断进化种群,直到找到满意的解。
接下来,我们开始介绍如何在 Matlab 中实现遗传算法来解决非线性规划问题。
首先,我们需要定义问题的目标函数和约束条件。
假设我们要解决的非线性规划问题是:\\begin{align}&\min f(x) = x_1^2 + x_2^2 2x_1x_2 + 2x_1 4x_2 + 5\\&\text{st } x_1 + x_2 \leq 5\\&-2 \leq x_1 \leq 2\\&-3 \leq x_2 \leq 3\end{align}\在 Matlab 中,我们可以定义目标函数如下:```matlabfunction f = objective(x)f = x(1)^2 + x(2)^2 2x(1)x(2) + 2x(1) 4x(2) + 5; end```约束条件可以通过定义一个函数来判断:```matlabfunction c, ceq = constraints(x)c =;ceq =;if x(1) + x(2) > 5c = x(1) + x(2) 5;endend```然后,我们需要设置遗传算法的参数。
这些参数包括种群大小、最大迭代次数、交叉概率、变异概率等。
```matlabpopSize = 50; %种群大小maxGen = 100; %最大迭代次数pc = 08; %交叉概率pm = 01; %变异概率```接下来,我们需要对个体进行编码。
MATLAB求解非线性规划非线性规划是一类涉及非线性目标函数或非线性约束条件的数学规划问题。
MATLAB是一种强大的数学计算软件,可以用来求解非线性规划问题。
本文将介绍MATLAB中求解非线性规划问题的方法。
1. 目标函数和约束条件在MATLAB中,非线性规划问题可以表示为以下形式:minimize f(x)subject to c(x)≤0ceq(x)=0lb≤x≤ub其中f(x)是目标函数,c(x)和ceq(x)是不等式和等式约束条件,lb和ub是变量的下限和上限。
2. 求解器MATLAB提供了多种求解器可以用来求解非线性规划问题。
其中常用的有fmincon和lsqnonlin。
lsqnonlin可以用来求解非线性最小二乘问题。
它使用的是Levenberg-Marquardt算法,能够有效地求解非线性最小二乘问题,并且具有较好的收敛性。
3. 示例下面我们来看一个求解非线性规划问题的示例。
假设我们要求解以下非线性规划问题:首先,我们需要定义目标函数和约束条件。
在MATLAB中,我们可以使用anonymous function来定义目标函数和约束条件。
代码如下:f = @(x)x(1)^2+2*x(2)^2+3*x(3)^2;c = @(x)[x(1)+x(2)+x(3)-4, x(1)*x(2)+x(1)*x(3)+x(2)*x(3)-3];ceq = [];lb = [0,0,0];接下来,我们使用fmincon求解非线性规划问题。
代码如下:[x,fval,exitflag,output] = fmincon(f,[1,1,1],[],[],[],[],lb,[],@(x)c(x));其中,第一个参数是目标函数,第二个参数是变量的初值,第三个参数是不等式约束条件,第四个参数是等式约束条件,第五个参数是变量的下限,第六个参数是变量的上限,第七个参数是非线性约束条件,最后一个参数是opts,可以设置其他求解参数。
4 1基于MATLAB 的非线性0-1规划的求解学 生:易棉生指导教师:宋来忠三峡大学理学院摘要:本文主要研究非线性0-1整数规划的解法。
首先,通过对传统求解方法的研究,提出从0-1整数规划的变量只取值0和1这个特点来求解,为利用好这个特点,构造了一种数据结构——组合树,还根据目标函数和约束条件所含的变量是否被包含在解中取值为1的变量集中,将0-1整数规划的解细分为目标特殊解和约束特殊解。
然后,把这个特点具体化为4条性质。
根据这些性质,设计出合理的算法,并用MATLAB 实现该算法。
实验表明,该算法是有效的。
Abstract: In this paper, the problem about solving nonlinear 0-1 integer programming is studied. Firstly the view that we can use the feature that the variables of 0-1 integer programming only have two values 0 and 1 is raised after discussing some traditional algorithms. To express the feature, a new tree structure, called combination tree in the paper is given and also object-satisfied solution and constrain-satisfied solution is defined, based on whether the variables with the value 1 in objective function and constrained condition belong to the variables with the value 1 in solution. Then it can be specified by 4 properties. According to these properties, a new algorithm is designed and implemented with MATLAB language. From the experiment, it is proved that the algorithm is effective.关键词:0-1规划 非线性 组合树 解的标记 MATLABkey words: 0-1 integer programming; nonlinear; combination tree; the mark of solution; MA TLAB前言本文研究的模型可是:111min ()..()0()0{0,1}f x Ax b A x b s t C x C x x ≤=⎧⎪≤=⎨⎪∈⎩,,,,(1)其中,()f x 都是非线性函数,A 、b 、1A 、1b 是矩阵,1()()C x C x 、非线性矩阵函数。
这个函数的基本形式为x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中fun为你要求最小值的函数,可以单写一个文件设置函数,如以上给的例子中。
1.如果fun中有N个变量,如x y z, 或者是X1, X2,X3, 什么的,自己排个顺序,在fun 中统一都是用x(1),x(2)....x(n) 表示的。
2. x0, 表示初始的猜测值,大小要与变量数目相同3. A b 为线性不等约束,A*x <= b, A应为n*n阶矩阵,学过线性代数应不难写出A和b4 Aeq beq为线性相等约束,Aeq*x = beq。
Aeq beq同上可求5 lb ub为变量的上下边界,正负无穷用 -Inf和Inf表示, lb ub应为N阶数组6 nonlcon 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq可按下面的例子设置function [c,ce] = nonlcon1(x)c = -x(1)+x(2)^2-4;ce = []; % no nonlinear equality constraints7,最后是options,可以用OPTIMSET函数设置,见上例具体可见OPTIMSET函数的帮助文件。
对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:options(1)-参数显示控制(默认值为0)。
等于1时显示一些结果。
options(2)-优化点x的精度控制(默认值为1e-4)。
options = optimset('TolX',1e-8) options(3)-优化函数F的精度控制(默认值为1e-4)。
options = optimset('TolFun',1e-10) options(4)-违反约束的结束标准(默认值为1e-6)。
§7 MATLAB 的应用7.1 MATLAB 在数值分析中的应用插值与拟合是来源于实际、又广泛应用于实际的两种重要方法。
随着计算机的不断发展及计算水平的不断提高,它们已在国民生产和科学研究等方面扮演着越来越重要的角色。
下面对插值中分段线性插值、拟合中的最为重要的最小二乘法拟合加以介绍。
7.1.1 分段线性插值所谓分段线性插值就是通过插值点用折线段连接起来逼近原曲线,这也是计算机绘制图形的基本原理。
实现分段线性插值不需编制函数程序,MA TLAB 自身提供了内部函数interp1其主要用法如下:interp1(x,y,xi) 一维插值◆ yi=interp1(x,y,xi)对一组点(x,y) 进行插值,计算插值点xi 的函数值。
x 为节点向量值,y 为对应的节点函数值。
如果y 为矩阵,则插值对y 的每一列进行,若y 的维数超出x 或 xi 的维数,则返回NaN 。
◆ yi=interp1(y,xi)此格式默认x=1:n ,n 为向量y 的元素个数值,或等于矩阵y 的size(y,1)。
◆ yi=interp1(x,y,xi,’method’)method 用来指定插值的算法。
默认为线性算法。
其值常用的可以是如下的字符串。
● nearest 线性最近项插值。
● linear 线性插值。
● spline 三次样条插值。
● cubic 三次插值。
所有的插值方法要求x 是单调的。
x 也可能并非连续等距的。
正弦曲线的插值示例:>> x=0:0.1:10;>> y=sin(x);>> xi=0:0.25:10;>> yi=interp1(x,y,xi);>> plot(x,y,’0’,xi,yi)则可以得到相应的插值曲线(读者可自己上机实验)。
Matlab 也能够完成二维插值的运算,相应的函数为interp2,使用方法与interpl 基本相同,只是输入和输出的参数为矩阵,对应于二维平面上的数据点,详细的用法见Matlab 联机帮助。
function [errmsg,Z,X,t,c,fail] =BNB18(fun,x0,xstat,xl,xu,A,B,Aeq,Beq,nonlcon,setts,options1,options2,ma xSQPit,varargin);%·ÇÏßÐÔÕûÊý¹æ»®Ä£ÐÍÇó½â·ÖÖ§¶¨½çµü´úËã·¨¡£ÔÚMATLAB5.3ÖÐʹÓã¬ÐèOptimizat ion toolbox 2.0Ö§³Ö?% Minimize F(x)%subject to: xlb <= x <=xub% A*x <= B% Aeq*x=Beq% C(x)<=0% Ceq(x)=0%% x(i)¿ÉΪÁ¬Ðø±äÁ¿£¬ÕûÊý£¬»ò¹Ì¶¨Öµ% ʹÓøñʽ%[errmsg,Z,X]=BNB18('fun',x0,xstat,xl,xu,A,B,Aeq,Beq,'nonlcon',setts)%fun£º MÎļþÃû£¬±íʾ×îС»¯Ä¿±êº¯Êýf=fun(x)%x0: ÁÐÏòÁ¿£¬±íʾ±äÁ¿³õÖµ%xstat£º ÁÐÏòÁ¿£¬xstat(i)=0±íʾx(i)ΪÁ¬Ðø±äÁ¿£¬1±íʾÕûÊý£¬2±íʾ¹Ì¶¨Öµ%xl£º ÁÐÏòÁ¿£¬±íʾ±äÁ¿Ï½ç%xu: ÁÐÏòÁ¿£¬±íʾ±äÁ¿ÉϽç%A: ¾ØÕó, ±íʾÏßÐÔ²»µÈÊ½Ô¼ÊøÏµÊý%B: ÁÐÏòÁ¿, ±íʾÏßÐÔ²»µÈÊ½Ô¼ÊøÉϽç%Aeq: ¾ØÕó, ±íʾÏßÐÔµÈÊ½Ô¼ÊøÏµÊý%Beg: ÁÐÏòÁ¿, ±íʾÏßÐÔ²»µÈÊ½Ô¼ÊøÓÒ¶ËÖµ%nonlcon:MÎļþÃû£¬±íʾ·ÇÏßÐÔÔ¼Êøº¯Êý[C,Ceq]=nonlin(x),ÆäÖÐC(x)Ϊ²»µÈÊ½Ô¼Êø,% Ceq(x)ΪµÈÊ½Ô¼Êø%setts: Ëã·¨ÉèÖÃ%errmsq: ·µ»Ø´íÎóÌáʾ%Z: ·µ»ØÄ¿±êº¯Êý×îСֵ%X: ·µ»Ø×îÓŽâ%%ÀýÌâ% max x1*x2*x3% -x1+2*x2+2*x3>=0% x1+2*x2+2*x3<=72% 10<=x2<=20% x1-x2=10% ÏÈд Mº¯Êýdiscfun.m% function f=discfun(x)% f=-x(1)*x(2)*x(3);%Çó½â% clear;x0=[25,15,10]';xstat=[1 1 1]';% xl=[20 10 -10]';xu=[30 20 20]';% A=[1 -2 -2;1 2 2];B=[0 72]';Aeq=[1 -1 0];Beq=10;% [err,Z,X]=BNB18('discfun',x0,xstat,xl,xu,A,B,Aeq,Beq);% XMAX=X',ZMAX=-Z%% BNB18 Finds the constrained minimum of a function of several possibly integer variables.% Usage: [errmsg,Z,X,t,c,fail] =%BNB18(fun,x0,xstatus,xlb,xub,A,B,Aeq,Beq,nonlcon,settings,options1,opti ons2,maxSQPiter,P1,P2,...)%% BNB solves problems of the form:% Minimize F(x) subject to: xlb <= x0 <=xub% A*x <= B Aeq*x=Beq% C(x)<=0 Ceq(x)=0% x(i) is continuous for xstatus(i)=0% x(i) integer for xstatus(i)= 1% x(i) fixed for xstatus(i)=2%% BNB uses:% Optimization Toolbox Version 2.0 (R11) 09-Oct-1998% From this toolbox fmincon.m is called. For more info type help fmincon. %% fun is the function to be minimized and should return a scalar.F(x)=feval(fun,x).% x0 is the starting point for x. x0 should be a column vector.% xstatus is a column vector describing the status of every variable x(i). % xlb and xub are column vectors with lower and upper bounds for x.% A and Aeq are matrices for the linear constrains.% B and Beq are column vectors for the linear constrains.% nonlcon is the function for the nonlinear constrains.% [C(x);Ceq(x)]=feval(nonlcon,x). Both C(x) and Ceq(x) should be column vectors.%% errmsg is a string containing an error message if BNB found an erro r in the input.% Z is the scalar result of the minimization, X the values of the accompanying variables.% t is the time elapsed while the algorithm BNB has run, c is the number of BNB cycles and% fail is the number of unsolved leaf sub-problems.%% settings is a row vector with settings for BNB:% settings(1) (standard 0) if 1: use phase 1 by relaxation. This sometimes makes the algorithm% faster, because phase 1 means the algorithm first checks if there is a feasible solution% for a sub-problem before trying to find a best solution. If there is no feasible solution BNB% will not try to find a best solution.% settings(2) (standard 0) if 1: if the sub-problem did not converge do not branch. If a sub-% problem did not converge this means BNB did not find a solution for it. Normally BNB will% branch the problem so it can try again to find a solution.% A sub-problem that is a leaf of the branch-and-bound-three can not be branched. If such% a problem does not converge it will be considered unfeasible and the parameter fail will be% raised by one.% settings(3) (standard 0) if 1: if 1 a sub-problem that did not converge but did return a feasible% point will be considered convergent. This might be useful if fmincon is having a hard time with% a certain problem but you do want some results.% options1 and options2 are options structures for phase 1 and phase 2.% For details about the options structure type help optimset.% maxSQPiter is a global variable used by fmincon (if modified as described in bnb18.m).% maxSQPiter is 1000 by default.% P1,P2,... are parameters to be passed to fun and nonlcon.% F(x)=feval(fun,x,P1,P2,...). [C(x);Ceq(x)]=feval(nonlcon,x,P1,P2,...). % Type edit BNB18 for more info.% E.C. Kuipers% e-mail E.C.Kuipers@cpedu.rug.nl% FI-Lab% Applied Physics% Rijksuniversiteit Groningen% To get rid of bugs and to stop fmincon from hanging make the following chances:%% In optim/private/nlconst.m ($Revision: 1.20 $ $Date: 1998/08/24 13:46:15 $):% Get EXITFLAG independent of verbosity.% After the lines: disp(' less than 2*options.TolFun but constraints are not satisfied.')% end% EXITFLAG = -1;% end% end% status=1;% add the line: if (strncmp(howqp, 'i',1) & mg > 0), EXITFLAG = -1; end; %% In optim/private/qpsub.m ($Revision: 1.21 $ $Date: 1998/09/01 21:37:56 $):% Stop qpsub from hanging.% After the line: % Andy Grace 7-9-90. Mary Ann Branch 9-30-96.% add the line: global maxSQPiter;% and changed the line: maxSQPiters = Inf;% to the line: if exist('maxSQPiter','var'), maxSQPiters = maxSQPiter; else maxSQPiters=inf; end;% I guess there was a reason to put maxSQPiters at infinity, but this works fine for me.global maxSQPiter;% STEP 0 CHECKING INPUTZ=[]; X=[]; t=0; c=0; fail=0;if nargin<2, errmsg='BNB needs at least 2 input arguments.'; return; end; if isempty(fun), errmsg='No fun found.'; return; end;if isempty(x0), errmsg='No x0 found.'; return;elseif size(x0,2)>1, errmsg='x0 must be a column vector.'; return; end; xstatus=zeros(size(x0));if nargin>2 & ~isempty(xstat)if all(size(xstat)<=size(x0))xstatus(1:size(xstat))=xstat;else errmsg='xstatus must be a column vector the same size as x0.'; return;end;if any(xstatus~=round(xstatus) | xstatus<0 | 2<xstatus)errmsg='xstatus must consist of the integers 0,1 en 2.'; return;end;end;xlb=zeros(size(x0));xlb(find(xstatus==0))=-inf;if nargin>3 & ~isempty(xl)if all(size(xl)<=size(x0))xlb(1:size(xl,1))=xl;else errmsg='xlb must be a column vector the same size as x0.'; return;end;end;if any(x0<xlb)errmsg='x0 must be in the range xlb <= x0.'; return;elseif any(xstatus==1 & (~isfinite(xlb) | xlb~=round(xlb)))errmsg='xlb(i) must be an integer if x(i) is an integer variabele.'; return;end;xlb(find(xstatus==2))=x0(find(xstatus==2));xub=ones(size(x0));xub(find(xstatus==0))=inf;if nargin>4 & ~isempty(xu)if all(size(xu)<=size(x0))xub(1:size(xu,1))=xu;else errmsg='xub must be a column vector the same size as x0.'; return;end;end;if any(x0>xub)errmsg='x0 must be in the range x0 <=xub.'; return;elseif any(xstatus==1 & (~isfinite(xub) | xub~=round(xub)))errmsg='xub(i) must be an integer if x(i) is an integer variabale.'; return;end;xub(find(xstatus==2))=x0(find(xstatus==2));if nargin>5if~isempty(A) & size(A,2)~=size(x0,1), errmsg='Matrix A not correct.'; return; end;else A=[]; end;if nargin>6if~isempty(B) & any(size(B)~=[size(A,1) 1]), errmsg='Column vector B not correct.'; return; end;else B=[]; end;if isempty(A) & ~isempty(B), errmsg='A and B should only be nonempty together.'; return; end;if isempty(B) & ~isempty(A), B=zeros(size(A,1),1); end;if nargin>7 & ~isempty(Aeq)if size(Aeq,2)~=size(x0,1), errmsg='Matrix Aeq not correct.'; return; end;else Aeq=[]; end;if nargin>8if ~isempty(Beq) & any(size(Beq)~=[size(Aeq,1) 1]), errmsg='Column vector Beq not correct.'; return; end;else Beq=[]; end;if isempty(Aeq) & ~isempty(Beq), errmsg='Aeq and Beq should only be nonempty together'; return; end;if isempty(Beq) & ~isempty(Aeq), Beq=zeros(size(Aeq,1),1); end;if nargin<10, nonlcon=''; end;settings = [0 0 0];if nargin>10 & ~isempty(setts)if all(size(setts)<=size(settings))settings(setts~=0)=setts(setts~=0);else errmsg='settings should be a row vector of length 3.'; return; end; end;if nargin<12, options1=[]; end;options1=optimset(optimset('fmincon'),options1);if nargin<13, options2=[]; end;options2=optimset(optimset('fmincon'),options2);if nargin<14, maxSQPiter=1000;elseif isnumeric(maxSQPit) & all(size(maxSQPit))==1 & maxSQPit>0 &round(maxSQPit)==maxSQPitmaxSQPiter=maxSQPit;else errmsg='maxSQPiter must be an integer >0'; return; end;eval(['z=',fun,'(x0,varargin{:});'],'errmsg=''fun caused error.''; return;');if ~isempty(nonlcon)eval(['[C, Ceq]=',nonlcon,'(x0,varargin{:});'],'errmsg=''nonlcon caused error.''; return;');if size(C,2)>1 | size(Ceq,2)>1, errmsg='C en Ceq must be column vectors.'; return; end;end;% STEP 1 INITIALISATIONcurrentwarningstate=warning;warning off;tic;lx = size(x0,1);z_incumbent=inf;x_incumbent=inf*ones(size(x0));I =ceil(sum(log2(xub(find(xstatus==1))-xlb(find(xstatus==1))+1))+size(find (xstatus==1),1)+1);stackx0=zeros(lx,I);stackx0(:,1)=x0;stackxlb=zeros(lx,I);stackxlb(:,1)=xlb;stackxub=zeros(lx,I);stackxub(:,1)=xub;stacksize=1;xchoice=zeros(size(x0));if ~isempty(Aeq)j=0;for i=1:size(Aeq,1)if Beq(i)==1 & all(Aeq(i,:)==0 | Aeq(i,:)==1)J=find(Aeq(i,:)==1);if all(xstatus(J)~=0 & xchoice(J)==0 & xlb(J)==0 & xub(J)==1) if all(xstatus(J)~=2) | all(x0(J(find(xstatus(J)==2)))==0)j=j+1;xchoice(J)=j;if sum(x0(J))==0, errmsg='x0 not correct.'; return; end;end;end;end;end;end;errx=optimget(options2,'TolX');errcon=optimget(options2,'TolCon');fail=0;c=0;% STEP 2 TERMINIATIONwhile stacksize>0c=c+1;% STEP 3 LOADING OF CSPx0=stackx0(:,stacksize);xlb=stackxlb(:,stacksize);xub=stackxub(:,stacksize);x0(find(x0<xlb))=xlb(find(x0<xlb));x0(find(x0>xub))=xub(find(x0>xub));stacksize=stacksize-1;% STEP 4 RELAXATION% PHASE 1con=BNBCON(x0,A,B,Aeq,Beq,xlb,xub,nonlcon,varargin{:});if abs(con)>errcon & settings(1)~=0[x1 dummyfeasflag]=fmincon('0',x0,A,B,Aeq,Beq,xlb,xub,nonlcon,options1,varargin{ :});if settings(3) & feasflag==0con=BNBCON(x1,A,B,Aeq,Beq,xlb,xub,nonlcon,varargin{:});if con<errcon, feasflag=1; end;end;else x1=x0; feasflag=1; end;% PHASE 2if feasflag>0[x zconvflag]=fmincon(fun,x1,A,B,Aeq,Beq,xlb,xub,nonlcon,options2,varargin{ :});if settings(3) & convflag==0con=BNBCON(x,A,B,Aeq,Beq,xlb,xub,nonlcon,varargin{:});if con<errcon, convflag=1; end;end;else convflag=feasflag; end;% STEP 5 FATHOMINGK = find(xstatus==1 & xlb~=xub);separation=1;if convflag<0 | (convflag==0 & settings(2))% FC 1separation=0;elseif z>=z_incumbent & convflag>0% FC 2separation=0;elseif all(abs(round(x(K))-x(K))<errx) & convflag>0% FC 3z_incumbent = z;x_incumbent = x;separation = 0;end;% STEP 6 SELECTIONif separation == 1 & ~isempty(K)dzsep=-1;for i=1:size(K,1)dxsepc = abs(round(x(K(i)))-x(K(i)));if dxsepc>=errx | convflag==0xsepc = x; xsepc(K(i))=round(x(K(i)));dzsepc = abs(feval(fun,xsepc,varargin{:})-z);if dzsepc>dzsepdzsep=dzsepc;ixsep=K(i);end;end;end;% STEP 7 SEPARATIONif xchoice(ixsep)==0% XCHOICE==0branch=1;domain=[xlb(ixsep) xub(ixsep)];while branch==1xboundary=(domain(1)+domain(2))/2;if x(ixsep)<xboundarydomainA=[domain(1) floor(xboundary)];domainB=[floor(xboundary+1) domain(2)];elsedomainA=[floor(xboundary+1) domain(2)];domainB=[domain(1) floor(xboundary)];end;stacksize=stacksize+1;stackx0(:,stacksize)=x;stackxlb(:,stacksize)=xlb;stackxlb(ixsep,stacksize)=domainB(1);stackxub(:,stacksize)=xub;stackxub(ixsep,stacksize)=domainB(2);if domainA(1)==domainA(2)stacksize=stacksize+1;stackx0(:,stacksize)=x;stackxlb(:,stacksize)=xlb;stackxlb(ixsep,stacksize)=domainA(1);stackxub(:,stacksize)=xub;stackxub(ixsep,stacksize)=domainA(2);branch=0;elsedomain=domainA;branch=1;end;end;else% XCHOICE~=0L=find(xchoice==xchoice(ixsep));M=intersect(K,L);[dummy,N]=sort(x(M));part1=M(N(1:floor(size(N)/2)));part2=M(N(floor(size(N)/2)+1:size(N)));stacksize=stacksize+1;stackx0(:,stacksize)=x;O = (1-sum(stackx0(part1,stacksize)))/size(part1,1);stackx0(part1,stacksize)=stackx0(part1,stacksize)+O;stackxlb(:,stacksize)=xlb;stackxub(:,stacksize)=xub;stackxub(part2,stacksize)=0;stacksize=stacksize+1;stackx0(:,stacksize)=x;O = (1-sum(stackx0(part2,stacksize)))/size(part2,1);stackx0(part2,stacksize)=stackx0(part2,stacksize)+O;stackxlb(:,stacksize)=xlb;stackxub(:,stacksize)=xub;stackxub(part1,stacksize)=0;if size(part2,1)==1, stackxlb(part2,stacksize)=1; end;end;elseif separation==1 & isempty(K)fail=fail+1;end;end;% STEP 8 OUTPUTt=toc;Z = z_incumbent;X = x_incumbent;errmsg='';eval(['warning ',currentwarningstate]);function CON=BNBCON(x,A,B,Aeq,Beq,xlb,xub,nonlcon,varargin); if isempty(A), CON1=[]; else CON1 = max(A*x-B,0); end;if isempty(Aeq), CON2=[]; else CON2 = abs(Aeq*x-Beq); end; CON3 = max(xlb-x,0);CON4 = max(x-xub,0);if isempty(nonlcon)CON5=[]; CON6=[];else[C Ceq]=feval(nonlcon,x,varargin{:});CON5 = max(C,0);CON6 = abs(Ceq);end;CON = max([CON1; CON2; CON3; CON4; CON5; CON6]);。
MATLAB⾮线性规划问题⼀.⾮线性规划课题实例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≤5000x 1≥0,x2≥0⽬标函数中的λ≥0是权重系数。
由以上实例去掉实际背景,其⽬标函数与约束条件⾄少有⼀处是⾮线性的,称其为⾮线性问题。
⾮线性规划问题可分为⽆约束问题和有约束问题。
实例1为⽆约束问题,实例2为有约束问题。
⼆.⽆约束⾮线性规划问题:求解⽆约束最优化问题的⽅法主要有两类:直接搜索法(Search method)和梯度法(Gradient method),单变量⽤fminbnd,fminsearch,fminunc;多变量⽤fminsearch,fminnuc 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为给定的搜索的初始点。
非线性规划及matlab 应用目录1.概念 ............................................................................................................................................... 1 2.二次规划........................................................................................................................................ 1 3.一般非线性规划 ............................................................................................................................ 2 4. 案例:供应与选址 . (4)1.概念定义:如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题.其它情况: 求目标函数的最大值或约束条件为小于等于零的情况,都可通过取其相反数化为上述一般形式.2.二次规划用MATLAB 软件求解,其输入格式如下: 1. x=quadprog(H,C,A,b); 2. x=quadprog(H,C,A,b,Aeq,beq); 3. x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB); 4. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0); 5. x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0,options); 6. [x,fval]=quadprog(...); 7. [x,fval,exitflag]=quaprog(...); 实例1:2212121122121212min (,)2622..2220,0=--+-++≤-+≤≥≥f x x x x x x x x s tx x x x x x写成标准形式标准型为: Min Z= 21X T HX+c T Xs.t. AX<=b beq X Aeq =⋅ VLB ≤X ≤VUB111222 1 -12min (,) 1 26Tx x z x x x x ⎛⎫⎛⎫⎛⎫⎛⎫-=+ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪--⎝⎭⎝⎭⎝⎭⎝⎭1212 1 121 2200x x x x ⎛⎫⎛⎫⎛⎫≤ ⎪ ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭⎛⎫⎛⎫≤ ⎪ ⎪ ⎪⎝⎭⎝⎭Matlab 命令H=[1 -1; -1 2]; c=[-2 ;-6]; A=[1 1; -1 2]; b=[2;2]; Aeq=[]; beq=[]; VLB=[0;0]; VUB=[];[x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)运算结果为:x =0.6667 1.3333 z = -8.22223.一般非线性规划标准型为:min ()..()0()0≤≤=≤≤F X s t AX bG X Ceq X VLB X VUB其中X 为n 维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.非线性规划求解的函数是fmincon,命令的基本格式如下: ● x=fmincon(‘fun’,X0,A,b)● x=fmincon(‘fun’,X0,A,b,Aeq,beq)● x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)● x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)● x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options) ● [x,fval]= fmincon(...)● [x,fval,exitflag]= fmincon(...)● [x,fval,exitflag,output]= fmincon(...) 1.fun 为目标函数2.x0为初始值3.A 是不等式约束AX<=b 的系数矩阵4.b 是不等式约束AX<=b 的常数项4.Aeq 是等式约束AeqX=beq 的系数矩阵,5.beq 是等式约束AeqX=beq 的常数项,6.lb 是X 的下限,7.ub 是X 的上限,8.nonlcon 为非线性不等式约束 9.option 为设置fmincon 的参数 注意:fmincon 函数提供了大型优化算法和中型优化算法。
默认时,若在fun 函数中提供了梯度(options 参数的GradObj 设置为’on ’),并且只有上下界存在或只有等式约束,fmincon 函数将选择大型算法。
当既有等式约束又有梯度约束时,使用中型算法。
fmincon 函数的中型算法使用的是序列二次规划法。
在每一步迭代中求解二次规划子问题,并用BFGS 法更新拉格朗日Hessian 矩阵。
fmincon 函数可能会给出局部最优解,这与初值X0的选取有关。
实例222121211min 222f x x x x =--++s.t. 12122360450x x x x ⎛⎫+-⎛⎫≤⎪ ⎪ ⎪+-⎝⎭⎝⎭1200x x ⎛⎫⎛⎫≤ ⎪ ⎪ ⎪⎝⎭⎝⎭先建立M -文件 ex2.m: function f=ex2(x);f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2 再建立主程序main2.m : x0=[1;1];A=[2 3 ;1 4]; b=[6;5]; Aeq=[];beq=[]; VLB=[0;0]; VUB=[];[x,fval]=fmincon('ex2',x0,A,b,Aeq,beq,VLB,VUB)运算结果为: x = 0.7647 1.0588 fval = -2.0294实例312212122()(42421)x f x e x x x x x =++++s.t.12121212x x01.5x x x x0 x x100+=+--≤--≤先建立M文件ex3.m,定义目标函数:function f=ex3(x);f=exp(x(1)) *(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);再建立M文件ex31.m定义非线性约束:function [g,ceq]=ex31(x)g=[x(1)+x(2);1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];主程序main3.m为:x0=[-1;1];A=[];b=[];Aeq=[1 1];beq=[0];vlb=[];vub=[];[x,fval]=fmincon('ex3',x0,A,b,Aeq,beq,vlb,vub,'ex31')运算结果为:x = -1.2250 1.2250 fval = 1.8951实例4function f=ex4(x)f=x(1)^2+x(2)^2+10;function [g,h]=ex40(x)g=-x(1)^2+x(2);h=-x(1)-x(2)^2+5; %约束等式options=optimset;[x,y]=fmincon('ex4',rand(2,1),[],[],[],[],zeros(2,1),[],'ex40',options)输出结果:x = 1.3794 1.9028 y = 15.52344. 案例:供应与选址某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:千米)及水泥日用量d(吨)由下表给出。
目前有两个临时料场位于A(5,1),B(2,7),日储量各有20吨。
假设从料场到工地之间均有直线道路相连。
(1)试制定每天的供应计划,即从A ,B 两料场分别向各工地运送多少吨水泥,使总的吨千米数最小。
(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20吨,问应建在何处,节省的吨千米数有多大?情形1:模型构建记工地的位置为(a i ,b i ),水泥日用量为d i ,i=1,…,6;料场位置为(x j ,y j ),日储量为e j ,j=1,2;从料场j 向工地i 的运送量为X ij 。
当用临时料场时决策变量为:x ij ,当不用临时料场时决策变量为:x ij ,x j ,y j 。
情形2:使用临时料场的情形使用两个临时料场A(5,1),B(2,7).求从料场j 向工地i 的运送量为X ij ,在各工地用量必须满足和各料场运送量不超过日储量的条件下,使总的吨千米数最小,这是线性规划问题. 线性规划模型为:设X 11=X 1, X 21= X 2,, X 31= X 3, X 41= X 4, X 51= X 5,, X 61= X 6,X 12= X 7, X 22= X 8,, X 32= X 9, X 42= X 10, X 52= X 11,, X 62= X 12Matlab 程序 cleara=[1.25 8.75 0.5 5.75 3 7.25]; b=[1.25 0.75 4.75 5 6.5 7.75]; d=[3 5 4 7 6 11]; x=[5 2];目标函数为:∑∑==-+-=216122)()(min j i i j i j ij b y a x X f 约束条件为:2,1 ,6,,2,1 ,6121=≤==∑∑==j e X i d X j i ij i j ij Λ ∑∑===2161),(min j i ij X j i aa f 2,1 , 6,,2,1 , s.t.6121=≤==∑∑==j e X i d X j i ij i j ij Λ 其中 22)()(),(i j i j b y a x j i aa -+-=,i=1,2,…,6,j=1,2,为常数。
y=[1 7]; e=[20 20]; for i=1:6 for j=1:2aa(i,j)=sqrt((x(j)-a(i))^2+(y(j)-b(i))^2); end endCC=[aa(:,1); aa(:,2)]'; A=[1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1]; B=[20;20];Aeq=[1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 ];beq=[d(1);d(2);d(3);d(4);d(5);d(6)]; VLB=[0 0 0 0 0 0 0 0 0 0 0 0];VUB=[]; x0=[1 2 3 0 1 0 0 1 0 1 0 1];[xx,fval]=linprog(CC,A,B,Aeq,beq,VLB,VUB,x0)计算结果为:x =[ 3.0000 5.0000 0.0000 7.0000 0.0000 1.00000.0000 0.0000 4.0000 0.0000 6.0000 10.0000]’ fval = 136.2275情形3:改建两个新料场的情形改建两个新料场,要同时确定料场的位置(x j ,y j )和运送量X ij ,在同样条件下使总吨千米数最小。