机械优化大作业-MATLAB复合型法
MATLAB在机械优化设计中的应用
MATLAB在机械优化设计中的应用MATLAB在机械优化设计中的应用随着科技的不断发展,优化设计在机械工程领域的重要性日益凸显。
优化设计旨在找到最佳的设计方案,以提高产品的性能、降低成本并最大限度地提高效率。
MATLAB是一种广泛使用的科学计算软件,其内置的优化工具箱可应用于各种机械设计问题中。
1.概述MATLAB优化工具箱提供了多种优化算法和建模工具,以解决各种实际问题。
这些算法可应用于连续变量、离散变量和非线性问题等。
在机械优化设计中,MATLAB可帮助设计师找到满足所有约束条件的最佳设计方案。
2.应用实例首先,我们需要建立一个描述这个问题的数学模型。
我们可以使用MATLAB的优化工具箱来定义问题的目标函数和约束条件。
在这个例子中,目标函数可能是零件的总成本,而约束条件可能包括性能指标(如强度或刚度)必须满足给定的标准。
然后,我们可以使用MATLAB的优化工具箱中的算法来解决这个问题。
我们可能会使用一种迭代方法,尝试不同的设计方案,直到找到最优的设计方案。
在这个过程中,MATLAB会自动调整设计参数,以满足我们定义的约束条件并最小化目标函数。
3.结论总的来说,MATLAB在机械优化设计中具有广泛的应用前景。
其强大的数学计算和优化工具箱可以有效地解决各种复杂的机械设计问题。
通过使用MATLAB,设计师可以在更短的时间内找到最优的设计方案,从而提高产品的性能和效率。
然而,尽管MATLAB提供了许多强大的工具和算法,但设计师仍需要了解基本的优化理论和方法才能有效地使用这些工具。
此外,设计师还需要对机械设计领域有深入的理解,以便建立正确的数学模型和约束条件。
未来,随着科技的不断发展,我们可以预期MATLAB将在更多领域得到应用。
例如,随着增材制造(3D打印)等新型制造技术的出现,优化设计将变得越来越重要。
在这种情况下,MATLAB可以帮助设计师找到最佳的设计方案,以最大限度地提高制造效率和降低成本。
用matlab编写复合形法程序
用matlab编写复合形法程序浏览次数:1105次悬赏分:50 |提问时间:2009-1-30 23:21 |提问者:凝丫头|问题为何被关闭原函数是f(x,y)=sinx*siny/(x*y) , x,y 的取值范围均为(-10,10)求助,用MATLAB编写复合形法!!拜托拜托其他回答共2条!* 说明: 1.本程序为复合形法*!**!* 2.程序功能是求解约束最优化问题*!* max F(x1,x2,…,xn)*!* s.t. Gi≤xi≤Hi*!* 其中x1,x2,…,xn为独立自变量,*!* xn+1~xm为隐式变量,是x1,x2,…,xn的函数,Gi,Hi为下界和上界,它们可以是常数(显式约束),*!* 也可以是自变量的函数(隐式约束)*!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果*!**!* 3.输入变量说明*!* N--显式自变量数*!* M--约束组数*!* K--构成复合形的顶点数,常用N+1,可多取*!* ITMAX--允许最多迭代次数*!* IPRINT--打印控制参数,IPRINT=1,打印中间结果,IPRINT=0,不打印中间结果*!* ALPHA--反射因子,常用1.3*!* BETA--收敛参数,例如函数的幅值乘1E-4*!* GAMMA--收敛参数,整数,常用值为5*!* DELTA--显式约束违反校正,小正数,如X向量幅值乘1E-4*!* X(1,J)--自变量初始可行点,=1,N*!**!* 4.输出变量说明*!* F--目标函数最大值勤*!* X(I)--自变量最优值,I=1,N*!**!* 5.使用方法*!* 1)用户按照待解问题修改主程序PARAMETER的N,M,K值*!* 2)在子程序FUNC中给定目标函数*!* 3)在子程序CONST中给定Hi和Gi,显式约束必须放在隐式约束前面*!* 4)编写一个数据文件COMPDAT,文件中的数据依次为下列变量的值,每个数之间用逗号分开*!* ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTA,X(1,1),X(1,2),…,X(1,N) *!* 6.程序内容*!* 1)本程序由一个主程序和六个子程序组成,主程序首先给定N,M,K值,然后定义数组维数*!* PARAMETER(N=,M=,K=)*!* DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N)*!* 主程序中提供自变量的初始值,输入已知参数及打印最后结果面*!* 2)各子程序的作用分别为了*!* CONSX—这是一个主要子程序,调用其它于程序及输出中间结果*!* CHECK—检查所有的点是否满足约束条件,对违背约束的点进行校正*!* CENTR—计算中心点*!* FUNC —目标函数,由用户提供*!* CONST—规定显式和隐式约束*!* RANDU—产生随机数*!**************************************************************************************** ******************PROGRAM COMPLEXPARAMETER(N=3,M=4,K=6)DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N)INTEGER GAMMAOPEN(4,FILE='COMPDATA')READ(4,*)ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTAREAD(4,*)(X(1,J),J=1,N)IX=2097151YFL=0.DO 100 II=2,KDO 100 JJ=1,NCALL RANDU(IX,YFL)R(II,JJ)=YFL100 CONTINUEOPEN(2,FILE='COMPDAT.OUT',STATUS='UNKNOWN')WRITE(2,10)10 FORMAT(//,10X,'COMPLEX PROGRAM OF BOX')WRITE(2,11)N,M,K,ITMAX,IPRINT,ALPHA,BETA,GAMMA,DELTA11 FORMAT(//,2X,'N=',I2,3X,'M=',I2,3X,'K=',I2,3X,'ITMAX=',I4,&/,2X,'IPRINT=',I2,2X,'ALPHA=',F10.4,5X,'BETA=',F10.5,&/,2X,'GAMMA=',I2,2X,'DELTA=',F10.5)IF(IPRINT)40,50,4040 WRITE(2,12)12 FORMAT(//,2X,'RANDOM NUMBERS')DO 200 J=2,KWRITE(2,13)(J,I,R(J,I),I=1,N)13 FORMAT(/,3(2X,'R(',I2,',',I2,')=',F6.4,2X))200 CONTINUE50 CALLCONSX(N,M,K,ITMAX,ALPHA,BETA,GAMMA,DELTA,X,R,F,IT,IEV2,G,H,XC, IPRINT)IF(IT-ITMAX)20,20,3020 WRITE(2,14)F(IEV2)14 FORMAT(/,2X,'FINAL VALUE OF THE FUNCTION=',E16.8)WRITE(2,15)15 FORMAT(/,2X,'FINAL X VALUES')DO 300 J=1,NWRITE(2,16)J,X(IEV2,J)16 FORMAT(/,2X,'X(',I2,')=',E20.8)300 CONTINUEGOTO 99930 WRITE(2,17)ITMAX17 FORMAT(/,2X,'THE NUMBER OF ITERATIONS HASEXCEEDED',I4,10X,'PROGRAM TERMINATED')999 STOPEND!**************************************************************************************** *****!* 这是一个主要子程序,调用其它于程序及输出中间结果*!**************************************************************************************** *****SUBROUTINECONSX(N,M,K,ITMAX,ALPHA,BETA,GAMMA,DELTA,X,R,F,IT,IEV2,G,H,XC, IPRINT)DIMENSION X(K,M),R(K,N),F(K),G(M),H(M),XC(N)INTEGER GAMMAIT=1KODE=0IF(M-N)20,20,1010 KODE=120 CONTINUEDO 40 II=2,KDO 30 J=1,N30 X(II,J)=0.040 CONTINUEDO 65 II=2,KDO 50 J=1,NI=IICALL CONST(N,M,K,X,G,H,I)X(II,J)=G(J)+R(II,J)*(H(J)-G(J))50 CONTINUEK1=IICALL CHECK(N,M,K,X,G,H,I,KODE,XC,DELTA,K1)IF(II-2)51,51,5551 IF(IPRINT)52,65,5252 WRITE(2,18)18 FORMAT(/,2X,'COORDINATES OF INITIAL COMPLEX')I0=1WRITE(2,19)(I0,J,X(I0,J),J=1,N)19 FORMAT(/,3(2X,'X(',I2,',',I2,')=',1PE13.6))55 IF(IPRINT)56,65,5656 WRITE(2,19)(II,J,X(II,J),J=1,N)65 CONTINUEK1=KDO 70 I=1,KCALL FUNC(N,M,K,X,F,I)70 CONTINUEKOUNT=1IA=0IF(IPRINT)72,80,7272 WRITE(2,21)21 FORMAT(/,2X,'VALUES OF THE FUNCTION')WRITE(2,22)(J,F(J),J=1,K)22 FORMAT(/,3(2X,'F(',I2,')=',E13.6))80 IEV1=1DO 100 ICM=2,KIF(F(IEV1)-F(ICM))100,100,9090 IEV1=ICM100 CONTINUEIEV2=1DO 120 ICM=2,KIF(F(IEV2)-F(ICM))110,110,120110 IEV2=ICM120 CONTINUEIF(F(IEV2)-(F(IEV1)+BETA))140,130,130130 KOUNT=1GOTO 150140 KOUNT=KOUNT+1IF(KOUNT-GAMMA)150,240,240! REPLACEMENT POINT WITH LOWEST FUNCTION VALUE 150 CALL CENTR(N,M,K,IEV1,I,XC,X,K1)DO 160 JJ=1,N160 X(IEV1,JJ)=(1.+ALPHA)*(XC(JJ))-ALPHA*(X(IEV1,JJ))I=IEV1CALL CHECK(N,M,K,X,G,H,I,KODE,XC,DELTA,K1)CALL FUNC(N,M,K,X,F,I)! REPLACEMENT NEW POINT IF IT REPEATS AS LOWEST FUNCTION VALUE170 IEV2=1DO 190 ICM=2,KIF(F(IEV2)-F(ICM))190,190,180180 IEV2=ICM190 CONTINUEIF(IEV2-IEV1)220,200,220200 DO 210 JJ=1,NX(IEV1,JJ)=(X(IEV1,JJ)+XC(JJ))/2.210 CONTINUEI=IEV1CALL CHECK(N,M,K,X,G,H,I,KODE,XC,DELTA,K1)CALL FUNC(N,M,K,X,F,I)GOTO 170220 CONTINUEIF(IPRINT)230,228,230230 WRITE(2,23)IT23 FORMAT(//,2X,'ITERATION NUMBER',I5)WRITE(2,24)24 FORMAT(/,2X,'COORDINATES OF CORRECTED POINT')WRITE(2,19)(IEV1,JC,X(IEV1,JC),JC=1,N)WRITE(2,21)WRITE(2,22)(I,F(I),I=1,K)WRITE(2,25)25 FORMAT(/,2X,'COORDINATES OF CCENTROID')WRITE(2,26)(JC,XC(JC),JC=1,N)26 FORMAT(/,3(2X,'X(',I2,',C)=',E14.6,4X))228 IT=IT+1IF(IT-ITMAX)80,80,240240 RETURNEND!*********************************************************************************** !* 检查所有的点是否满足约束条件,对违背约束的点进行校正。
复合形法matlab程序及例题
复合形法matlab程序及例题一、复合形法简介复合形法是一种求解非线性规划问题的方法,该方法由李连达在20世纪60年代发明,曾被广泛应用于实际生产中的工程问题。
该方法是通过构造不同大小和形状的简单多面体来搜索解决方案空间。
根据目标函数的变化趋势,复合形方法可以根据前一个顶点的坐标来确定新顶点,从而得到更好的解。
二、复合形法MATLAB程序1. 复合形法MATLAB基本编写格式:function [x,fval,exitflag,output] =fminsearch(fun,x0,options)Example:fun = @bivarfcn;[x,fval] = fminsearch(fun,[0,0])2. 复合形函数matlab代码展示:function[xmin,fval]=simplex(func,x)[n,m] = size(x);if n ~= m, error('x must be square!'); endx=[x eye(n)];y = feval(func,x(:,1));xlim = y;for j=2:n+1y = feval(func,x(:,j));if y < xlim, xlim = y; imin = j-1; endendxmax = y;for j=2:n+1y = feval(func,x(:,j));if y > xmax, xmax = y; kmax = j-1; endendfor i=1:10000xc = (sum(x(:,1:n),2)-x(:,n+1))/n;xr = 2*xc-x(:,n+1);yr = feval(func,xr);if yr < xlimxe = 3*xc-2*x(:,n+1);ye = feval(func,xe);if ye < yr, x(:,kmax+1) = xe; else x(:,kmax+1) = xr; endelseif yr < xmax x(:,kmax+1) = xr;xnew = (x(:,imin+1)+xc)/2; ynew = feval(func,xnew);if ynew < x(:,n+1) x(:,kmax+1) = xnew;else for j=1:n+1, if j ~= imin+1, x(:,j) = (x(:,j)-x(:,imin+1))/2+x(:,imin+1); end; end; endy = feval(func,x(:,1)); xlim = y; imin = 0;for j=2:n+1, y = feval(func,x(:,j)); if y < xlim, xlim = y; imin = j-1;end; end; xmax = y; for j=2:n+1, y = feval(func,x(:,j)); if y > xmax, xmax =y; kmax = j-1; end; end;endxmin = x(:,imin+1); fval = feval(func,xmina)3. 复合形法MATLAB例题:已知一个函数f(x1,x2)=-(1.4-x1^2)*(2.1-x2^2),求解f(x1,x2)的最小值以及使f(x1,x2)最小的点。
机械优化设计-复合型法
comple(2,3,3,0.00001,x,a,b,xcom,&f);
printf(" \n\n\n输出最优解及目标函数值:\n");
printf("\n x1=%.5f x2=%.5f f(x1,x2)=%.5f\n\n ",x[0],x[1],f);
(一)题目:用复合形法求约束优化问题
; ; 的最优解。
基本思路:在可行域中构造一个具有K个顶点的初始复合形。对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。
{
xs=0;
for(l=0;l<ll;l++)
{
if(l!=lΒιβλιοθήκη )xs=xs+xcom[i][l];
}
if(lh>-1)
x0[i]=xs/(ll-1);
else
x0[i]=xs/ll;
}
}
void fxse(int n,int k,double x[],double xcom[][100],double fxk[])
iw=gau(x,g,kg);
if(iw==0)
goto s5;
for(i=0;i<n;i++)
xcom[i][0]=x[i];
for(l=1;l<k;l++)
for(i=0;i<n;i++)
机械优化设计Matlab-优化工具箱基本用法
Matlab 优化工具箱x = bintprog (f , A, b, Aeq, Beq , x0, options ) 0—1规划 用MATLAB 优化工具箱解线性规划命令:x=linprog(c ,A ,b ) 2、模型:命令:x=linprog(c ,A ,b ,Aeq ,beq ) 注意:若没有不等式:存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ].min z=cX1、模型:3、模型:命令:[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解编写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)例2解: 编写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 (任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。
假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表.问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?解设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。
机械优化设计课后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程序
1.建立目标函数和约束条件
在机械优化设计中,目标函数是需要最小化或最大化的量,可以是机械结构的重量、成本、应力等。
约束条件是指机械结构必须满足的条件,例如最大应力、最小挠度等。
在MATLAB中通过函数来定义目标函数和约束函数。
2.选择优化算法
MATLAB提供了多种优化算法,例如遗传算法、粒子群算法、模拟退火算法等。
根据实际情况选择合适的优化算法。
3.设计参数和变量范围
机械结构的优化设计通常涉及到多个参数和变量,如尺寸、材料等。
在MATLAB中通过定义参数和变量范围来限制优化过程中的空间。
4.编写优化程序
在MATLAB中,可以使用优化工具箱的相关函数来编写机械优化设计程序。
程序的基本结构包括定义目标函数、约束函数、参数和变量范围,并选择合适的优化算法进行求解。
5.运行优化程序
在编写完成程序后,可以通过运行程序来开始优化过程。
MATLAB会根据设定的目标函数和约束条件进行,并最终得到最优解。
6.分析优化结果
优化程序运行完成后,可以通过MATLAB提供的分析工具对优化结果进行评估。
可以通过绘制图表、计算相关指标等方式对结果进行分析和比较。
7.进一步优化和改进
根据优化结果,可以对机械结构进行进一步优化和改进。
可以调整参数和变量范围,重新运行优化程序,直到得到满意的结果。
总之,以上是一种用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. 建立数学模型:根据机械系统的特点和要求,建立相应的数学模型。
[精品]机械优化设计及其MATLAB实现
[精品]机械优化设计及其MATLAB实现
机械设计优化是一种在构建机械系统时,通过设计方法和技术,使机械系统具有最佳性能特征的一类工程问题。
它不仅要求机械系统要具备结构合理、可行性强和功能合理等可行性特征,而且要求满足系统的性能优化约束,以达到最佳的功能和性能。
为了解决机械设计优化类问题,许多算法已经得到广泛的应用,例如遗传算法、粒子群算法、陡峭穿越法以及模拟退火算法。
这些算法具有计算简单、收敛速度快以及优化效果好等特点,因此已经广泛应用于机械设计优化中。
同时,结合MATLAB等强大的数值计算软件,可以加速优化问题的计算,快速有效地解决问题。
根据机械设计优化的研究进程,MATLAB对于此类问题的解决有着重要的作用。
MATLAB 支持多种优化算法,具有函数极小化技术、计算机辅助优化设计(CAD)和遗传算法、模拟退火算法和粒子群等多种算法技术,可用于求解大多数机械设计优化问题。
此外,MATLAB还提供了丰富的可视化工具,使我们可以对平面或空间机械结构进行可视化监控,从而更好地理解机械系统的效果以及优化结果的合理性。
总之,MATLAB是一款功能强大的数值计算软件,它的强大功能可以帮助机械工程师解决机械设计优化类问题,提升设计效率和工作效果,因此成为机械设计优化领域中经久不衰的重要工具之一。
机械优化设计matlab编程指导201_...
(一)matlab基本用法介绍5. 循环、结束命令¾break是直接跳出该层循环¾continue是直接进入该层循环的下一次迭代¾return是直接退出程序或函数返回大概的等级关系如下¾return>break>continue(二)matlab语法应用实例1. 循环的用法(用于优化迭代)%%%%%%%%%%%%%%%%%% while 循环i=0;while(i<10)i=i+1;end%%%%%%%%%%%%%%%%%% for 循环i=0;for j=1:10i=i+1;end%%%%%%%%%%%%%%%%%% break终止本层循环for i=1:2ik=0;for j=1:10k=k+1if k==5;break;endendend%%%%%%%%%%%%%%%%%% continue直接进入下一次循环变量的迭代k=0;for j=1:10k=k+1;if k==5;continue;endkend %注意,k=5时,后面的循环体未被执行,即k=5不显示在输出窗口中2 函数调用(利用外部m文件定义函数)(用于定义目标函数、约束函数、优化子程序等)建立wad2.m文件:function F1=wad2(x)F1=x(1)^2+x(2)^2;在主程序m文件中或者matlab的commond window中输入x0=[3 5]';fx0= wad2(x0)运行结果如下:fx0 = 34 ,得到了函数的值※另外函数中的F1也可以定义成向量。
3 全局变量(可用于优化过程中的重要参数定义,在程序任意部位都可以访问)建立wad3.m文件:function F1=wad3(x)global ac bcF1=ac*x(1)^2+bc*x(2)^2;在主程序m文件中定义x0=[3 5]';ac=0.2; bc=0.8;fx0= wad3(x0)结果:fx0 = 14.60004 判断语句(例如可以用于优化计算收敛的终止条件判断)k=2if k>3'yes k>3'else'no ,k<3'endif k==2'yes k=2'end5 数组(例如可以用于优化计算收敛的终止条件判断)% 1. 数组:matlab 程序以矩阵为运算单位,任何变量都是矩阵(数组)% 数组不需要声明,直接定义、使用即可a=[1 2 3]b=[ 1 2 34 5 6]c=b'; %求矩阵的转置矩阵b23=b(2,3) %取出矩阵b中第2行第3列元素x=[123]Hk=eye(4);% 生成4维的单位阵6 清屏clcclear7 二维绘图x=1:0.1:10;y1=sin(x);y2=cos(x);figure;plot(x,y1,'r');hold on;plot(x,y2,'b');grid on;xlabel('x axis'),ylabel('y axis');8 三维绘图x=1:0.1:10;y1=sin(x);y2=cos(x);z=x+cos(y1);figure;plot3(x,y1,z,'b');hold on;grid on;xlabel('x axis'),ylabel('y axis'),zlabel('z axis');9 二维等值线图%%对函数: F=(xk(1)-2)^4+(xk(1)-2*xk(2))^2; [x3,y3]=meshgrid(-5:0.2:10,-10:0.2:10);z3=(x3-2).^4+(x3-2*y3).^2;contour(x3,y3,z3,40);%目标函数的等值线hold on;axis equal;xlabel('自变量x1','FontSize',12);ylabel('自变量x2','FontSize',12);title('×××××××方法', 'FontSize',15);。
matlab在机械优化设计中的应用
matlab在机械优化设计中的应用一、引言随着科技的不断发展,机械优化设计在工程领域中得到了广泛的应用。
而在机械优化设计中,matlab作为一款强大的数学软件,在优化算法的实现和结果分析等方面具有很大的优势。
本文将探讨matlab在机械优化设计中的应用。
二、matlab在机械优化设计中的基础知识1. matlab基础知识Matlab是一种交互式数值计算环境和编程语言,可用于科学计算、数据分析和可视化等多个领域。
Matlab有着丰富的函数库和工具箱,可进行各种数学运算、统计分析、图像处理、信号处理等操作。
2. 机械优化设计基础知识机械优化设计是指通过运用数学模型和计算方法对机械结构进行全面分析和综合考虑,以达到最佳性能指标或最小成本等目标。
其中包括了多目标规划、遗传算法、神经网络等多种方法。
三、matlab在机械优化设计中的应用1. 优化算法实现Matlab提供了各种常见的数值计算方法和最优化方法,如线性规划、非线性规划、遗传算法等。
通过Matlab的函数库和工具箱,可以轻松地实现各种优化算法,并且可以根据具体需求进行自定义编程。
2. 结果分析Matlab在结果分析方面也有很大的优势。
通过Matlab的图形界面,可以绘制各种图表,如散点图、折线图、柱状图等。
同时,Matlab还提供了多种统计分析方法,如方差分析、回归分析等,可以对优化结果进行全面的统计分析。
3. 机械结构设计Matlab还可以用于机械结构设计。
通过建立机械结构模型,并运用Matlab中的有限元分析工具箱进行模拟计算,可以得到机械结构在不同载荷下的应力和变形情况。
这些数据可以进一步用于优化设计和结构改进。
4. 案例应用以一台压缩机为例,利用Matlab进行机械优化设计。
首先建立压缩机的数学模型,并根据实际需求设置相关参数和目标函数。
然后采用遗传算法对压缩机进行优化设计,并得到最佳设计方案。
最后利用Matlab中的有限元分析工具箱对最佳设计方案进行模拟计算,并得到应力和变形等数据。
机械优化设计MATLAB程序
机械优化设计MATLAB程序正文:⒈前言⑴研究背景机械优化设计是一种在机械工程领域中被广泛应用的方法,旨在通过使用数学模型和优化算法来改进机械系统的性能。
MATLAB是一种强大的数值计算和编程工具,可以用于开发机械优化设计程序。
⑵目的和范围⒉问题描述⑴设计需求在开始编写机械优化设计程序之前,需要明确设计需求,即需要实现的机械系统的性能指标或目标。
这些需求可以包括系统的功率、效率、噪声、振动等方面。
⑵优化目标根据设计需求,确定最终优化目标。
例如,通过调整机械系统的参数来最大化系统的效率、最小化系统的振动等。
⒊数学模型⑴设计变量设计变量是机械系统中可以调整的参数。
需要对设计变量进行定义和范围设定,以确保优化算法能够在合理的范围内搜索最优解。
⑵约束条件约束条件是在进行优化时必须满足的条件。
这些条件可以包括设计变量的边界条件、约束函数等。
在编写MATLAB程序时,需要将这些约束条件作为输入参数。
⒋算法选择与实现⑴优化算法选择根据优化目标和系统的特点,选择合适的优化算法。
常见的优化算法包括遗传算法、粒子群优化算法、模拟退火算法等。
⑵优化算法实现根据选择的优化算法,编写MATLAB程序实现优化过程。
程序应包括目标函数的定义、算法的参数设置、迭代过程和终止条件等。
⒌算法验证与结果分析⑴数据采集与处理在进行机械优化设计实验时,需要采集相应的实验数据,并对数据进行处理。
这些数据可以包括设计变量的调整情况、系统性能指标的变化等。
⑵结果分析基于采集到的数据,分析和比较不同优化算法的性能。
可以绘制图表展示优化过程和结果的变化,以便于进一步分析和优化。
⒍结论与展望总结机械优化设计MATLAB程序的设计过程和结果,对实验结果进行分析,并提出未来改进和研究的方向。
1、本文档涉及附件:附件1:MATLAB程序代码示例附件2:数据采集记录表2、本文所涉及的法律名词及注释:机械优化设计:指利用数学模型和优化算法改善机械系统性能的方法。
机械优化大作业-MATLAB复合型法
机床主轴机构优化设计机床主轴是机床中重要的零件之一,一般多为支撑空心阶梯轴。
为了便于使用材料力学进行结构分析,常常将阶梯轴简化成以当量直径表示的等截面轴。
如图0.1所示是一个已经简化处理的专用机床双主轴的力学模型。
从机床主轴制造成本较低和加工精度较高的要求出发,需要考虑主轴的自重和外身段挠度这样两个重要因素。
对于专用机床来说,并不追求过高的加工精度。
因此选取零件自身重量轻为设计目标,将主轴的刚度作为约束条件。
一、设计变量和目标函数当主轴的材料选定之后,与主轴重量设计方案有关设计变量主轴的外径D、孔径d、两支承跨度l、和外伸段长度a,如图0.1所示。
由于机床主轴的孔径主要取决于待加工棒料的直径,不能作为设计变量处理。
因此,设计变量为机床主轴重量最轻优化设计目标函数为二、约束条件1.刚度性条件机床的加工质量在很大程度上取决于主轴的刚度,主轴刚度是一个很重要的性能指标。
因此,要求主轴悬臂端挠度不超过给定的变形量y 0 。
根据材料力学可知,主轴悬臂端挠度为)()()(44231232d x E 3x x Fx 64EJ 3a l Fa y -+=+=π式中,)(44d -D 64J π=是空心主轴的惯性矩;E=2.1x105MPa 是主轴的弹性模量;F 是作用主轴外伸端的力。
整理得到主轴刚度的约束条件为0d x E 3x x Fx 64X g 442312301≥-+-=)()()(πy2.设计边界条件三个设计变量的边界约束条件为max min l l l ≤≤max min D D D ≤≤maxmin a a a ≤≤3.具体算例已知某机床主轴悬臂端受到的切削力F=15000N ,主轴内径d=30mm ,悬臂端许用挠度y 0=0.05mm 。
要求主轴两支承跨度mm lmm 650300≤≤,外径mm D mm 14060≤≤,悬臂长度mm a mm 15090≤≤。
建立优化的数学模型)30)((7854.0)(22231++=x x x X fTT a D l x x x X ],,[],,[321==0)30()(7009.91)(..44231231≥-+⨯-=x x x x X g t s01300/)(12≥-=x X g0650/1)(13≥-=x X g0160/)(24≥-=x X g0140/1)(25≥-=x X g0190/)(36≥-=x X g0150/1)(37≥-=x X g4.基于matlab 程序的复合形法实现优化(1)算法原理复合形法来源于无约束优化问题的单纯形法,通过构造复合形来求得最优解,新的复合形通过替换旧的复合形中的坏点(目标函数最大或次大的点)得到,替换方式仍是单纯性法中的反应、压缩、扩展这几个基本方法。
机械优化设计复合型法求解
复合型法实验报告一.复合形法求约束思想在可行区内构造一个具有k个顶点的初始复合形.对该复合形的顶点的目标函数值进行比较,找到目标函数值最大的顶点(称最坏点),然后按一定的法则求出目标函数值的所有下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点.二.程序框图三.程序#include<math.h>double objfx(double x[]){double ff;ff=(x[0]-5)*(x[0]-5)+4*(x[1]-6)*(x[1]-6);return ff;}#include<stdio.h>void main(){void comple(int n,int k,int kg,double ep,double x[],double bl[],double bu[], double xcom[][100],double *f) ;double a[]={0,0},b[]={10,20},f,x[2],xcom[2][100];comple(2,3,3,0.00001,x,a,b,xcom,&f);printf(" \n\n\n 输出最优解及目标函数值:\n");printf("\n x1=%.5f x2=%.5f f(x1,x2)=%.5f\n\n ",x[0],x[1],f); }#include <stdlib.h>#include <math.h>#include <stdio.h>double objfx(double x[]);void constraint(double x[],double g[]);void constraint(double x[],double g[]){g[0]=64-x[0]*x[0]-x[1]*x[1];g[1]=x[1]-x[0]-10;g[2]=x[0]-10;}int gau(double x[],double g[],int kg){int i;constraint(x,g);for(i=0;i<kg;i++){if(g[i]>0)goto s33;}return 1;s33:return 0;}void xcent(int n,int k,int ll,int lh,double x0[],double xcom[][100]) {int i,l;double xs;for(i=0;i<n;i++){xs=0;for(l=0;l<ll;l++){if(l!=lh)xs=xs+xcom[i][l];}if(lh>-1)x0[i]=xs/(ll-1);elsex0[i]=xs/ll;}}void fxse(int n,int k,double x[],double xcom[][100],double fxk[]) {int l,lp,lp1,i;double temp;for(l=0;l<k-1;l++)for(lp=0;lp<k-l;lp++){lp1=lp+1;if(fxk[lp]<=fxk[lp1]){temp=fxk[lp];fxk[lp]=fxk[lp1];fxk[lp1]=temp;for(i=0;i<n;i++){x[i]=xcom[i][lp];xcom[i][lp]=xcom[i][lp1];xcom[i][lp1]=x[i];}}}}void comple(int n,int k,int kg,double ep,double x[],double bl[],double bu[], double xcom[][100],double *f){int i,iw,l,ll,lh,it;double fx,fx0,sdx,fxh,fxr,alp;double *x0=(double*)calloc(n,sizeof(double));double *xh=(double*)calloc(n,sizeof(double));double *xr=(double*)calloc(n,sizeof(double));double *fxk=(double*)calloc(k,sizeof(double));double *g=(double*)calloc(kg,sizeof(double));s5: for(i=0;i<n;i++)x[i]=bl[i]+rand()/40000.0*(bu[i]-bl[i]);iw=gau(x,g,kg);if(iw==0)goto s5;for(i=0;i<n;i++)xcom[i][0]=x[i];for(l=1;l<k;l++)for(i=0;i<n;i++)xcom[i][l]=bl[i]+rand()/50000.0*(bu[i]-bl[i]);lh=-1;for(ll=1;ll<k;ll++){xcent(n,k,ll,lh,x0,xcom);iw=gau(x0,g,kg);if(iw==0)goto s5;for(i=0;i<n;i++)x[i]=xcom[i][ll+1];s24: iw=gau(x,g,kg);if(iw==0){for(i=0;i<n;i++)x[i]=x0[i]+0.5*(x[i]-x0[i]);goto s24;}else{for(i=0;i<n;i++)xcom[i][ll+1]=x[i];}}for(l=0;l<k;l++){for(i=0;i<n;i++)x[i]=xcom[i][l];fx=objfx(x);fxk[l]=fx;}it=0;s14: it=it+1;printf("\n\n\n N= %2d\n",it);lh=-1;xcent(n,k,k,lh,x0,xcom);fx0=objfx(x0);iw=gau(x0,g,kg);for(i=0;i<n;i++)printf(" X(%d)min=%.5f ",i+1,x0[i]);printf(" Fmin=%.5f\n",fx0);for(i=0;i<kg;i++)printf( " G(%d)min=%.5f",i,g[i]);sdx=0;for(l=0;l<k;l++)sdx=sdx+(fx0-fxk[l])*(fx0-fxk[l]);sdx=sqrt(sdx/(double)k);if(sdx<ep) goto s38;fxse(n,k,x,xcom,fxk);lh=0;s22: fxh=fxk[lh];for(i=0;i<n;i++)xh[i]=xcom[i][lh];xcent(n,k,k,lh,x0,xcom);iw=gau(x0,g,kg);if(iw==0)goto s36;alp=1.3;s12: for(i=0;i<n;i++)xr[i]=x0[i]+alp*(x0[i]-xh[i]);iw=gau(xr,g,kg);if(iw==0){alp=alp*0.5;goto s12;}fxr=objfx(xr);if(fxr>=fxh){if(alp>1.0e-4){alp=alp*0.5;goto s12;}lh=lh+1;if(lh<3)goto s22;}for(i=0;i<n;i++)xcom[i][lh]=xr[i];fxk[lh]=fxr;goto s14;s36: for(i=0;i<n;i++){bl[i]=xcom[i][k];bu[i]=x0[i];}goto s5;s38: for(i=0;i<n;i++)x[i]=x0[i];*f=objfx(x);free(x0);free(xh);free(xr);free(g);free(fxk);}四.程序结果。
机械优化设计——复合形方法及源程序
机械优化设计——复合形方法及源程序(一)题目:用复合形法求约束优化问题()()()2221645min -+-=x x x f ;06422211≤--=x x g ;01013≤-=x g 的最优解.基本思路:在可行域中构造一个具有K 个顶点的初始复合形。
对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点(即最坏点),然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。
(二)复合形法的计算步骤1)选择复合形的顶点数k,一般取n k n 21≤≤+,在可行域内构成具有k 个顶点的初始复合形。
2)计算复合形个顶点的目标函数值,比较其大小,找出最好点x L 、最坏点x H 、及此坏点x G .。
3)计算除去最坏点x H 以外的(k —1)个顶点的中心x C 。
判别x C 是否可行,若x C 为可行点,则转步骤4);若x C 为非可行点,则重新确定设计变量的下限和上限值,即令C L x b x a ==,,然后转步骤1),重新构造初始复合形。
4)按式()H C C R x x x x -+=α计算反射点x R,必要时改变反射系数α的值,直至反射成功,即满足式()()()()H R R j x f x f m j x g <⋯⋯=≤;,2,1,0,。
然后x R以取代x H,构成新的复合形。
5)若收敛条件()()[]ε≤⎪⎭⎪⎬⎫⎩⎨⎧--∑=211211k j L j x f x f k 得到满足,计算终止。
约束最优解为:()()L L x f x f x x ==*,*.(三)复合形法程序框图见下图:(四)/*输入值选择n=2,k=3,本程序可以处理n为2或3,k为3或4的情况*/#include 〈stdio。
h>#include 〈stdlib。
h〉#include 〈time.h>#include 〈math.h>#define E0 1e—5 /*复合形法收敛控制精度*/double **apply(int,int); /*申请矩阵空间*/double f(double *);/*目标函数*/double *g(double *);/*约束函数*/bool judge(double *); /*可行点的判断*/int main(){int n,k;int i,j,k1;int l;double temporary;double restrain; /*收敛条件*/double reflect; /*反射系数*/srand((unsigned)time(NULL));printf("请输入目标函数的维数n:"); /*输入已知数据*/scanf("%d",&n);printf(”请输入复合形的顶点数k:”);scanf(”%d",&k);double **x=apply(k,n);/*存放复合形顶点*/double *y=(double *)calloc(k,sizeof(double)); /*存放目标函数值*/double *p=(double *)calloc(3,sizeof(double)); /*存放约束函数值*/double *a=(double *)calloc(n,sizeof(double)); /*存放设计变量的下限*/double *b=(double *)calloc(n,sizeof(double)); /*存放设计变量的上限*/double *x_c=(double *)calloc(n,sizeof(double));/*存放可行点中心*/double *x_r=(double *)calloc(n,sizeof(double)); /*存放最坏点的反射点*/printf("本程序中的所有输入,两个数之间用空格隔开,然后按enter键时不要长时间的按,否则,可能会出错\n”);printf("请输入选定的第一个可行点x1(包含%d个数):",n);for(i=0;i〈n;i++)scanf("%lf”,*x+i);printf(”请输入初选变量的下限a(包含%d个数):”,n);for(i=0;i<n;i++)scanf("%lf",a+i);printf(”请输入初选变量的上限b(包含%d个数):",n);for(i=0;i〈n;i++)scanf(”%lf",b+i);printf(”输出输入结果为:\nn=%d,k=%d,x1=(",n,k);/*输出已知数据*/for(i=0;i<n—1;i++)printf("%.5lf ”,*(*x+i));printf(”%。
机械优化实例及matlab工具箱共56页文档
21、要知道对好事的称颂过于夸大,也会招来人们的反感轻蔑和嫉妒。——培根 22、业精于勤,荒于嬉;行成于思,毁于随。——韩愈
23、一切节省,归根到底都归结为时间的节省。——马克思 24、意志命运往往背道而驰,决心到最后会全部推倒。——莎士比亚
25、学习是劳动,是充满思想的劳动。——乌申斯基
谢谢!
机械优化实例及matlab工具箱
51、没有哪个社会可以制订一部永远 适用的 宪法律源于人的自卫本能。——英 格索尔
53、人们通常会发现,法律就是这样 一种的 网,触 犯法律 的人, 小的可 以穿网 而过, 大的可 以破网 而出, 只有中 等的才 会坠入 网中。 ——申 斯通 54、法律就是法律它是一座雄伟的大 夏,庇 护着我 们大家 ;它的 每一块 砖石都 垒在另 一块砖 石上。 ——高 尔斯华 绥 55、今天的法律未必明天仍是法律。 ——罗·伯顿
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机床主轴机构优化设计机床主轴是机床中重要的零件之一,一般多为支撑空心阶梯轴。
为了便于使用材料力学进行结构分析,常常将阶梯轴简化成以当量直径表示的等截面轴。
如图0.1所示是一个已经简化处理的专用机床双主轴的力学模型。
从机床主轴制造成本较低和加工精度较高的要求出发,需要考虑主轴的自重和外身段挠度这样两个重要因素。
对于专用机床来说,并不追求过高的加工精度。
因此选取零件自身重量轻为设计目标,将主轴的刚度作为约束条件。
一、设计变量和目标函数当主轴的材料选定之后,与主轴重量设计方案有关设计变量主轴的外径D、孔径d、两支承跨度l、和外伸段长度a,如图0.1所示。
由于机床主轴的孔径主要取决于待加工棒料的直径,不能作为设计变量处理。
因此,设计变量为机床主轴重量最轻优化设计目标函数为二、约束条件1.刚度性条件机床的加工质量在很大程度上取决于主轴的刚度,主轴刚度是一个很重要的性能指标。
因此,要求主轴悬臂端挠度不超过给定的变形量y 0 。
根据材料力学可知,主轴悬臂端挠度为)()()(44231232d x E 3x x Fx 64EJ 3a l Fa y -+=+=π式中,)(44d -D 64J π=是空心主轴的惯性矩;E=2.1x105MPa 是主轴的弹性模量;F 是作用主轴外伸端的力。
整理得到主轴刚度的约束条件为0d x E 3x x Fx 64X g 442312301≥-+-=)()()(πy2.设计边界条件三个设计变量的边界约束条件为max min l l l ≤≤max min D D D ≤≤maxmin a a a ≤≤3.具体算例已知某机床主轴悬臂端受到的切削力F=15000N ,主轴内径d=30mm ,悬臂端许用挠度y 0=0.05mm 。
要求主轴两支承跨度mm lmm 650300≤≤,外径mm D mm 14060≤≤,悬臂长度mm a mm 15090≤≤。
建立优化的数学模型)30)((7854.0)(22231++=x x x X fTT a D l x x x X ],,[],,[321==0)30()(7009.91)(..44231231≥-+⨯-=x x x x X g t s01300/)(12≥-=x X g0650/1)(13≥-=x X g0160/)(24≥-=x X g0140/1)(25≥-=x X g0190/)(36≥-=x X g0150/1)(37≥-=x X g4.基于matlab 程序的复合形法实现优化(1)算法原理复合形法来源于无约束优化问题的单纯形法,通过构造复合形来求得最优解,新的复合形通过替换旧的复合形中的坏点(目标函数最大或次大的点)得到,替换方式仍是单纯性法中的反应、压缩、扩展这几个基本方法。
(2)算法步骤其程序框图如下:(3)算法的MATLAB 实现在MATLAB 中利用编程语句编写实现复合形法的函数,命名:jiangfun.m 功能:用复合形法求解约束多为函数的极值调用格式:[x,minf]= jiangfun(f,g,X,alpha,sita,gama,beta,var,eps) 其中符号表示如下:由目标函数级约束条件,取初始复合形)100,90,325(0=x )95,120,380(1=x)120,100,500(2=x )130,135,600(3=x取α(反射系数)=1.2,β(收缩系数)=0.3,θ(紧缩系数)=0.5,γ(扩展系数)=2。
在MATLAB 中输入下列命令 >>syms s t r>>f=0.7854*(s+r)*(t^2-900);>>g=[1-9.7009*r^2*(s+r)/(t^4-30^4);s/300-1;1-s/650;t/60-1;1-t/140;r/90-1;1-r/150];>>X=[325 380 500 600;90 120 100 135;100 95 120 130]; >>[x,minf]=jiangfun(f,g,X,1.2,0.5,8,0.3,[s t r])所得结果为:x =300.035775.244290.0013Minf = 1458663.2594可以得出结论当l=300.0357mm,D=75.2442mm,a=90.0013mm时可以在满足刚度性能的条件下,得到最小的结构体积Minf=1458663.2594mm3 再乘以所选材料的密度,即可得出最小质量。
5、总结复合形法作为求解最优化问题的一种算法,较为适合解决有约束优化问题。
使用该法仅需比较目标函数值即可决定搜索方向,算法较简单,对目标函数的要求不苛刻。
同时利用MATLAB实现该方法的程序设计,较之C语言互换性以及通用性强,使用方便。
引用:《优化设计应用》——电子工业出版社附录I:MATLAB实现复合形算法源程序附录I:MATLAB实现复合形算法源程序function [x,minf]= jiangfun(f,g,X,alpha,sita,gama,beta,var,eps) %目标函数:f%约束函数:g%初始复合形:X%反射系数:alpha%紧缩系数:sita%扩展系数:gama%收缩系数:beta%自变量向量:var%自变量精度:eps%目标函数最小值时的自变量值:x%目标函数的最小值:minfif nargin == 8eps = 1.0e-6;endN = size(X);n = N(2);FX = zeros(1,n);while 1for i=1:nFX(i) = subs(f,var,X(:,i));end %将复合形法的顶点排序[XS,IX] = sort(FX);Xsorted = X(:,IX);px = sum(Xsorted(:,1:(n-1)),2)/(n-1); %复合形前n个点的中心Fpx= subs(f,var,px);SumF = 0;for i=1:nSumF = SumF + (FX(IX(i))-Fpx)^2;endSumF = sqrt(SumF/n);if SumF <= epsx = Xsorted(:,1); %精度判断break;elsebcon_1 = 1;cof_alpha = alpha;while bcon_1x2 = px + cof_alpha*(px - Xsorted(:,n));%反射条件gx2 = subs(g,var,x2);if min(gx2)>=0bcon_1 = 0;elsecof_alpha = sqrt(cof_alpha); %以开方的方式减小反射系数 endendfx2 = subs(f,var,x2);if fx2 < XS(1)cof_gama = gama;bcon_2 = 1;while bcon_2x3 = px + cof_gama*(x2 - px); %扩展操作gx3 = subs(g,var,x3);if min(gx3)>=0bcon_2 = 0;elsecof_gama = sqrt(cof_gama); %采用开方的方式减小扩展系数 endendfx3 = subs(f,var,x3);if fx3 < XS(1)Xsorted(:,n) = x3;X = Xsorted;continue;elseXsorted(:,n) = x2;X = Xsorted;continue;endelseif fx2 < XS(n-1)Xsorted(:,n) = x2;X = Xsorted;continue;elseif fx2 < XS(n)Xsorted(:,n) = x2;endcof_beta = beta;bcon_3 = 1;while bcon_3x4 = px + cof_beta*(Xsorted(:,n) - px);%收缩操作gx4 = subs(g,var,x4);if min(gx4)>=0__________________________________________________ bcon_3 = 0;elsecof_beta = cof_beta/2; %减小收缩系数endendfx4 = subs(f,var,x4);FNnew = subs(f,var,Xsorted(:,n));if fx4 < FNnewXsorted(:,n) = x4;X = Xsorted;continue;elsex0 = Xsorted(:,1);for i=1:nXsorted(:,j) = x0 + sita*(Xsorted(:,j) - x0); %对复合形进行收缩endendendendendX = Xsorted;endminf = subs(f,var,x)__________________________________________________。