您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > MATLAB优化工具箱的使用
MATLAB优化工具箱的使用MATLAB优化问题的函数•1、线性规划函数•Linprog用于解决线性规划问题(优化问题中目标函数和约束函数均为设计变量的线性函数)•线性规划问题可描述为:•f,b,beq,lb,ub为向量,A和Aeq为矩阵,x为一设计向量的变量,上标T表示转置,矩阵A和向量b是线性不等式约束条件的系数,Aeq和beq是等式约束的条件的系数。•其使用格式如下:•[xopt,fopt]=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)•该函数返回一设计向量变量xopt=[x1,x2,……]和标量•f(x),x0为x的起点,options为optimset函数中定一的参•数的值。如果没有等式约束条件,则令Aeq=[],beq=[]。•应用举例:•编程实现如下:•f=[-4,-5];•A=[1,1;1.25,0.75;0,1];•b=[200,200,150];•lb=[00];•x=linprog(f,A,b,[],[],lb,[])2、非线性规划函数一、无约束优化无约束非线性规划(nonlinearprogramming)方法是确定下列函数这里,x为设计变量,f为一标量目标函数。解决上述问题可有两个函数实现fminunc函数和fminsearch函数。其中,fminunc函数基于梯度搜索法实现,而fminsearch函数基于直接搜索法实现。调用fminunc的命令如下:[xopt,fopt]=fminunc(@UserFunction,x0,options,p1,p2,…)min()ximizex•其中,UserFunction是求解目标函数f的函数文件名,参数x0表示x的起始值,是向量,options为optimset定义的参数赋值。P1,p2等为传递给UserFunction的参数。•调用fminsearch的命令如下:•X=fminsearch(@UserFunction,x0,options,p1,p2,…)•其中,各参数的定义与fminunc一致。应用举例:一、fminunc•首先我们用图解法来解,结果如下:2221,2222min(1,2)0.51(1(12)1)0.52(1(22)2)1122xximizePExxkxLxLkxLxLFxFx•程序如下:•k1=8.8;k2=1.1;L1=11;L2=11;F1=4.5;F2=4.5;•[x1,x2]=meshgrid(linspace(-5,15,15),linspace(-5,15,15));•PE1=1/2*k1*(sqrt(x1.^2+(L1-x2).^2)-L1).^2;•PE2=1/2*k2*(sqrt(x1.^2+(L2+x2).^2)-L2).^2;•PE=PE1+PE2-F1*x1-F2*x2;•subplot(1,2,1);•h=contour(x1,x2,PE,[-40:10:20,50:100:500],'k');•clabel(h);•axis([-5,15,-5,15]);•xlabel('x_1');•ylabel('x_2');•subplot(1,2,2);•surfc(x1,x2,PE);•axis([-10,15,-10,15,-100,500]);•zlabel('PE');•xlabel('x_1');•ylabel('x_2');•meshgrid的使用方法:•[X,Y]=meshgrid(x,y)将向量x和y定义的区域转换成矩阵X和Y,这两个矩阵可以用来表示mesh和surf的三维空间点以及两个变量的赋值。其中矩阵X的行向量是向量x的简单复制,而矩阵Y的列向量是向量y的简单复制。•[x1,x2]=meshgrid(linspace(-5,15,2),linspace(-5,15,2))•x1=•-515•-515•x2=•-5-5•1515•x=linspace(1,3,5),既x=[11.522.53]•subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。•contour(X,Y,g,[e,e],'r');•画等高线,r为红色极大值极小值左图为PE的等高线图,图上标出了每条等高线的数值,从图中可以清楚的找到极小值、极大值的分布。右图中上面是三维图,下面是等高线图,图中也彪出了极小值、极大值所在点的近似位置,在该点PE目标函数取得极小值、极大值。•用fminunc解此题:•程序如下:•functionTwospring•x0=[0.5,5];•k1=8.8;k2=1.1;L1=11;L2=11;F1=4.5;F2=4.5;•options=optimset('largeScale','off');•[x,f]=fminunc(@SpringEquilibrium,x0,options,k1,k2,L1,L2,F1,F2)•functionPE=SpringEquilibrium(x,k1,k2,L1,L2,F1,F2);•PE1=1/2*k1*(sqrt(x(1).^2+(L1-x(2)).^2)-L1).^2;•PE2=1/2*k2*(sqrt(x(1).^2+(L2+x(2)).^2)-L2).^2;•PE=PE1+PE2-F1*x(1)-F2*x(2)使用中规模优化算法调用的函数主函数以上程序用于求解最小值•求最大值程序如下:•functionTwospring•x0=[0.5,5];•k1=8.8;k2=1.1;L1=11;L2=11;F1=4.5;F2=4.5;•options=optimset('largeScale','off');•[x,f]=fminunc(@SpringEquilibriumMax,x0,options,k1,k2,L1,L2,F1,F2)•functionPE=SpringEquilibriumMax(x,k1,k2,L1,L2,F1,F2);•PE1=1/2*k1*(sqrt(x(1).^2+(L1-x(2)).^2)-L1).^2;•PE2=1/2*k2*(sqrt(x(1).^2+(L2+x(2)).^2)-L2).^2;•PE=-(PE1+PE2-F1*x(1)-F2*x(2))要获得PE函数的极大值,可通过求(1/PE)或(-PE)函数的最优解调用的函数主函数以上函数用于求解最大值•二、fminsearch2222min(1,2)(1)/81(3)sin(2)26136230(1,2)1imizefxxCCABABAxBxxx•程序如下:•[x1,x2]=meshgrid(linspace(0,1,50),linspace(0,1,50));•A=6*x1-3;B=6*x2-3;•C=(A.^2+B.^2+3)./2+sin(A.^2+B.^2+2);•bottle=(C+1)/8;•colormap([111]);•surf(x1,x2,bottle);•zlabel('f');•xlabel('x_1');•ylabel('x_2');•view(-10,45)•以上是图解法以下是用fminsearch解题:•x0=[0.2,0.8];•bottle=inline('-(((6*x(1)-3)^2+(6*x(2)-3)^2+3)/2+sinc((6*x(1)-3)^2+(6*x(2)-3)^2+2)+1)/8','x');•options=optimset('Large','off');•[x,f]=fminsearch(bottle,x0,options)•二、曲线拟合•Lsqcurvefit函数用于曲线拟合,其调用格式如下:•[xopt,resnorm]=lsqcurvefit(@UserFunction,x0,xdata,ydata,lb,ub,options,p1,p2,…)•其中,xopt为x的最优解,resnorm是残差,其欧几里得范数如下:•UserFunction为求解目标函数的文件名,也可以用inline创建需要多个输入参数的函数,只须在inline语句中定义表达式的同时列出输入参数的名称。参数x0为起始值,xdata和ydata分别为输入/输出向量,options为由optimset定义的参数赋值。参数lb和ub为向量,分别表示x的下界和上界。如不需要lb和ub参数,其后跟空矩阵符号[]。Options参数后跟空矩阵符号[]时,表示用其默认值。p1,p2等为传递给UserFunction的参数。2(())datadatafxy•应用实例:•这是应力-应变数据表•sigma=[925,1125,1625,2125,2625,3125,3625];•epsilon=[0.11,0.16,0.35,0.48,0.61,0.71,0.85];•x0=[0.1,0.1];•SigmaEpsilonFit=inline('x(1)+x(2)*log(sigma)','x','sigma');•[x,resnorm]=lsqcurvefit(SigmaEpsilonFit,x0,sigma,epsilon)lnab另一个曲线拟合函数,lsqnonlin函数,其拟合方式为最小二乘法。其调用方式为:UserFunction为求解目标函数的文件名,也可以用inline创建需要多个输入参数的函数,只须在inline语句中定义表达式的同时列出输入参数的名称。参数x0为起始值,xdata和ydata分别为输入/输出向量,options为由optimset定义的参数赋值。参数lb和ub为向量,分别表示x的下界和上界。如不需要lb和ub参数,其后跟空矩阵符号[]。Options参数后跟空矩阵符号[]时,表示用其默认值。p1,p2等为传递给UserFunction的参数。2min[()]ixiimizefx[,](@,0,,,,1,2,...)xoptresnormlsqnonlinUserFunctionxlbuboptionspp•最小二乘法公式:•拟合程序如下:•sigma=[925,1125,1625,2125,2625,3125,3625];•epsilon=[0.11,0.16,0.35,0.48,0.61,0.71,0.85];•x0=[0.1,0.1];•SigmaEpsilonLeastSq=inline('epsilon-(x(1)+x(2)*log(sigma))','x','sigma','epsilon');•[x,resnorm]=lsqnonlin(SigmaEpsilonLeastSq,x0,[],[],[],sigma,epsilon)72,1min[(ln)]iiabimizeab•3、单目标约束优化•单变量优化•优化函数为fminbnd,其调用格式为:p1,p2等为传递给UserFunction的参数。min()..:12ximizefxstxxx[,]min(@,1,2,,1,2,...)xoptfxoptfbndUserFunctionxxoptionspp•应用举例:•程序如下:•L=90;•Volume=inline('-(L-3*x)^2*x','x','L');•[x,V]=fminbnd(Volume,8,12,[],L)•多变量约束优化22max()(903)..:812imizeVxxyxxstx•多变量约束优化函数fmincon,其调用格式如下:min()..:(A(CC()0(lbxubxeqeqeqimizefxstAxbxbx线性不等式约束)线性等式约束)(x)0(非线性不等式约束)非线性等式约束),...[,]min(@,0,,,,,,
本文标题:MATLAB优化工具箱的使用
链接地址:https://www.777doc.com/doc-7214894 .html