机械优化设计MATLAB程序.docx

上传人:b****5 文档编号:12278830 上传时间:2023-04-17 格式:DOCX 页数:7 大小:18.10KB
下载 相关 举报
机械优化设计MATLAB程序.docx_第1页
第1页 / 共7页
机械优化设计MATLAB程序.docx_第2页
第2页 / 共7页
机械优化设计MATLAB程序.docx_第3页
第3页 / 共7页
机械优化设计MATLAB程序.docx_第4页
第4页 / 共7页
机械优化设计MATLAB程序.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

机械优化设计MATLAB程序.docx

《机械优化设计MATLAB程序.docx》由会员分享,可在线阅读,更多相关《机械优化设计MATLAB程序.docx(7页珍藏版)》请在冰豆网上搜索。

机械优化设计MATLAB程序.docx

机械优化设计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)  ift2f4

  f1=f2;t1=t2;  t2=t4;f2=f4;  else

  f3=f4;t3=t4;  end  else

  iff2>f4

  f3=f2;t3=t2;  t2=t4;f2=f4;  else

  f1=f4;t2=t4;  end  end

  c1=(f3-f1)/(t3-t1);

  c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);  t4=*(t1+t3-c1/c2);f4=f(t4);  k=k+1;end

  %输出最优解iff2>f4

  t=t4;f=f(t4);else

  t=t2;f=f(t2);end

  fprintf(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;

  whileabs(b-a)>=epsilon  iff1epson)  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=  

  fx=k=23

  

(2)用阻尼牛顿法在MATLAB的M文件xx器中编写的M文件,如下:

  function[x,fx,k]=zuniniudunfa(x0)%阻尼牛顿法symsx1x2

  f=(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=

  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+ceps=1e-6;%迭代停机原则

  %fx=*x0'.*A.*x0+b'.*x0+c;r0=A*x0+b;ifnorm(r0)eps

  beta=(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=*x'*A*x+b'*x+c;

  运行结果如下:

  [y,x,k]=CG([3-1;-11],[-2;0],0,[2;1])y=-1

  x=  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)switchk  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  otherwise

  g1=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=*x1'*A*x1+b'*x1+c;

  运行结果如下:

  》[x,fx,k]=bianchidufa([3-1;-11],[-2;0],0,[2;1])H1=

  fx=  -1x=

  fx=  -1k=  1

  故函数极小点是点

  25.用鲍威尔法求函数fx1,x2x122x24x12x1x2的极小点。

  用鲍威尔法在MATLAB的M文件xx器中编写的M文件,如下:

  function[x,fx,k]=bowell(A,b,c,x0)%鲍威尔法d01=[1;0];d02=[0;1];x02=[0;0];esp=1e-12;%停机原则k=0;%迭代次数

  whilenorm(x0-x02)>=esp  k=k+1;  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=*x'*A*x+b'*x+c;

  运行结果如下:

  [x,fx,k]=bowell([2-2;-24],[-4;0],0,[2;1])fx=  -8x=  4  2fx=  -8k=  3

  6.用单纯形法求线性规划问题

  minf(x)x1x2x34x12x23x45x0(j1,2,3,4)j%单纯形法matlab程序-danchunxingfa

  %求解标准型线性规划:

maxc*x;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;whileflag

  用单纯形法在MATLAB的M文件xx器中编写的M文件,如下:

  kk=kk+1;

  ifA(mA,:

)0&A(1:

mA-1,i)temp  temp=A(mA,i);  inb=i;%进基变量的下标  end  end

  sita=zeros(1,mA-1);  fori=1:

mA-1  ifA(i,inb)>0

  sita(i)=A(i,nA)/A(i,inb);  end  end

  temp=inf;  fori=1:

mA-1  

  ifsita(i)>0&sita(i)>A=[11104;  12  35;

  -  0];N=[3;4];[sol,val,kk]=danchunxingfa(A,N)sol=

  0  0  val=

  kk=  2所以。

  经两次转轴运算,得到的最优解为x1x20,x3,x4,minf(x)

  7.求解线性规划问题

  minz7x112x29x14x2x33604x5xx200  3x110x2x5300xj0(j1,2,3,4,5)用单纯形法在MATLAB的M文件xx器中编写的M文件,如下:

  %单纯形法matlab程序-danchunxingfa

  %求解标准型线性规划:

maxc*x;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;whileflag  kk=kk+1;

  ifA(mA,:

)0&A(1:

mA-1,i)temp  temp=A(mA,i);  inb=i;%进基变量的下标  end  end

  sita=zeros(1,mA-1);  fori=1:

mA-1  ifA(i,inb)>0

  sita(i)=A(i,nA)/A(i,inb);  end  end

  temp=inf;  fori=1:

mA-1  

  ifsita(i)>0&sita(i)>A=[94100360;  45010200;  310001300;

  7120000];  N=[3;4;5];  [sol,val,kk]=danchunxingfa(A,N)sol=

  20  24  84  0  0val=  420kk=  3

  所以,经3次转轴运算,得到的最优解为

  x120,x224,x384,x4x50,minz420.

  end  end

  %以下进行转轴运算  

  A(outb,:

)=A(outb,:

)/A(outb,inb);  fori=1:

mA

  ifi~=outb  

  A(i,:

)=A(i,:

)-A(outb,:

)*A(i,inb);  end  end  end  endend;

  运行结果如下:

  令Y7x112x2,则求minz7x112x2可转变为求maxY,即minz-maxY.

  >>A=[94100360;  45010200;  310001300;

  7120000];  N=[3;4;5];  [sol,val,kk]=danchunxingfa(A,N)sol=

  20  24  84  0  0val=  420kk=  3

  所以,经3次转轴运算,得到的最优解为

  x120,x224,x384,x4x50,minz420.

  机械优化设计作业

  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)  ift2f4

  f1=f2;t1=t2;  t2=t4;f2=f4;  else

  f3=f4;t3=t4;  end  else

  iff2>f4

  f3=f2;t3=t2;  t2=t4;f2=f4;  else

  f1=f4;t2=t4;  end  end

  c1=(f3-f1)/(t3-t1);

  c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);  t4=*(t1+t3-c1/c2);f4=f(t4);  k=k+1;end

  %输出最优解iff2>f4

  t=t4;f=f(t4);else

  t=t2;f=f(t2);end

  fprintf(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;

  whileabs(b-a)>=epsilon  iff1epson)  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=  

  fx=k=23

  

(2)用阻尼牛顿法在MATLAB的M文件xx器中编写的M文件,如下:

  function[x,fx,k]=zuniniudunfa(x0)%阻尼牛顿法symsx1x2

  f=(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=

  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+ceps=1e-6;%迭代停机原则

  %fx=*x0'.*A.*x0+b'.*x0+c;r0=A*x0+b;ifnorm(r0)eps

  beta=(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=*x'*A*x+b'*x+c;

  运行结果如下:

  [y,x,k]=CG([3-1;-11],[-2;0],0,[2;1])y=-1

  x=  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)switchk  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  otherwise

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1