机械优化设计MATLAB程序

合集下载

MATLB机械优化设计程序XXXX

MATLB机械优化设计程序XXXX

MATLB机械优化设计程序XXXX%例2-1梯度的运算syms x1 x2 %定义符号变量f=x1^2+x2^2-4*x1+4; %定义二维目标函数gradf=jacobian(f) %运算函数梯度Xzuobiao1=[3,2];Xzuobiao2=[2,0]; %定义Xzuobiao点坐标gfk1=subs(subs(gradf,Xzuobiao1(1)),Xzuobiao1(2)) %运算Xzuobiao1点的梯度值gmk1=norm(gfk1) %运算Xzuobiao1点的梯度模igk1=gfk1/gmk1 %运算Xzuobiao1点的梯度单位向量gfk2=subs(subs(gradf,Xzuobiao2(1)),Xzuobiao2(2)) %运算Xzuobiao1点的梯度值gmk2=norm(gfk2) %运算Xzuobiao1点的梯度模igk2=gfk2/gmk2 %运算Xzuobiao1点的梯度单位向量gradf =[ 2*x1-4, 2*x2]gfk1 =2 4gmk1 =4.4721igk1 =0.4472 0.8944 gfk2 =0 0gmk2 =Warning: Divide by zero. igk2 =NaN NaN例2-2把函数2242121212112()4 4.54222f X x x x x x x x x x =+-++-+-在点()[2.0,2.5]k T X =展开泰勒二次近似式[]111212222.0 2.0401011311(,),6 2.0, 2.52.5 2.5104222x x x x x x x x ---⎡⎤⎡⎤⎡⎤⎡⎤≈+-+--⎢⎥⎢⎥⎢⎥⎢⎥---⎣⎦⎣⎦⎣⎦⎣⎦ 221212123272/2420210x x x x x x ≈-+++-%例2-2 Taylor 展开syms x1 x2f=4+4.5*x1-4*x2+x1^2+2*x2^2-2*x1*x2+x1^4-2*x1^2*x2disp('函数f 的表达式:')pretty(simplify(f));%运算函数的一阶偏导数dx1=diff(f,x1);dx2=diff(f,x2);disp('函数f 的一阶偏导数表达式:')pretty(simplify(dx1));pretty(simplify(dx2));%运算函数的二阶偏导数dx1x1=diff(f,x1,2);dx1x2=diff(dx1,x2);dx2x1=diff(dx2,x1);dx2x2=diff(f,x2,2);%按照函数f 的二阶偏导数,构成Hessian 矩阵disp('函数f 的二阶偏导数表达式:')pretty(simplify(dx1));H=[dx1x1 dx1x2;dx2x1 dx2x2];pretty(simplify(H));%运算xk 点的值x1=2.0; x2=2.5;disp('函数在xk 点的函数值:')fk=subs(f)disp('函数在xk点的一节偏导数矩阵:')dk=subs([dx1 dx2])disp('函数xk点的海色矩阵:')HK=subs([dx1x1 dx1x2;dx2x1 dx2x2])disp('函数在xk点的二阶Taylor展开式:')syms x1 x2fkTL=fk+dk*[x1-2.0;x2-2.5]+0.5*[x1-2.0,x2-2.5]*HK*[x1-2.0;x2-2.5];pretty(simplify(fkTL));f =4+9/2*x1-4*x2+x1^2+2*x2^2-2*x1*x2+x1^4-2*x1^2*x2函数f的表达式:2 2 424 + 9/2 x1 - 4 x2 + x1 + 2 x2 - 2 x1 x2 + x1 - 2 x1 x2函数f的一阶偏导数表达式:39/2 + 2 x1 - 2 x2 + 4 x1 - 4 x1 x22-4 + 4 x2 - 2 x1 - 2 x1函数f的二阶偏导数表达式:39/2 + 2 x1 - 2 x2 + 4 x1 - 4 x1 x2[ 2 ][2 + 12 x1 - 4 x2 -2 - 4 x1][ ][ -2 - 4 x1 4 ]函数在xk点的函数值:fk =5.5000函数在xk点的一节偏导数矩阵:dk =15.5000 -6.0000函数xk点的海色矩阵:HK =40 -10-10 4函数在xk点的二阶Taylor展开式:2232 - 79/2 x1 + 4 x2 + 20 x1 - 10 x1 x2 + 2 x 2例2-3求函数22212323312()252263f X x x x x x x x x =++++-+的极值点和极值%例2-3 求函数的极值syms x1 x2 x3f=2*x1^2+5*x2^2+x3^2+2*x2*x3+2*x1*x3-6*x2+3;disp('函数f 的表达式:')pretty(simplify(f));latex(f);%运算函数的1阶偏导数dsx1=diff(f,x1);dsx2=diff(f,x2);dsx3=diff(f,x3);disp('函数f 的1阶偏导数:')pretty(simplify(dsx1));pretty(simplify(dsx2));pretty(simplify(dsx3));%运算函数的2阶偏导数dsx1x1=diff(f,x1,2);dsx1x2=diff(dsx1,x2);dsx1x3=diff(dsx1,x3);dsx2x1=diff(dsx2,x1);dsx2x2=diff(f,x2,2);dsx2x3=diff(dsx2,x3);dsx3x1=diff(dsx3,x1);dsx3x2=diff(dsx3,x2);dsx3x3=diff(f,x3,2);%按照函数f 的2阶偏导数,构成海色矩阵disp('函数f 的2阶偏导数矩阵')H=[dsx1x1 dsx1x2 dsx1x3;dsx2x1 dsx2x2 dsx2x3;dsx3x1 dsx3x2 dsx3 x3]%运算海色矩阵的正定性[D,p]=chol(subs(H));if p==0;disp('海色矩阵为正定,函数f有极小点:');end%运算极值存在的必要条件,求极值点坐标[x1,x2,x3]=solve(dsx1,dsx2,dsx3,'x1,x2,x3');disp('极值点坐标:')fprintf(1,'x1=%3.4f\n',subs(x1));fprintf(1,'x2=%3.4f\n',subs(x2));fprintf(1,'x3=%3.4f\n',subs(x3));disp('在极值点,函数f数值:')fmb=subs(f)M文件的运行结果如下函数f的表达式:2 2 22 x1 + 5 x2 + x3 + 2 x2 x3 + 2 x1 x3 - 6 x2 + 3函数f的1阶偏导数:4 x1 + 2 x310 x2 + 2 x3 - 62 x3 + 2 x2 + 2 x1函数f的2阶偏导数矩阵H =[ 4, 0, 2][ 0, 10, 2][ 2, 2, 2]海色矩阵为正定,函数f有极小点:极值点坐标:x1=1.0000x2=1.0000x3=-2.0000在极值点,函数f 数值:fmb = 0例2-5 已知二维约束咨询题2212min ()(3)f X x x =-+受约束为2112()40g X x x =+-≤22()0g X x =-≤*[2,0]T X =例2-5 MATLAB实现,用M文件判不函数的凸性:%例2-5判不函数的凸性syms x1 x2f=60-10*x1-4*x2+x1^2+x2^2-x1*x2;disp('函数f的表达式:')pretty(simplify(f));dsx1=diff(f,x1);dsx2=diff(f,x2);disp('函数f的1阶偏导数:')pretty(simplify(dsx1));pretty(simplify(dsx2));%运算函数的2阶偏导数dsx1x1=diff(f,x1,2);dsx1x2=diff(dsx1,x2);dsx2x1=diff(dsx2,x1);dsx2x2=diff(f,x2,2);%按照函数f的2阶偏导数,构成海色矩阵disp('函数f的2阶偏导数矩阵')H=[dsx1x1 dsx1x2;dsx2x1 dsx2x2]%运算函数矩阵的正定性[d,p]=chol(subs(H));if p==0;disp('海色矩阵为正定,函数f为凸函数');endM文件的运行结果如下函数f的表达式:2 260 - 10 x1 - 4 x2 + x1 + x2 - x1 x2函数f的1阶偏导数: -10 + 2 x1 - x2-4 + 2 x2 - x1函数f的2阶偏导数矩阵H =[ 2, -1][ -1, 2]海色矩阵为正定,函数f为凸函数%例2-6K-T条件syms x1 x2 v %定义目标函数和约束函数的符号变量%目标函数和约束函数f=(x1-3)^2+x2^2; %目标函数f的表达式g1=x1^2+x2-4;g2=-x2;g3=-x1;v=[x1,x2];%运算xk点的约束函数值x1=2;x2=0; %xk点的坐标值disp('xk点约束函数数值:')g=subs([g1 g2 g3])disp('按照g1=0和g2=0,判定g1和g2为起作用约束:')%运算xk的梯度%目标函数的梯度gradf=jacobian(f); %运算目标函数的梯度disp('目标函数的梯度')disp(gradf) %显示目标函数的梯度gradfk=subs(subs(gradf,x1),x2)%显示目标函数xk点的梯度值%约束函数g1gradg1=jacobian(g1);disp('约束函数g1的梯度:')disp(gradg1)gradg1k=subs(subs(gradg1,x1),x2)%约束函数g2gradg2=jacobian(g2,v)disp('约束函数g2的梯度:')disp(gradg2)gradg2k=subs(subs(gradg2,x1),x2)%按照kt条件建立线性方程组A=[gradg1k(1),gradg2k(1);gradg1k(2),gradg2k(2)]%建立k-T条件线性方程组的系数矩阵b=[-gradfk(1);-gradfk(2)] %建立K-T条件线性方程组的常数向量lamda=A\b; %解线性方程组,求拉格朗日乘子disp('拉格朗日乘子:')disp(lamda)if lamda>=0disp('xk点是约束极小点')elsedisp('xk点不是约束极小点')enddisp('目标函数最小值minf(xk)')minf=subs(f) %显示目标函数的最小值M文件的运行结果如下xk点约束函数数值:g = 0 0 -2按照g1=0和g2=0,判定g1和g2为起作用约束:目标函数的梯度[ 2*x1-6, 2*x2]gradfk = -2 0 约束函数g1的梯度[ 2*x1, 1]gradg1k = 4 1gradg2 =[ 0, -1] 约束函数g2的梯度[ 0, -1]gradg2k = 0 -1A = 4 01 -1b = 2拉格朗日乘子:0.50000.5000xk点是约束极小点目标函数最小值minf(xk)minf = 1例3-1 利用进退法求42=--+的极值区间,取初始点0,步长()25f t t t t为0.1syms tf=t^4-t^2-2*t+5;[x1,x2]=minJT(f,0,0.1)进退法确定搜索区间函数文件minJT如下:function [minx,maxx]=minJT(f,x0,h0,eps)%目标函数:f;%初始点:x0;%初始步长:h0;%精度:esp;%区间左端点:minx;%区间右端点:maxx;format long;if nargin==3esp=1.0e-6;endx1=x0;k=0;h=h0;while 1x4=x1+h;%试探步k=k+1;f4=subs(f,findsym(f),x4);f1=subs(f,findsym(f),x1);if f4<f1x2=x1;x1=x4;f2=f1;f1=f4;h=2*h;%加大步长elseif k==1h=-h;%反向搜索x2=x4;f2=f4;elsex3=x2;x2=x1;x1=x4;break;endendendminx=min(x1,x3);maxx=x1+x3-minx;format short;M函数文件的运行结果如下x1 =0.3000x2 =1.5000例3-2 黄金分割法求一元函数2=-+的极小点,设初始搜索()1036f x x x区间[,][10,10]a b=-作两步迭代运算syms t;f=t^2-10*t+36;[x,fx]=minHJ(f,-10,10)黄金分割法一维搜索函数文件minHJ如下:function [x,minf]=minHJ(f,a,b,eps)%目标函数:f;%搜素区间左端点:a;%搜索区间右端点:b;%精度:eps;%目标函数取最小值时自变量值:x;%目标函数的最小值:minf;format long;if nargin==3eps=1.0e-6;endl=a+0.382*(b-a); %试探点u=a+0.618*(b-a); %试探点k=1;tol=b-a;while tol>eps && k<100000fl=subs(f,findsym(f),l);%试探点函数值fu=subs(f,findsym(f),u);%试探点函数值if fl>fua=l;%改变区间左端点l=u;u=a+0.618*(b-a); %缩小搜索区间elseb=u;%改变区间右端点u=l;l=a+0.382*(b-a); %缩小搜索区间endk=k+1;tol=abs(b-a);endif k==100000disp('找不到最优点!');x=NaN;minf=NaN;return; endx=(a+b)/2;minf=subs(f,findsym(f),x); format short;M 函数文件的运行结果如下: x = 5.0000 fx =11.0000例3-3利用二次插值法求函数()sin()f x x =的最优解,设初始搜索区间为13[,][4,5]x x =syms t;f=sin(t);[x,fx]=minPWX(f,4,5)二次插值法一维搜索函数文件minPWX如下:function [x,minf]=minPWX(f,a,b,eps)%目标函数:f;%初始收缩区间左端点:a;%初始收缩区间左端点:b;%精度:eps;%目标函数取最小值时的自变量:x;%目标函数的最小值:minfformat long;if nargin==3eps=1.0e-6;endt0=(a+b)/2;k=0;tol=1;while tol>epsfa=subs(f,findsym(f),a); %搜索区间左端点函数值fb=subs(f,findsym(f),b); %搜索区间右端点函数值ft0=subs(f,findsym(f),t0); %内插点函数值tu=fa*(b^2-t0^2)+fb*(t0^2-a^2)+ft0*(a^2-b^2);td=fa*(b-t0)+fb*(t0-a)+ft0*(a-b);t1=tu/2/td; %插值多项式的极小点ft1=subs(f,findsym(f),t1); %插值多项式的极小值tol=abs(t1-t0);if ft1<=ft0if t1<=t0b=t0; %更新搜索区间右端点t0=t1; %更新内插点elsea=t0; %更新搜索区间左端点t0=t1; %更新内插点endk=k+1;elseif t1<=t0a=t1;elseb=t1;endk=k+1;endendx=t1;minf=subs(f,findsym(f),x);format short;M函数文件的运行结果如下:x = 4.7124fx = -1.0000例3-4试用牛顿法求函数432=---+的极小点*x()46164f x x x x xsyms t;f=t^4-4*t^3-6*t^2-16*t+4;[x,fx]=minNewton(f,3)牛顿法一维搜索函数文件minNewton如下function [x,minf]=minNewton(f,x0,eps)%目标函数:f;%初始点:x0;%精度:eps;%目标函数取最小值时的自变量:x;%目标函数的最小值:minfformat longif nargin==2eps=1.0e-6;enddf=diff(f); %一阶导数d2f=diff(df); %二阶导数k=0;tol=1;while tol>epsdfx=subs(df,findsym(df),x0); %一阶导数值d2fx=subs(d2f,findsym(d2f),x0); %二阶导数值x1=x0-dfx/d2fx;k=k+1;tol=abs(dfx);x0=x1;endx=x1;minf=subs(f,findsym(f),x);format short;M函数文件的运行结果如下:x =4fx = -156例3-5用fminbnd求函数42()1=-+-在区间[2,1]f x x x x-上的极小值[x,fval,exitflag,output]=fminbnd('x^4-x^2+x-1',-2,1)所得结果为x = -0.8846fval = -2.0548exitflag =1output = iterations: 11funcCount: 14algorithm: 'golden section search, parabolic interpolation'message: [1x112 char]从输出结果能够看出,fminbnd用了黄金分割算法和抛物线算法来求本例的极小值,exitflag =1表明成功求得函数的极小值,迭代次数11次,要查看结果精度,能够接着在命令窗口中输入.output.messageans =Optimization terminated:the current x satisfies the termination criteria using OPTIONS.TolX o f1.000000e-004讲明求得的结果的精度为1.0e-4,如果想提升精度,options参数来指定,在命令窗口输入>> opt=optimset('Tolx',1.0e-6);>> format long;>> [x,fval,exitflag,output]=fminbnd('x^4-x^2+x-1',-2,1,opt)所得结果为x = -0.88464616447476fval = -2.05478406218540exitflag =1output = iterations: 11funcCount: 14algorithm: 'golden section search, parabolic interpolation'message: [1x112 char]如此求得的结果就有了1.0e-6的精度。

