当前位置:文档之家› 机械优化设计MATLAB程序

机械优化设计MATLAB程序

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

在 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)3.用牛顿法、阻尼牛顿法及变尺度法求函数 的极小点。

( ) ( ) ( )2112122, xxxxxf -+-= 4 2 (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)用阻尼牛顿法在 MA TLAB 的 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;%停机原则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;-11],[-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;2 breakotherwiseg1=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;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.用鲍威尔法求函数 f (x 1, x 2 )= x 1+ 2x 2 - 4x 1 - 2x 1x 2 的极小点。

用鲍威尔法在 MA TLAB 的 M 文件编辑器中编写的 M 文件,如下: function [x,fx,k]=bowell(A,b,c,x0)%鲍威尔法d01=[1;0];d02=[0;1];x02=[0;0];esp=1e-12;%停机原则k=0;%迭代次数while norm(x0-x02)>=espk=k+1;⎨ =+++ 535.22.. ⎪ =≥ )4,3,2,1(0 jx g01=A*x0+b;a01=-d01'*g01/(d01'*A*d01);x01=x0+a01*d01;g02=A*x01+b;a02=-d02'*g02/(d02'*A*d02);x02=x01+a02*d02;d10=x02-x0;g10=A*x02+b;a10=-d10'*g10/(d10'*A*d10);x10=x0+a01*d01;d01=d02;d02=d10;x0=x10;endx=x0;fx=0.5*x'*A*x+b'*x+c;运行结果如下:[x,fx,k]=bowell([2 -2;-2 4],[-4;0],0,[2;1])fx =-8x =42fx =-8k =36.用单纯形法求线性规划问题min f (x ) = -1.1x 1 - 2.2x 2 + 3.3x 3 - 4.4x 4⎧x 1 + x 2 + x 3 = 4 ⎪ ⎩ j 用单纯形法在 MA TLAB 的 M 文件编辑器中编写的 M 文件,如下: %单纯形法 matlab 程序-danchunxingfa% 求解标准型线性规划:max c*x; s.t. A*x=b; x>=0% 本函数中的 A 是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量 b % N 是初始的基变量的下标% 输出变量 sol 是最优解, 其中松弛变量(或剩余变量)可能不为 0 % 输出变量 val 是最优目标值,kk 是迭代次数function [sol,val,kk]=danchunxingfa(A,N)[mA,nA]=size(A);kk=0; % 迭代次数flag=1;while flagkk=kk+1;if A(mA,:)<=0%已找到最优解flag=0;sol=zeros(1,nA-1);for i=1:mA-1sol(N(i))=A(i,nA);endval=-A(mA,nA);elsefor i=1:nA-1if A(mA,i)>0&A(1:mA-1,i)<=0%问题有无界解disp('have infinite solution!');flag=0;break;endendif flag%还不是最优表,进行转轴运算temp=0;for i=1:nA-1if A(mA,i)>temptemp=A(mA,i);inb=i;%进基变量的下标endendsita=zeros(1,mA-1);for i=1:mA-1if A(i,inb)>0sita(i)=A(i,nA)/A(i,inb);endendtemp=inf;for i=1:mA-1if sita(i)>0&sita(i)<temptemp=sita(i);outb=i;%出基变量下标endend%以下更新Nfor i=1:mA-1if i==outbN(i)=inb;end⎪ =++ 300103xxx ⎩ end% 以下进行转轴运算A(outb,:)=A(outb,:)/A(outb,inb);for i=1:mAif i~=outbA(i,:)=A(i,:)-A(outb,:)*A(i,inb);endendendendend ;令g (x ) = 1.1x 1 + 2.2x 2 - 3.3x 3 + 4.4x 4 ,则求 min f (x ) = -1.1x 1 - 2.2x 2 + 3.3x 3 - 4.4x 4 就变成求 - max g (x ),即min f (x ) = - max g (x ).运行结果如下:>> A=[1 1 1 0 4;1 2 2.5 3 5;1.12.2 -3.34.4 0];N=[3;4];[sol,val,kk]=danchunxingfa (A,N) sol =0 4.0000 1.6667 val =7.3333kk =2所以, 经两次转轴运算,得到的最优解为x 1 = x 2 = 0, x 3 = 4.0000, x 4 = 1.667, min f (x ) = -7.33337. 求解线性规划问题min z = -7x 1 -12x 2⎧9x 1 + 4x 2 + x 3 = 360 ⎪4x 1 + 5x 2 + x 4 = 200 s .t .⎨ ⎪x j ≥ 0( j = 1,2,3,4,5)用单纯形法在 MATLAB 的 M 文件编辑器中编写的 M 文件,如下: %单纯形法 matlab 程序-danchunxingfa% 求解标准型线性规划:max c*x; s.t. A*x=b; x>=0% 本函数中的 A 是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量 b % N 是初始的基变量的下标% 输出变量 sol 是最优解, 其中松弛变量(或剩余变量)可能不为 0 % 输出变量 val 是最优目标值,kk 是迭代次数function[sol,val,kk]=danchunxingfa(A,N)[mA,nA]=size(A);kk=0;%迭代次数flag=1;while flagkk=kk+1;if A(mA,:)<=0%已找到最优解flag=0;sol=zeros(1,nA-1);for i=1:mA-1sol(N(i))=A(i,nA);endval=-A(mA,nA);elsefor i=1:nA-1if A(mA,i)>0&A(1:mA-1,i)<=0%问题有无界解disp('have infinite solution!');flag=0;break;endendif flag%还不是最优表,进行转轴运算temp=0;for i=1:nA-1if A(mA,i)>temptemp=A(mA,i);inb=i;%进基变量的下标endendsita=zeros(1,mA-1);for i=1:mA-1if A(i,inb)>0sita(i)=A(i,nA)/A(i,inb);endendtemp=inf;for i=1:mA-1if sita(i)>0&sita(i)<temptemp=sita(i);outb=i;%出基变量下标endend%以下更新Nfor i=1:mA-1if i==outbN(i)=inb;endend%以下进行转轴运算A(outb,:)=A(outb,:)/A(outb,inb);for i=1:mAif i~=outbA(i,:)=A(i,:)-A(outb,:)*A(i,inb);endendendendend;运行结果如下:令Y=7x1+12x2,则求minz=7x1-12x2可转变为求-maxY,即minz=-maxY.>>A=[94100360;45010200;310001300;7120000];N=[3;4;5];[sol,val,kk]=danchunxingfa(A,N)sol=20248400val=420kk=3所以,经3次转轴运算,得到的最优解为x1=20,x2=24,x3=84,x4=x5=0,min z=-420.。

相关主题