您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 数学建模Matlab优化工具箱
MATLAB的优化工具箱1.非线性方程(组)求解命令:fzero、fsolve2.求函数极值(无约束问题)命令:fmin、fmins、fminu3.求解线性规划问题命令:lp4.求解非线性规划问题命令:constrfzero命令用于求一元函数f(x)的零点.使用格式1:fzero(‘f’,x0)x0为零点猜测值例:fzero(‘sin’,3),计算结果ans=3.1416例:求函数零点604.0)9.0(101.0)3.0(1)(22xxxffunctiony=f2(x)y=1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6;在MATLAB命令窗口中输入命令:fplot('f2',[-1,2])grid观察图形窗口中图形可知,函数有两个零点,第一个零点在-0.5到0之间,第二个在1到1.5之间.用求函数零点命令时必须给出零点猜测值.输入命令:x1=fzero('f2',.5),x2=fzero('f2',1)得计算结果:x1=-0.1316,x2=1.2995-1-0.500.511.52-20020406080100holdonplot(x1,f2(x1),'or',x2,f2(x2),'or')用绘图命令描零点位置:使用格式2:fzero(‘f’,[x0x1])[x0x1]为隔根区间例fzero('sin',[2,3])MATLAB将显示出错信息:错误使用fzero,函数值在区间端点处必须异号.fzero('sin',[2,4])得正确计算结果:ans=3.1416例fzero('f2',[1,1.5])得计算结果:ans=1.2995函数文件f2定义了函数:604.0)9.0(101.0)3.0(1)(22xxxffsolve命令用于求解非线性方程组f(x)=0,这里,f和x都是向量或矩阵使用格式:fsolve(‘f’,x0)x0为解的猜测值05012307lnsin32zyxzyxzyx例求解方程组functionq=xyz(p)x=p(1);y=p(2);z=p(3);q(1)=sin(x)+y.^2+log(z)-7;q(2)=3*x+2^y-z^3+1;q(3)=x+y+z-5;x0=[111];fsolve('xyz',x0)计算结果:ans=0.5991,2.3959,2.0050一个完整的命令格式可得更多信息x0=[111];%给出初始值(猜测值)options=[];%置参数向量为默认值[x,options]=fsolve('xyz',x0,options);计算结果:x=0.59912.39592.0050向量options共存放了18个参数.常用的有:options(8)——计算结束时的目标函数值;options(10)—计算结束时目标函数计算总次数上例中键入options(8)得ans=6.1429e-018键入options(10)得ans=34fmin命令用于求一元函数极小点使用格式:fmin(‘f’,x1,x2)例如:fmin(‘cos’,3,4)将得到ans=3.1416这是介于3和4之间的函数cosx的最小值点例.求函数f(x)=2e-xsinx的极大和极小值点functiony=f3(x)y=2*exp(-x).*sin(x);fplot('f3',[0,8])gridfunctiony=f4(x)y=-2*exp(-x).*sin(x);用绘图命令绘图观察最大值点和最小值点所在位置012345678-0.100.10.20.30.40.50.60.7由图可知,函数有一最小值点介于3到4之间,有一最大值点介于0到1之间.用函数文件f3.m求最小值点;用f4.m求最大值点xmin=fmin(‘f3’,3,5)计算结果:xmin=3.9270xmax=fmin(‘f4’,0,1)计算结果:xmax=0.7854在原有函数图形上添加两个极值点:holdonplot(xmin,f3(xmin),'or‘,xmax,f3(xmax),'or')fmins命令用于求多元函数极小值点命令使用格式为:fmins(‘f’,x0)f是目标函数文件名,x0是极小值点的猜测值例.求函数的极小值222)1()(100xxyzx=-2:.125:2;y=-1:.25:3;[x,y]=meshgrid(x,y);z=100*(y-x.*x).^2+(1-x).^2;mesh(x,y,z)functionz=f5(p)x=p(1);y=p(2);z=100*(y-x.^2).^2+(1-x).^2;绘二元函数图形,观察极小值点-2-1012-10123050010001500200025003000输入命令:x0=[01];x=fmins('f5',x0)x0=[01];options=[];[x,options]=fmins('f5',x0);得计算结果:X=1.00001.0000输入完整命令:键入:options(8)得ans=2.4289e-010键入:options(10)得ans=1928maxz=7x1+12x2s.t.9x1+5x2≤3604x1+5x2≤2003x1+10x2≤300x1≥0,x2≥0lp命令用于求解线性规划问题MATLAB中线性规划问题的标准形式为:Minz=cTxs.t.Ax≤b命令使用格式:lp(c,A,b,e0,e1)c=[-7-12];A=[95;45;310];b=[360;200;300];e0=[00];e1=[];lp(c,A,b,e0,e1)ans=20.000024.0000constr命令用于求解非线性规划问题MinF(x)s.t.G(x)≤0简单使用格式:constr(‘f’,x0)例.1005.1..]12424[),(min2121212221221211xxxxxxtsxxxxxexxfxfunf='f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);';fung='g=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];';fun=[funffung];x0=[-11];options=[];[x,options]=constr(fun,x0,options);非线性规划某公司经营两种设备,第一种设备每件售价30元,第二种设备每件售价450元.根据统计,售出一件第一种设备所需要的营业时间平均是0.5小时,第二种设备是(2+0.25x2)小时,其中x2是第二种设备的售出数量.已知该公司在这段时间内的总营业时间为800小时,试决定使其营业额最大的营业计划设经营第一种设备x1件,第二种设备x2件.根据题意,营业额为f=30x1+450x2由于营业时间的限制,该计划必须满足0.5x1+(2+0.25x2)x2≤800数学模型Maxf=30x1+450x2s.t.0.5x1+(2+0.25x2)x2≤800在MATLAB中定义函数:function[f,g]=fun(x)f=-30*x(1)-450*x(2);g=[0.5*x(1)+(2+0.5*x(2))*x(2)-800];使用命令求解:[xoptions]=constr('fun',[16003000]);x具有非负约束的例子0,01005.1..]12424[),(min212121212221221211xxxxxxxxtsxxxxxexxfxfunf='f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);';fung='g=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];';fun=[funffung];x0=[-11];options=[];vlb=zeros(1,2);vub=[][x,options]=constr(fun,x0,options,vlb,vub);x,options(8),options(10)等式约束例子1005.10..]12424[),(min212121212221221211xxxxxxxxtsxxxxxexxfxfunf='f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);';fung='g=[x(1)+x(2);1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];';fun=[funffung];x0=[-11];clearoptionsoptions(13)=1;[x,options]=constr(fun,x0,options);options(8)options(10)
本文标题:数学建模Matlab优化工具箱
链接地址:https://www.777doc.com/doc-268676 .html