基于MatLab分布式编程模型的机械优化设计算法实验指导书

基于MatLab分布式编程模型的机械优化设计算法实验指导书

基于MATLAB分布式编程模型的机械优化设计算法实验指导书一、实验所需基础知识MATLAB是matrix & laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。

是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。

它在很大程度上摆脱了传统非交互式程序设计语言(如C、Java)的编辑模式。

本指导书重点阐述在MATLAB的编程环境下,如何运用优化工具箱(Optimization Toolbox)、分布式计算服务(MATLAB Distributed Computing Server,简称MDCE)和并行计算工具箱(Parallel Computing Toolbox)实现机械优化设计的算法,有关MATLAB操作环境和编程语言的详细基础知识请参考帮助文件或其它相关资料。

1.MATLAB语言编程简介MATLAB开发环境除了提供命令窗口(Command Window),实现人机交互式操作外,还提供编辑器(Editor),用户可以编制自己的程序文件。

用MATLAB 语言编写的可以在MATLAB环境中运行的程序称为M文件,M文件用扩展名.m 结尾,可在命令行中执行,也可被其它程序调用。

M文件分为两种:命令文件和函数文件,它们有各自的特点。

1.1 函数文件函数接收输入参数,返回输出参数。

函数文件与程序文件类似也是以“.m”为扩展名的文本文件,而程序文件与函数文件的主要区别在于,函数允许通过数值进行参数传递,而且函数使用局部变量而不是全局变量操作。

另外函数文件的第一行必须包括“function”这个关键字。

函数文件的文件名必须和函数定义的函数名称相同。

MATLAB的函数M文件通常由以下几个部分组成:●函数定义行函数M文件的第一行用关键字“function”把M文件定义为一个函数,并指定它的名字,并且与文件名必须相同,同时定义了函数的输入和输入参数。

输入参数的定义用小括号(),如果有多个输入参数则用逗号分隔;输出参数的定义用中括号[],如果有多个输出参数则用逗号分隔。

机械优化设计课后MATLAB编程全手工

机械优化设计课后MATLAB编程全手工

机械优化设计实验(常用优化方法程序考核题)姓名吕超班级机工1005班学号 104057010111.一位搜索方法程序考核题1)调用函数fminbnd[x0,fval]=fminbnd(@(t)t^2-10*t+36,-5,5)实验结果:x0 =5fval =112)调用函数fminbnd[x0,fval]=fminbnd(@(t)t^4-5*t^3+4*t^2-6*t+60,-5,5)实验结果:x0 =3.2796fval =22.65903)调用函数fminbnd[x0,fval]=fminbnd(@(t)(t+1)*(t-2)^2,0,5)实验结果:x0 =2.0000fval =1.0656e-0102.无约束优化方法程序考核题1)编写M文件function f=y(x)f=4*(x(1)-5)^2+(x(2)-6)^2;调用函数fminunc[x0 fval]=fminunc('y',[8;9])实验结果:x0 =5.0000fval =1.7876e-0122)编写M文件function f=y(x)f=(x(1)^2+x(2)-11)^2+(x(1)+x(2)^2-7)^2;调用函数fminunc[x0 fval]=fminunc('y',[1;1])实验结果:x0 =3.00002.0000fval =5.2125e-0123)编写M文件function f=y(x)u(1)=1.5-x(1)*(1-x(2));u(2)=2.25-x(1)*(1-x(2)^2);u(3)=2.625-x(1)*(1-x(2)^3);f=u(1)^2+u(2)^2+u(3)^2;调用函数fminunc[x0 fval]=fminunc('y',[2;0.2])实验结果:x0 =3.00000.5000fval =3.9195e-0144)编写M文件function f=y(x)f=(x(1)^2+12*x(2)-1)^2+(49*x(1)+49*x(2)+84*x(1)+2324*x(2)-681)^2; 调用函数fminsearch[x0 fval]=fminsearch('y',[1;1])x0 =0.33630.2681fval =5.43185)编写M文件function f=y(x)f=(x(1)+10*x(2))^2+5*(x(3)-x(4))^2+(x(2)-2*x(3))^4+10*(x(1)-x(4))^4; 调用函数fminunc[x0 fval]=fminunc('y',[3 -1 0 1]')实验结果:x0 =0.0015-0.0002-0.0031-0.0031fval =6.3890e-0093.约束优化方法程序考核题1)编写M文件(1) function f=y(x)f=(x(1)-2)^2+(x(2)-1)^2;(2) function [c,ceq]=z(x)c=x(1)^2-x(2);ceq=[];调用fmincon函数:[x0,fval]=fmincon('y',[3 3],[1 1],[2],[],[],'z')实验结果x0 =1.0000 1.0000fval =1.00002)编写M文件调用fmincon函数:A=[-1/sqrt(3) 1;-1 1/sqrt(3);1 1/sqrt(3)];,b=[0 0 6]';[x0,fval]=fmincon('y',[1 5],A,b,[],[],[0;0])实验结果x0 =4.5000 2.5981fval =-2.53133)编写M文件(1)function f=y(x)f=1000-x(1)^2-2*x(2)^2-x(3)^2-x(1)*x(2)-x(1)*x(3);(2)function [c ceq]=z(x)c=[];ceq(1)=x(1)^2+x(2)^2+x(3)^2-25;ceq(2)=8*x(1)+14*x(2)+7*x(3)-56;调用fmincon函数[x0,fval]=fmincon('y',[2;2;2],[],[],[],[],[0 0 0]',[],'z')实验结果:x0 =3.51210.21703.5522fval =961.71524)编写M文件function f=y(x)f=100*(x(2)-x(1)^2)^2+(1-x(1))^2+90*(x(4)-x(3)^2)^2+(1-x(3))^2+10*((x(2)-1)^2+( x(4)-1)^2)+19.8*(x(2)-1)*(x(4)-1);调用fmincon函数:[x0,fval]=fmincon('y',[-3 -1 -3 -1]',[],[],[],[],-10*ones(4,1),10*ones(4,1))实验结果x0 =1.00011.00020.99990.9997 fval =2.3989e-007。

机械优化设计MATLAB程序

机械优化设计MATLAB程序

机械优化设计MATLAB程序1.引言本文档旨在提供机械优化设计的MATLAB程序的详细说明。

机械优化设计是通过数学建模和优化算法,对机械结构进行优化设计,以达到设计要求和最佳性能。

MATLAB是一种强大的数学建模和仿真软件,可用于机械优化设计。

2.前期准备2.1 问题定义在机械优化设计中,首先需要明确问题的定义,包括设计要求、约束条件等。

对于每个具体的机械结构,需要明确其目标函数和设计变量。

2.2 建立数学模型在机械优化设计中,需要建立数学模型来描述机械结构的性能和约束条件。

数学模型可以是线性或非线性的,根据具体问题选择适当的模型。

3.优化算法选择根据机械优化设计的特点,选择适合的优化算法进行优化。

常用的优化算法有遗传算法、粒子群优化算法、模拟退火算法等。

4.MATLAB程序设计4.1 数据处理在进行机械优化设计时,需要对输入数据进行处理,包括导入数据、数据清洗和预处理等。

4.2 模型建立根据前期准备中建立的数学模型,使用MATLAB进行模型建立,其中包括目标函数和约束条件的定义。

4.3 优化算法应用根据选择的优化算法,使用MATLAB进行优化算法的应用。

需要注意的是,在应用优化算法之前,需要初始化优化算法的参数。

4.4 结果分析对优化结果进行分析和评估,包括目标函数的值、约束条件的满足程度等。

5.结果展示将优化结果用图表的形式展示出来,直观地描述机械结构的性能和优化效果。

6.结论根据优化结果和分析,对机械优化设计的效果进行总结和评价。

7.附件本文档涉及的附件包括:MATLAB程序代码、数据文件、结果输出文件等。

这些附件可以提供详细的参考和复现。

8.法律名词及注释在本文档中涉及的法律名词及其注释如下:1)版权:指对作品享有的权益,包括复制、发行、展示等权利。

2)专利:指对某种发明或技术的独占权,由国家授予。

3)商标:指用于标识某个商品或服务来源的标识,可以是名称、图形等。

4)知识产权:指人们在创造新的发明、设计、文学艺术作品等过程中所创造的财产权益。

机械设计优化 Matlab经典程序

机械设计优化 Matlab经典程序

机械设计优化结课作业专业:机械设计制造及其自动化学号: 120606131 姓名:徐向阳指导老师:艾泽潭目录1. ()()()212t t t ϕ=+- 用二次插值法求极小值。

精度0.01e = .............................. 1 2. ()t ϕ=用黄金分割法求极小值。

精度0.01ε= .............................. 2 3. ()()()421211222x x x x x ƒ=-+- 用牛顿法,阻尼牛顿法,变尺度法求极小点。

1) 牛顿法 (3)2) 阻尼牛顿法 (4)3) 变尺度法 (5)4. ()22121212131222x x x x x x x ƒ=+-- 用共轭梯度法求极小点。

............................... 6 5. ()221212112242x x x x x x x ƒ=+-- 用鲍威尔法求极小值。

..................................... 7 6. 用单纯形法求解线性规划问题()()12341231234m i n 1.12.23.34.4..422.53501,2,3,4j x x x x x s t x x x x x x x x j ƒ=--+-⎫⎪++=⎪⎪+++=⎪⎪≥=⎭ ......................................................... 9 7. 求解线性规划问题()12123124125min 712..943604520031030001,2,,5j x x s t x x x x x x x x x x j ⎫Z =--⎪++=⎪⎪++=⎪++=⎪⎪⎪≥=⎭ (11)1. ()()()2e=12ϕ=+-用二次插值法求极小值。

精度0.01 t t t程序如下:function [y,x]=ChaZhi2(f,eps,h,x0)% 利用二次差值求极小值% f为待求函数% eps为精度,默认为eps=1.0e-10% h步长,默认为h=0.0001% x0为搜索区间起始,默认x0=QuJian(f)% 调用格式% [y,x]=ChaZhi2(f,eps,h,x0)% [y,x]=ChaZhi2(f )if nargin==1[a,b,c]=QuJian(f);x0=[a,b,c];eps=1.0e-10;h=0.0001;elseif nargin==2[a,b,c]=QuJian(f);x0=[a,b,c];h=0.0001;elseif nargin==3[a,b,c]=QuJian(f);x0=[a,b,c];endx1=x0(1); y1=subs(f,findsym(f),x1);x2=x0(2); y2=subs(f,findsym(f),x2);x3=x0(3); y3=subs(f,findsym(f),x3);tol=1;while tol>epsc1=(y3-y1)/(x3-x1);c2=((y2-y1)/(x2-x1)-c1)/(x2-x3);xp=0.5*(x1+x3-c1/c2);yp=subs(f,findsym(f),xp);tol=abs((y2-yp)/y2);if (xp-x2)/h>0if y2>=ypx1=x2; y1=y2;x2=xp; y2=yp;elsex3=xp; y3=yp;endelseif y2>=ypx3=x2; y3=y2;x2=xp; y2=yp;elsex1=xp; y1=yp;endendendif y2<ypx=x2; y=y2;elsex=xp; y=yp;endif abs(y)<1.0e-10y=0;if nargout<2y=x;endmatlab中运行如下:[t,ft,k]=TIM([2;3;4])t =2.0000ft =1.4791e-31k =62. ()ε=ϕ=用黄金分割法求极小值。

机械优化设计MATLAB程序

机械优化设计MATLAB程序

机械优化设计MATLAB程序
1.建立目标函数和约束条件
在机械优化设计中,目标函数是需要最小化或最大化的量,可以是机械结构的重量、成本、应力等。

约束条件是指机械结构必须满足的条件,例如最大应力、最小挠度等。

在MATLAB中通过函数来定义目标函数和约束函数。

2.选择优化算法
MATLAB提供了多种优化算法,例如遗传算法、粒子群算法、模拟退火算法等。

根据实际情况选择合适的优化算法。

3.设计参数和变量范围
机械结构的优化设计通常涉及到多个参数和变量,如尺寸、材料等。

在MATLAB中通过定义参数和变量范围来限制优化过程中的空间。

4.编写优化程序
在MATLAB中,可以使用优化工具箱的相关函数来编写机械优化设计程序。

程序的基本结构包括定义目标函数、约束函数、参数和变量范围,并选择合适的优化算法进行求解。

5.运行优化程序
在编写完成程序后,可以通过运行程序来开始优化过程。

MATLAB会根据设定的目标函数和约束条件进行,并最终得到最优解。

6.分析优化结果
优化程序运行完成后,可以通过MATLAB提供的分析工具对优化结果进行评估。

可以通过绘制图表、计算相关指标等方式对结果进行分析和比较。

7.进一步优化和改进
根据优化结果,可以对机械结构进行进一步优化和改进。

可以调整参数和变量范围,重新运行优化程序,直到得到满意的结果。

总之,以上是一种用MATLAB编写机械优化设计程序的基本流程。

通过合理地利用MATLAB提供的工具和函数,可以帮助工程师进行机械结构的优化设计,提高设计效率和准确性。

机械优化设计MATLAB程序

机械优化设计MATLAB程序

机械优化设计MATLAB程序机械优化设计MATLAB程序引言机械优化设计是现代工程领域中的重要课题,通过采用数值方法和优化算法,可以实现对机械产品设计的自动化和优化。

MATLAB 作为一种功能强大的科学计算软件,为机械优化设计提供了丰富的工具和函数。

本文将介绍如何使用MATLAB编写机械优化设计程序,并讨论如何应用MATLAB进行机械优化设计。

MATLAB的优势与其他科学计算软件相比,MATLAB具有许多优势:1. 丰富的工具箱:MATLAB包含了各种各样的工具箱,涵盖了数值计算、优化、曲线拟合、数据可视化等领域,这些工具箱为机械优化设计提供了强大的支持。

2. 简单易用的编程语言:MATLAB使用的编程语言是一种高级语言,语法简单易懂,对于初学者而言非常友好。

即使没有编程经验,用户也能够快速上手。

3. 丰富的函数库:MATLAB拥有丰富的函数库,用户可以直接调用这些函数来完成各种任务,无需从零开始编写代码。

4. 广泛的应用领域:MATLAB在工程、科学、金融等领域得到了广泛的应用,拥有一个庞大的用户社区。

用户可以通过查看官方文档、参与用户社区等途径获取帮助和支持。

机械优化设计的步骤机械优化设计一般包括以下几个步骤:1. 建立数学模型:首先需要建立机械系统的数学模型,该模型可以基于物理原理或实验数据。

通过建立数学模型,可以将机械系统的性能指标与设计变量进行数学描述。

2. 确定优化目标:根据机械系统的需求和限制条件,确定优化目标。

优化目标可以是多个,如最小化能量损失、最小化材料使用量等。

3. 选择优化算法:基于问题的性质选择合适的优化算法。

常用的优化算法包括遗传算法、粒子群算法、梯度下降算法等。

4. 编写MATLAB代码:根据以上步骤,编写MATLAB代码实现机械优化设计。

MATLAB提供了丰富的工具箱和函数来辅助编写优化算法的代码。

编写机械优化设计MATLAB程序的步骤以下是编写机械优化设计MATLAB程序的一般步骤:1. 导入必要的工具箱和函数库:% 导入优化工具箱import optim.% 导入其他必要的函数库import matlab.2. 建立数学模型:根据机械系统的特点和要求,建立相应的数学模型。

02现代机械优化设计Matlab编程

02现代机械优化设计Matlab编程

《机械优化设计》程 序一、一维优化问题练习题1、2min ()1036f t t t =-+黄金分割法黄金分割法的基本思想:黄金分割法是通过不断单峰区间的长度来搜索极小点的一种有效方法,它是搜索区间比例缩小,通过计算比较函数值,以确定取舍区间。

黄金分割法程序框图黄金分割法 matlab 程序:clcsyms t ;f=t^2-10*t+36;a=2;b=10;c=a+0.382*(b-a);d=a+0.618*(b-a);f1=subs(f,c);f2=subs(f,d);while(abs(b-a)>=0.01)if(f1>f2)a=c;c=d;f1=f2;d=a+0.618*(b-a);f2=subs(f,d);else if(f1<f2)b=d;d=c;f2=f1;c=a+0.382*(b-a);f1=subs(f,c);else a=c;b=d;c=a+0.382*(b-a);d=a+0.618*(b-a);endendendt=0.5*(b+a)f0=subs(f)结果分析,给出的结果为最优解:,由于定义为单精度类型,故满足了精度要求。

Matlab运行结果如下:二、无约束优化问题1、2212min ()4(5)(6)f X x x =-+-初始点:(0)(0)[89],()45T X f X ==(1)梯度法梯度法的基本思想:梯度方向就是函数值变化最大的方向,沿着梯度问题,函数值上升最快,而负梯度方向是函数值下降最快的方向,此方法是沿着负梯度方向进行搜索的无约束方法。

梯度法程序框图梯度法在matlab 程序:(1)function y=fun(x1,x2)y=4*(x1-5)^2+(x2-6)^2;%此定义子函数,并保存为fun.m 文件。

(2) clcsyms x1 x2 d ;f=4*(x1-5)^2+(x2-6)^2;fx1=diff(f,'x1');fx2=diff(f,'x2');x1=8;x2=9;for n=1:100f0=subs(f);f1=subs(fx1);f2=subs(fx2);if(double(sqrt(f1^2+f2^2))<=0.000000001) nx1=vpa(x1)x2=vpa(x2)f0=vpa(f0)break;elseD=fun(x1-d*f1,x2-d*f2);Dd=diff(D,'d');dd=solve(Dd);x1=x1-dd*f1;x2=x2-dd*f2;endend%此为梯度法的主函数,并保存为tdf.m文件。

中衡机械优化【设计明细】MATLAB程序

中衡机械优化【设计明细】MATLAB程序

机械优化设计作业1.用二次插值法求函数()()()22ϕ极小值,精度e=0.01。

tt=t1-+在MA TLAB的M文件编辑器中编写的M文件,如下:f=inline('(t+1)*(t-2)^2','t')a=0;b=3;epsilon=0.01;t1=a;f1=f(t1);t3=b;f3=f(t3);t2=0.5*(t1+t3);f2=f(t2);c1=(f3-f1)/(t3-t1);c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);t4=0.5*(t1+t3-c1/c2);f4=f(t4);k=0;while(abs(t4-t2)>=epsilon)if t2<t4if f2>f4f1=f2;t1=t2;t2=t4;f2=f4;elsef3=f4;t3=t4;endelseif f2>f4f3=f2;t3=t2;t2=t4;f2=f4;elsef1=f4;t2=t4;endendc1=(f3-f1)/(t3-t1);c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);t4=0.5*(t1+t3-c1/c2);f4=f(t4);k=k+1;end%输出最优解if f2>f4t=t4;f=f(t4);elset=t2;f=f(t2);endfprintf(1,'迭代计算k=%3.0f\n',k)fprintf(1,'极小点坐标t=%3.0f\n',t)fprintf(1,'函数值f=%3.4f\n',f)运行结果如下: 迭代计算k= 7 极小点坐标t= 2 函数值f=0.00012.用黄金分割法求函数()32321+-=t t t ϕ的极小值,精度e=0.01。

在MA TLAB 的M 文件编辑器中编写的M 文件,如下: f=inline('t^(2/3)-(t^2+1)^(1/3)','t'); a=0;b=3;epsilon=0.01; t1=b-0.618*(b-a);f1=f(t1); t2=a+0.618*(b-a);f2=f(t2); k=1;while abs(b-a)>=epsilon if f1<f2b=t2;t2=t1;f2=f1;t1=b-0.618*(b-a);f1=f(t1); elsea=t1;t1=t2;f1=f2;t2=a+0.618*(b-a);f2=f(t2); endt=0.5*(b+a); k=k+1; f0=f(t); endfprintf(1,'迭代次数k=% 3.0f\n',k)fprintf(1,'迭代区间—左端a=%3.4f\n',a) fprintf(1,'试点1坐标值t1=%3.4f\n',t1) fprintf(1,'函数值f1=%3.4f\n',f(t1))fprintf(1,'迭代区间—右端b=%3.4f\n',b) fprintf(1,'试点2坐标值t2=%3.4f\n',t2) fprintf(1,'函数值f2=%3.4f\n',f(t2)) fprintf(1,'区间中点t=%3.4f\n',t) fprintf(1,'函数值f0=%3.4f\n',f(t)) 运行结果如下: 迭代次数k= 13迭代区间—左端a=0.0000 试点1坐标值t1=0.0036 函数值f1=-0.9767迭代区间—右端b=0.0093 试点2坐标值t2=0.0058 函数值f2=-0.9679 区间中点t=0.0047 函数值f0=-0.9721由黄金分割法在初始区间[0,3]求得的极小值点为t=0.0047,极小值为-0.9721。

机械优化设计MATLAB程序

机械优化设计MATLAB程序

机械优化设计MATLAB程序正文:⒈前言⑴研究背景机械优化设计是一种在机械工程领域中被广泛应用的方法,旨在通过使用数学模型和优化算法来改进机械系统的性能。

MATLAB是一种强大的数值计算和编程工具,可以用于开发机械优化设计程序。

⑵目的和范围⒉问题描述⑴设计需求在开始编写机械优化设计程序之前,需要明确设计需求,即需要实现的机械系统的性能指标或目标。

这些需求可以包括系统的功率、效率、噪声、振动等方面。

⑵优化目标根据设计需求,确定最终优化目标。

例如,通过调整机械系统的参数来最大化系统的效率、最小化系统的振动等。

⒊数学模型⑴设计变量设计变量是机械系统中可以调整的参数。

需要对设计变量进行定义和范围设定,以确保优化算法能够在合理的范围内搜索最优解。

⑵约束条件约束条件是在进行优化时必须满足的条件。

这些条件可以包括设计变量的边界条件、约束函数等。

在编写MATLAB程序时,需要将这些约束条件作为输入参数。

⒋算法选择与实现⑴优化算法选择根据优化目标和系统的特点,选择合适的优化算法。

常见的优化算法包括遗传算法、粒子群优化算法、模拟退火算法等。

⑵优化算法实现根据选择的优化算法,编写MATLAB程序实现优化过程。

程序应包括目标函数的定义、算法的参数设置、迭代过程和终止条件等。

⒌算法验证与结果分析⑴数据采集与处理在进行机械优化设计实验时,需要采集相应的实验数据,并对数据进行处理。

这些数据可以包括设计变量的调整情况、系统性能指标的变化等。

⑵结果分析基于采集到的数据,分析和比较不同优化算法的性能。

可以绘制图表展示优化过程和结果的变化,以便于进一步分析和优化。

⒍结论与展望总结机械优化设计MATLAB程序的设计过程和结果,对实验结果进行分析,并提出未来改进和研究的方向。

1、本文档涉及附件:附件1:MATLAB程序代码示例附件2:数据采集记录表2、本文所涉及的法律名词及注释:机械优化设计:指利用数学模型和优化算法改善机械系统性能的方法。

Matlab 机械优化设计

Matlab 机械优化设计

x= 1.0000 2.0007
fval = 10.0000
exigflag = 1
hessian = iterations: 6 funcCount: 21 stepsize: 1
firstorderopt: 0.0013 algorithm: 'medium-scale: Quasi-
Newton line search'
l Hessian – 用户定义的目标函数的Hessian矩阵。 l HessPattern – 用于有限差分的Hessian矩阵的 稀疏形式。若不方便求fun函数的稀疏Hessian矩阵 H,可以通过用梯度的有限差分获得的H的稀疏结 构(如非零值的位置等)来得到近似的Hessian矩 阵H。若连矩阵的稀疏结构都不知道,则可以将 HessPattern设为密集矩阵,在每一次迭代过程中, 都将进行密集矩阵的有限差分近似(这是缺省设
无约束非线性规划问题 相关函数
fminunc函数 fminsearch函数
fminunc函数 功能: 给定初值,求多变量标量函数的最小值。 常用于无约束非线性最优化问题。 数学模型:
min f (x) x
其中,x为一向量,f(x)为一函数,返回标量。
语法格式及描述
x = fminunc(fun,x0)给定初值x0,求fun函数的局 部极小点x。x0可以是标量、向量或矩阵。 x = fminunc(fun,x0,options)用options参数中指 定的优化参数进行最小化。 x = fminunc(fun,x0,options,P1,P2,...)将问题参 数p1、p2等直接输给目标函数fun,将options参 数设置为空矩阵,作为options参数的缺省值。

基于Matlab的机械优化设计课后题

基于Matlab的机械优化设计课后题

基于Matlab的机械优化设计课后题1.一维搜索法说明:采用0.618法进行编程代码如下:syms tf=(需要计算的函数)x1=0;h=2;f1=subs(f,x1);x2=x1+h;f2=subs(f,x2);f3=f2-1;t=1;if (f1-f2)>0while f3<f2f3=subs(f,x2+t*h);t=t+1;endx3=x2+t*h;elsef3=f2;f2=f1;t=1;f1=f2-1;x3=x2;x2=x1;while f1<f2f1=subs(f,x2-t*h);t=t+1;endx1=x2-t*h;enda=x1;b=x3;e=1e-05;k=0.618;a1=b-k*(b-a);a2=a+k*(b-a);f1=subs(f,a1);f2=subs(f,a2);c=(b-a)/2;while c>eif f1>f2a=a1;a1=a2;a2=a+k*(b-a);f1=f2;f2=subs(f,a2);elseb=a2;a2=a1;a1=b-k*(b-a);f2=f1;f1=subs(f,a1);endc=(b-a)/2;end实际运行结果如下:1. t=a1=5;f=11;2. t=a1=3.2796;f=22.6590;3. t=a1=2;f=1.1122e-011;2.无约束的优化设计说明:一共采用了三种算法的编程首先要建立步长函数,步长函数代码如下:function az=buchang(x,d,f)b=symvar(f);syms aaxn=x-d*aa;pa=subs(f,b,xn);pd=diff(pa,aa);aa=solve(pd);aa=real(aa);aa=subs(aa);n=size(aa,1);z=zeros(1,n);for i=1:nxn(:,i)=x-aa(i)*d;endfor i=1:nz(i)=subs(f,b,xn(:,i));ends=z(1);c=1;for i=1:n-1if s>z(i+1)s=z(i+1);c=i+1;endendaz=aa(c);end1.DFP:·¨syms (函数中的变量)f=(所需要优化的函数)x0=;b=symvar(f);n=size(b,2);g=cell(n,1);G=cell(n,n);H0=eye(n,n);for i=1:ng{i,1}=diff(f,b(i));endfor i=1:n %²úÉúº£Èû¾ØÕófor j=1:nG{j,i}=diff(g{i},b(j));endendg0=subs(g,b,x0);d0=H0*g0;a=buchang(x0,d0,f);x1=x0-a*d0;xcha=x1-x0;dis=mo(xcha);k=1while dis>1e-5g1=subs(g,b,x1);if g1==0Gy=subs(G,b,x1)breakendy0=g1-g0;s0=x1-x0;H1=H0+(s0*s0')/(s0'*y0)-(H0*y0*y0'*H0)/(y0'*H0*y0); d1=H1*g1;a=buchang(x1,d1,f);x2=x1-a*d1;g0=g1;x0=x1;x1=x2;H0=H1;xcha=x1-x0;dis=mo(xcha);x1subs(f,b,x1)k=k+1end2.坐标轮换法:syms t1t2f=(t1^2+t2-11)^2+(t1+t2^2-7)^2;b=symvar(f);n=size(b,2);A=eye(n,n);x0=[1;1];dis=1;k=0;while dis>1e-5if k==30breakende=A(:,1);a=buchang(x0,e,f);x1=x0-e*a;i=2;while i<n+1e=A(:,i);a=buchang(x1,e,f);x2=x1-e*a;x1=x2;i=i+1;endxcha=x1-x0;dis=mo(xcha);x0=x1;k=k+1x0end3.鲍威尔法:syms t1t2t3t4f=(t1+10*t2)^2+5*(t3-t4)^2+(t2-2*t3)^4+10*(t1-t4)^4;x0=[3;-1;0;1];b=symvar(f);n=size(b,2);A=eye(n,n);dis=1;while dis>1e-6F0=subs(f,b,x0);e=A(:,1);a=buchang(x0,e,f);x1=x0-e*a;i=2;fz=zeros(1,n);while i<n+1e=A(:,i);fd=subs(f,b,x1);fz(1,i-1)=fd;a=buchang(x1,e,f);x2=x1-a*e;x1=x2;i=i+1;endxcha=x1-x0;dis=mo(xcha);d=x1-x0;x=x1+d;F2=subs(f,b,x1);F3=subs(f,b,x);fz=[F0,fz];cz=zeros(1,n);for i=1:ncz(i)=fz(i)-fz(i+1);endczm=max(cz);m=find(czm);P1=F3-F0;P2=(F0-2*F2+F3)*(F0-F2-czm)^2-0.5*czm*(F0-F3)^2;if P1<0&&P2<0a=buchang(x1,d,f);x0=x1-a*d;A(:,m)=[];A=[A,d];elseif F2<F3x0=x1;elsex0=x;endendx0end实际运行结果如下:1.x=[5;6];f=02.x=[3;2];f=03.x=[3;0.5];f=0.52978;4.x=[0.1239;0.2844];f=5.8969;5.x=[0;0;0;0];f=0;3.约束优化方法程序说明:本题采用matlab自带的fmincon函数来解决非线性优化问题具体代码如下:1. function y=fun1(x)y=(x(1)-2).^2+(x(2)-1).^2;endfunction [c,ceq]=gt1(x)c=x(1).^2-x(2);ceq=[];endA=[1,1];b=2;x0=[1;2];lb=[];ub=[];[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(@fun1,x0,A,b,[], [],lb,ub,@gt1);运行结果如下:x=[1;1];fval=12. function y=fun2(x)y=x(2).^3*((x(1)-3).^2-9)/(27*sqrt(3));endA=[-1/sqrt(3),1;-1,1/sqrt(3);1,1/sqrt(3)];b=[0;0;6];x0=[2;3];lb=[0;0];ub=[];[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(@fun2,x0,A,b,[], [],lb,ub)运行结果如下:X=[4.5000;2.5981];f=-2.5313;备注:引用函数并未能够达到最优点,原因不明;3. function y=fun3(x)y=1000-x(1).^2-2*x(2).^2-x(3)^2-x(1).*x(2)-x(1).*x(3);endfunction [c,cev]=gt2(x)c=[];cev(1)=x(1).^2+x(2).^2+x(3).^2-25;cev(2)=8*x(1)+14*x(2)+7*x(3)-56;endA=[];b=[];Aq=[];bq=[];lb=[0;0;0];ub=[];x0=[2;2;2];[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(@fun3,x0,A,b,Aq, bq,lb,ub,'gt2')运行结果如下:x= [3.5121;0.2170;3.5522];f= 961.7152;exitflag =4备注:引用函数由于算法在迭代过程中产生了NaN,迭代被迫终止4. function y=fun4(x)y=100*(x(2)-x(1).^2).^2+(1-x(1)).^2+90*(x(4)-x(3).^2).^2+(1-x(3))^2+1 0*((x(2)-1).^2+(x(4)-...1).^2)+19.8*(x(2)-1)*(x(4)-1);endA=[];b=[];Aq=[];bq=[];lb=[-10;-10;-10;-10];ub=[10;10;10;10];x0=[-3;-1 ;-3;-1];[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(@fun4,x0,A,b,Aq, bq,lb,ub)运行结果如下:X=[1.0001;1.0002;0.9999;0.9997];f=0;exitflag=5 备注:原始对偶问题没有可行解。

机械优化设计Matlab_优化工具箱基本用法

机械优化设计Matlab_优化工具箱基本用法

机械优化设计Matlab_优化工具箱基本用法Matlab 优化工具箱类型模型基本函数名一元函数极小Min F(x)s.t.x1<x无约束极小Min F(X)X=fminunc(‘F’,X0) X=fminsearch(‘F’,X0)线性规划Min Xc Ts.t.AX<=bX=linprog(c,A,b)二次规划Min21x T Hx+c T xs.t. Ax<=bX=quadprog(H,c,A,b)约束极小(非线性规划)Min F(X)s.t. G(X)<=0X=fmincon(‘FG’,X0)达到目标问题Min rs.t. F(x)-wr<=goalX=fgoalattain(‘F’,x,goal,w)极小极大问题Min max {F i(x)}X {Fi(x)}s.t. G(x)<=0X=fminimax(‘FG’,x0)变量调用函数描述f linprog,quadprog 线性规划的目标函数f*X 或二次规划的目标函数X’*H*X+f*X 中线性项的系数向量funfminbnd,fminsearch,fminunc,fmincon,lsqcurvefit,lsqnonlin,fgoalattain,fminimax非线性优化的目标函数.fun必须为行命令对象或M文件、嵌入函数、或MEX文件的名称H quadprog 二次规划的目标函数X’*H*X+f*X 中二次项的系数矩阵A,b linprog,quadprog,fgoalattain,fmincon, fminimaxA矩阵和b向量分别为线性不等式约束:bAX≤中的系数矩阵和右端向量Aeq,beq linprog,quadprog,fgoalattain,fmincon, fminimaxAeq矩阵和beq向量分别为线性等式约束:beqXAeq=中的系数矩阵和右端向量vlb,vub linprog,quadprog,fgoalattain,fmincon,fminimax,lsqcurvefit,lsqnonlinX的下限和上限向量:vlb≤X≤vubX0 除fminbnd外所有优化函数迭代初始点坐标x1,x2 fminbnd 函数最小化的区间options 所有优化函数优化选项参数结构,定义用于优化函数的参数x = bintprog(f, A, b, Aeq, Beq, x0, options) 0-1规划用MATLAB 优化工具箱解线性规划命令:x=linprog (c ,A ,b )2、模型:beqAeqX bAX ..min =≤=t s cXz 命令:x=linprog (c ,A ,b ,Aeq,beq )注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 3、模型:VUBX VLB beq AeqX bAX ..min ≤≤=≤=t s cX z命令:[1] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB )[2] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB, X0)注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…)返回最优解x及x处的目标函数值fval.例1 max 6543216.064.072.032.028.04.0x x x x x x z +++++= 85003.003.003.001.001.001.0..654321≤+++++x x x x x x t s70005.002.041≤+x x 10005.002.052≤+x x 90008.003.063≤+x x6,2,10=≥j x j解编写M 文件小xxgh1.m 如下: c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6];A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08]; b=[850;700;100;900]; Aeq=[]; beq=[];vlb=[0;0;0;0;0;0]; vub=[];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)min z=cXb AX t s≤..1、模型:例2 321436min x x x z ++= 120..321=++x x x t s301≥x 5002≤≤x203≥x解: 编写M 文件xxgh2.m 如下: c=[6 3 4]; A=[0 1 0]; b=[50];Aeq=[1 1 1]; beq=[120]; vlb=[30,0,20];vub=[];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub例3 (任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。

机械优化设计MATLAB程序

机械优化设计MATLAB程序

机械优化设计MATLAB程序机械优化设计作业1.用二次插值法求函数tt1t22极小值,精度e=。

在MATLAB的M文件xx器中编写的M文件,如下:f=inline('(t+1)*(t-2)^2','t') a=0;b=3;epsilon=; t1=a;f1=f(t1); t3=b;f3=f(t3);t2=*(t1+t3);f2=f(t2); c1=(f3-f1)/(t3-t1);c2=((f2-f1)/(t2-t1)-c1)/(t2-t3); t4=*(t1+t3-c1/c2);f4=f(t4); k=0;while(abs(t4-t2)>=epsilon) if t2f4f1=f2;t1=t2; t2=t4;f2=f4; elsef3=f4;t3=t4; end elseif f2>f4f3=f2;t3=t2; t2=t4;f2=f4; elsef1=f4;t2=t4; end endc1=(f3-f1)/(t3-t1);c2=((f2-f1)/(t2-t1)-c1)/(t2-t3); t4=*(t1+t3-c1/c2);f4=f(t4); k=k+1; end%输出最优解 if f2>f4t=t4;f=f(t4); elset=t2;f=f(t2); endfprintf(1,'迭代计算k=%\\n',k) fprintf(1,'极小点坐标t=%\\n',t) fprintf(1,'函数值f=%\\n',f) 运行结果如下:迭代计算k= 7 极小点坐标t= 2 函数值f=2.用黄金分割法求函数t3t23t21的极小值,精度e=。

在MATLAB的M文件xx器中编写的M文件,如下:f=inline('t^(2/3)-(t^2+1)^(1/3)','t');a=0;b=3;epsilon=; t1=*(b-a);f1=f(t1); t2=a+*(b-a);f2=f(t2); k=1;while abs(b-a)>=epsilon if f1epson) p=-G1\\g1; x0=x0+p;g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=k+1; end x=x0;fx=subs(f,{x1,x2},{x(1,1),x(2,1)}); 运行结果如下:>> [x,fx,k]=niudunfa([1;1])x =fx = k =23(2)用阻尼牛顿法在MATLAB的M文件xx器中编写的M 文件,如下:function [x,fx,k]=zuniniudunfa(x0)%阻尼牛顿法syms x1 x2f=(x1-2)^4+(x1-2*x2)^2; fx=0;v=[x1,x2];df=jacobian(f,v); df=df.';G=jacobian(df,v);epson=1e-12;%停机原则g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)}); k=0;%迭代次数 p=-G1\\g1;a0=-p'*g1/(p'*G1*p); x0=x0+a0*p;while(norm(a0*p)>epson) p=-G1\\g1;a0=-p'*g1/(p'*G1*p); x0=x0+a0*p;g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=k+1; end x=x0;fx=subs(f,{x1,x2},{x0(1,1),x0(2,1)});运行结果如下:>>[x,fx,k]=zuniniudunfa([1;1])x=fx= k=23(3)用变尺度法在MATLAB的M文件xx器中编写的M文件,如下:32124.用共轭梯度法求函数fx1,x2x1x2x1x22x1的极小点22用共轭梯度法在MATLAB的M文件xx器中编写的M文件,如下:function[y,x,k]=CG(A,b,c,x0)%共轭梯度法解minf=*X'*A*X+b'x+c eps=1e-6;%迭代停机原则%fx=*x0'.*A.*x0+b'.*x0+c; r0=A*x0+b; if norm(r0)epsbeta=(r1'*r1)/(r0'*r0); p1=-r1+beta*p0;alpha=-(r1'*p1)/(p1'*A*p1);x1=x1+alpha*p1; r2=A*x1+b; p0=p1; r0=r1; r1=r2; k=k+1; end x=x1;y=*x'*A*x+b'*x+c;运行结果如下:[y,x,k]=CG([3 -1;-1 1],[-2;0],0,[2;1]) y = -1x = k = 1(2)用变尺度法在MATLAB的M文件xx器中编写的M文件,如下:function [x,fx,k]=bianchidufa(A,b,c,x0) %用变尺度法求fx=*x'*A*x+b'*x+c; epson=1e-12; g0=A*x0+b; G0=A; H0=eye(2); k=0; d0=-H0*g0;a0=-d0'*g0/(d0'*G0*d0); s0=a0*d0; %x(k+1)-x(k); y0=A*a0*d0; %g(k+1)-g(k); x1=x0+a0*d0;while (norm(s0)>=epson) switch k case{10} x0=x1;g0=A*x0+b;H0=eye(2);k=0; d0=-H0*g0;a0=-d0'*g0/(d0'*G0*d0);s0=a0*d0; x1=x0+a0*d0; break otherwiseg1=A*x1+b; y0=A*a0*d0; s0=a0*d0;% H1=H0+s0*s0'/(s0'*y0)-H0*y0*y0'*H0/(y0'*H0*y0);H1=H0+((1+y0'*H0*y0/(s0'*y0))*s0*s0'-H0*y0*s0'-s0*y0'*H0)/(s0'*y0); k=k+1; d1=-H1*g1;a1=-d1'*g1/(d1'*G0*d1);a0=a1;d0=d1; H0=H1; s0=a0*d0; x1=x1+a0*d0; break end end x=x1;fx=*x1'*A*x1+b'*x1+c;运行结果如下:》[x,fx,k]=bianchidufa([3 -1;-1 1],[-2;0],0,[2;1]) H1 =fx = -1 x =fx = -1 k = 1故函数极小点是点25.用鲍威尔法求函数fx1,x2x122x24x12x1x2的极小点。

机械优化设计黄金分割法MATLAB程序

机械优化设计黄金分割法MATLAB程序

利用MATLAB 实现黄金分割法求极值问题姓名:xxx 学号:xxx(哈尔滨工业大学)1. 黄金分割法的基本思想黄金分割法(golden section method )是优化方法中的经典算法,以算法简单、效果显著而著称,是许多优化算法的基础。

但它只适用于一维区间[,]a b 上的凸函数。

其基本思想是:依照“去坏留好”原则、对称原则以及等比收缩原则,利用序列消去原理,通过不断缩小单峰区间长度,即每次迭代都消去一部分无用区间,使搜索区间不断缩小,来逐步缩小搜索范围,从而不断逼近目标函数极小点的一种优化方法。

黄金分割法程序结构简单,容易理解,但计算效率偏低,较适用于设计变量少的优化问题中的一维搜索。

在搜索区间[,]a b 内必须按下述规则对称地取1a 和2a 两点:()1a b b aλ=--,()2a a b a λ=+-,1a 和2a 将区间分成三段,其中λ称为区间收缩率,黄金分割法中λ≈0.618,然后计算插入点的函数值,删去其中一段,使搜索区间得以缩小。

如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。

2.迭代过程和算法流程图2.1迭代过程(1) 给定区间[],a b ,并输入0ε>;(2) 计算10.618(-),20.618(-)a b b a a a b a =-=+;(3) 判断b a ε-<,若成立,则迭代终止;否则,继续;(4) 若(1)(2)f a f a ≤,令2b a =,21a a =,a1=b-0.618(b-a)(5) 若(1)(2)f a f a ≥,令1a a =,12a a =,a2=a+0.618(b-a)(6) 得出最优解:*()/2x a b =+,**()y f x =。

2.2算法流程图黄金分割法的算法流程图如图3-1.图 3-1 黄金分割法的算法框图3.利用MATLAB 求解实例3.1实例1、2min ()1036f t t t =-+用黄金分割法求解:近似极小点*x 及*()f x ,其中3a =-,5b =,0.01ε=。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机械优化设计作业1.用二次插值法求函数()()()22ϕ极小值,精度e=0.01。

tt=t1-+在MATLAB的M文件编辑器中编写的M文件,如下:f=inline('(t+1)*(t-2)^2','t')a=0;b=3;epsilon=0.01;t1=a;f1=f(t1);t3=b;f3=f(t3);t2=0.5*(t1+t3);f2=f(t2);c1=(f3-f1)/(t3-t1);c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);t4=0.5*(t1+t3-c1/c2);f4=f(t4);k=0;while(abs(t4-t2)>=epsilon)if t2<t4if f2>f4f1=f2;t1=t2;t2=t4;f2=f4;elsef3=f4;t3=t4;endelseif f2>f4f3=f2;t3=t2;t2=t4;f2=f4;elsef1=f4;t2=t4;endendc1=(f3-f1)/(t3-t1);c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);t4=0.5*(t1+t3-c1/c2);f4=f(t4);k=k+1;end%输出最优解if f2>f4t=t4;f=f(t4);elset=t2;f=f(t2);endfprintf(1,'迭代计算k=%3.0f\n',k)fprintf(1,'极小点坐标t=%3.0f\n',t)fprintf(1,'函数值f=%3.4f\n',f)运行结果如下:迭代计算k= 7极小点坐标t= 2函数值f=0.00012.用黄金分割法求函数()32321+-=t t t ϕ的极小值,精度e=0.01。

在MATLAB 的M 文件编辑器中编写的M 文件,如下:f=inline('t^(2/3)-(t^2+1)^(1/3)','t');a=0;b=3;epsilon=0.01;t1=b-0.618*(b-a);f1=f(t1);t2=a+0.618*(b-a);f2=f(t2);k=1;while abs(b-a)>=epsilonif f1<f2b=t2;t2=t1;f2=f1;t1=b-0.618*(b-a);f1=f(t1);elsea=t1;t1=t2;f1=f2;t2=a+0.618*(b-a);f2=f(t2);endt=0.5*(b+a);k=k+1;f0=f(t);endfprintf(1,'迭代次数k=% 3.0f\n',k)fprintf(1,'迭代区间—左端a=%3.4f\n',a)fprintf(1,'试点1坐标值t1=%3.4f\n',t1)fprintf(1,'函数值f1=%3.4f\n',f(t1))fprintf(1,'迭代区间—右端b=%3.4f\n',b)fprintf(1,'试点2坐标值t2=%3.4f\n',t2)fprintf(1,'函数值f2=%3.4f\n',f(t2))fprintf(1,'区间中点t=%3.4f\n',t)fprintf(1,'函数值f0=%3.4f\n',f(t))运行结果如下:迭代次数k= 13迭代区间—左端a=0.0000试点1坐标值t1=0.0036函数值f1=-0.9767迭代区间—右端b=0.0093试点2坐标值t2=0.0058函数值f2=-0.9679区间中点t=0.0047函数值f0=-0.9721由黄金分割法在初始区间[0,3]求得的极小值点为t=0.0047,极小值为-0.9721。

3.用牛顿法、阻尼牛顿法及变尺度法求函数()()()221412122,x x x x x f -+-=的极小点。

(1)在用牛顿法在MATLAB 的M 文件编辑器中编写的M 文件,如下:function [x,fx,k]=niudunfa(x0)syms x1 x2f=(x1-2)^4+(x1-2*x2)^2;fx=0;v=[x1,x2];df=jacobian(f,v);df=df.';G=jacobian(df,v);epson=1e-12;g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=0;p=-G1\g1;x0=x0+p;while(norm(g1)>epson)p=-G1\g1;x0=x0+p;g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=k+1;endx=x0;fx=subs(f,{x1,x2},{x(1,1),x(2,1)});运行结果如下:>> [x,fx,k]=niudunfa([1;1])x =1.99995544760595233814899913778970.99997772380297616907449956889483fx =0.0000000000000000039398907941382470301534502947647 k =23(2)用阻尼牛顿法在MATLAB 的M 文件编辑器中编写的M 文件,如下:function [x,fx,k]=zuniniudunfa(x0)%阻尼牛顿法syms x1 x2f=(x1-2)^4+(x1-2*x2)^2;fx=0;v=[x1,x2];df=jacobian(f,v);df=df.';G=jacobian(df,v);epson=1e-12;%停机原则g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=0;%迭代次数p=-G1\g1;a0=-p'*g1/(p'*G1*p);x0=x0+a0*p;while(norm(a0*p)>epson)p=-G1\g1;a0=-p'*g1/(p'*G1*p);x0=x0+a0*p;g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=k+1;endx=x0;fx=subs(f,{x1,x2},{x0(1,1),x0(2,1)});运行结果如下:>>[x,fx,k]=zuniniudunfa([1;1])x=1.99995544760595233814899913778970.99997772380297616907449956889483fx=0.0000000000000000039398907941382470301534502947647k=23(3)用变尺度法在MATLAB 的M 文件编辑器中编写的M 文件,如下:4.用共轭梯度法求函数()12122212122123,x x x x x x x f --+=的极小点 (1)用共轭梯度法在MATLAB 的M 文件编辑器中编写的M 文件,如下:function [y,x,k]=CG(A,b,c,x0)%共轭梯度法解minf (x )=0.5*X'*A*X+b'x+ceps=1e-6;%迭代停机原则%fx=0.5*x0'.*A.*x0+b'.*x0+c;r0=A*x0+b;if norm(r0)<=epsx=x0;y=0.5*x'*A*x+b'*x+c;k=0;endp0=-r0;a=-r0'*p0/(p0'*A*p0);x1=x0+a*p0;r1=A*x1+b;k=0;while norm(r1)>epsbeta=(r1'*r1)/(r0'*r0);p1=-r1+beta*p0;alpha=-(r1'*p1)/(p1'*A*p1);x1=x1+alpha*p1;r2=A*x1+b;p0=p1;r0=r1;r1=r2;k=k+1;endx=x1;y=0.5*x'*A*x+b'*x+c;运行结果如下:[y,x,k]=CG([3 -1;-1 1],[-2;0],0,[2;1])y = -1x = 1.00001.0000k = 1(2)用变尺度法在MATLAB的M文件编辑器中编写的M文件,如下:function [x,fx,k]=bianchidufa(A,b,c,x0)%用变尺度法求fx=0.5*x'*A*x+b'*x+c;epson=1e-12;g0=A*x0+b;G0=A;H0=eye(2);k=0;d0=-H0*g0;a0=-d0'*g0/(d0'*G0*d0);s0=a0*d0; %x(k+1)-x(k);y0=A*a0*d0; %g(k+1)-g(k);x1=x0+a0*d0;while (norm(s0)>=epson)switch kcase{10}x0=x1;g0=A*x0+b;H0=eye(2);k=0;d0=-H0*g0;a0=-d0'*g0/(d0'*G0*d0);s0=a0*d0;x1=x0+a0*d0;breakotherwisey0=A*a0*d0;s0=a0*d0;% H1=H0+s0*s0'/(s0'*y0)-H0*y0*y0'*H0/(y0'*H0*y0);H1=H0+((1+y0'*H0*y0/(s0'*y0))*s0*s0'-H0*y0*s0'-s0*y0'*H0)/(s0'*y0); k=k+1;d1=-H1*g1;a1=-d1'*g1/(d1'*G0*d1);a0=a1;d0=d1;H0=H1;s0=a0*d0;x1=x1+a0*d0;breakendendx=x1;fx=0.5*x1'*A*x1+b'*x1+c;运行结果如下:》 [x,fx,k]=bianchidufa([3 -1;-1 1],[-2;0],0,[2;1])H1 =0.4031 0.25780.2578 0.8945fx = -1x =1.00001.0000fx = -1k = 1故函数极小点是点(1,1)5.用鲍威尔法求函数()211222121242,x x x x x x x f --+=的极小点。

相关文档
最新文档