机械优化设计MATLAB程序文件
完整版优化设计Matlab编程作业
化设计hl4HU©0⑥ 3 hlu 凹内r d X1州fci-rU-fFF卢F ♦ 忡下¥为+1 —*— S-ll-« F41:Si —MATLABoftiHMirjirCfiffliiiiJ PHI■1**■ 温不平?」11,・—喜M - 〜FT 文词一时y 片 34ml 3F*L9TR0i. Jill!-LkftLgWf 1S1CSI掰f 1 ■ >A A A »W I % :k Dnfl w I ■ J k^lXMprfaMk tjn nn Alflhw初选 x0=[1,1] 程序:Step 1: Write an Mfle objfunl.m.function f1=objfun1(x)f1=x(1)人2+2*x(2)入2-2*x(1)*x(2)-4*x(1);Step 2: Invoke one of the unconstrained optimization routinesx0=[1,1];>> options = 0Ptimset('LargeScale','off);>> [x,fval,exitflag,output] = fminunc(@objfun1,x0,options)运行结果: x =4.0000 2.0000 fval = -8.0000exitflag =1 output = iterations: 3 funcCount: 12 stepsize: 1 firstorderopt: 2.3842e-007algorithm: 'medium-scale: Quasi-Newton line search message: [1x85 char]非线性有约束优化1. Min f(x)=3 x : + x 2+2 x 1-3 x 2+5 Subject to:g 2(x)=5 X 1-3 X 2 -25 < 0 g (x)=13 X -41 X 2 < 0 3 12g 4(x)=14 < X 1 < 130无约束优化 min f(x)=X 2 + x 2-2 x 1 x 2-4 x 1g5 (x)=2 < X 2 < 57初选x0=[10,10]Step 1: Write an M-file objfun2.mfunction f2=objfun2(x)f2=3*x(1)人2+x(2)人2+2*x(1)-3*x(2)+5;Step 2: Write an M-file confunl.m for the constraints. function [c,ceq]=confun1(x) % Nonlinear inequality constraints c=[x(1)+x(2)+18;5*x(1)-3*x(2)-25;13*x(1)-41*x(2)人2;14-x(1);x(1)-130;2-x(2);x(2)-57];% Nonlinear inequality constraints ceq=[];Step 3: Invoke constrained optimization routinex0=[10,10]; % Make a starting guess at the solution>> options = optimset('LargeScale','off);>> [x, fval]=...fmincon(@objfun2,x0,[],[],[],[],[],[],@confun1,options)运行结果:x =3.6755 -7.0744 fval =124.14952.min f (x) =4x2 + 5x2s.t. g 1(x) = 2X] + 3x2- 6 < 0g (x) = x x +1 > 0初选x0=[1,1]Step 1: Write an M-file objfun3.m function f=objfun3(x) f=4*x(1)人2 + 5*x(2)人2Step 2: Write an M-file confun3.m for the constraints. function [c,ceq]=confun3(x) %Nonlinear inequality constraints c=[2*x(1)+3*x(2)-6;-x(1)*x(2)-1];% Nonlinear equality constraints ceq口;Step 3: Invoke constrained optimization routinex0=[1,1];% Make a starting guess at the solution>> options = optimset('LargeScale','off);>> [x, fval]=...fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options)运行结果:Optimization terminated: no feasible solution found. Magnitude of search direction less than2*options.TolX but constraints are not satisfied.x =11fval =-13实例:螺栓连接的优化设计图示为一压气机气缸与缸盖连接的示意图。
机械优化设计论文(基于MATLAB工具箱的机械优化设计)
基于MATLAB工具箱的机械优化设计长江大学机械工程学院机械11005班刘刚摘要:机械优化设计是一种非常重要的现代设计方法,能从众多的设计方案中找出最佳方案,从而大大提高设计效率和质量。
本文系统介绍了机械优化设计的研究内容及常规数学模型建立的方法,同时本文通过应用实例列举出了MATLAB 在工程上的应用。
关键词:机械优化设计;应用实例;MATLAB工具箱;优化目标优化设计是20世纪60年代随计算机技术发展起来的一门新学科, 是构成和推进现代设计方法产生与发展的重要内容。
机械优化设计是综合性和实用性都很强的理论和技术, 为机械设计提供了一种可靠、高效的科学设计方法, 使设计者由被动地分析、校核进入主动设计, 能节约原材料, 降低成本, 缩短设计周期, 提高设计效率和水平, 提升企业竞争力、经济效益与社会效益。
国内外相关学者和科研人员对优化设计理论方法及其应用研究十分重视, 并开展了大量工作, 其基本理论和求解手段已逐渐成熟。
国内优化设计起步较晚, 但在众多学者和科研人员的不懈努力下, 机械优化设计发展迅猛, 在理论上和工程应用中都取得了很大进步和丰硕成果, 但与国外先进优化技术相比还存在一定差距, 在实际工程中发挥效益的优化设计方案或设计结果所占比例不大。
计算机等辅助设备性能的提高、科技与市场的双重驱动, 使得优化技术在机械设计和制造中的应用得到了长足发展, 遗传算法、神经网络、粒子群法等智能优化方法也在优化设计中得到了成功应用。
目前, 优化设计已成为航空航天、汽车制造等很多行业生产过程的一个必须且至关重要的环节。
一、机械优化设计研究内容概述机械优化设计是一种现代、科学的设计方法, 集思考、绘图、计算、实验于一体, 其结果不仅“可行”, 而且“最优”。
该“最优”是相对的, 随着科技的发展以及设计条件的改变, 最优标准也将发生变化。
优化设计反映了人们对客观世界认识的深化, 要求人们根据事物的客观规律, 在一定的物质基和技术条件下充分发挥人的主观能动性, 得出最优的设计方案。
机械优化设计
机械优化设计matlab优化设计程序学校:班级:学号:姓名:指导老师:一.进退法求最优点所在区间1.算例:函数:f=x(1)^3+x(2)^2-10*x(1)*x(2)+1;初始参数:x0=0,step=0.01,st=[0,0],sd=[1,1];2.编程代码:function [lb,ub]=jintuifa(x0,step0,st,sd)% lb为区间下限,up为区间上限% x0初始探测点,step0是初始探测步长,st初始搜索点,sd是初始搜索方向step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)f=x(1)^3+x(2)^2-10*x(1)*x(2)+1;end3.运行结果二.黄金分割法求最求最优值1.eg:函数:f=x^2+2*x;初始参数:a=-3,b=5,e=0.0001;2.编程代码:function [ans,sp]=golden(a,b,e)%[a,b]初始区间,e为最小区间长度要求%ans为最优解,sp为所需迭代次数a(1)=a;b(1)=b;L=e;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;m(1)=feval('f1',t(1));n(1)=feval('f1',u(1));while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endm(k+1)=feval('f1',t(k+1));n(k+1)=feval('f1',u(k+1));ans=feval('f1',t(k+1));k=k+1;endans=(a(k)+b(k))/2;sp=k-1;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y=f1(x)y=x^2+2*x;end3.运行结果三.无约束优化方法——坐标轮换法1.eg:函数:min f(x)=4*(x(1)-5)^2+(x(2)-6)^2;初始参数:初始点x为[8,9];2.编程代码:function [x,f]=lunhuan(x0)%输入初始点x0[8,9]%输出最优解点x,与最优解值fp=1;h=0.000001;x=x0;while(p>h)%做精度比较w=x(1);q=x(2);d1=[1,0];a1=golden('objfun',x,d1);%黄金分割法求最佳步长 x=x+a1*d1;d2=[0,1];a2=golden('objfun',x,d2);x=x+a2*d2;p=sqrt((x(1)-w)^2+(x(2)-q)^2);endf=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)%函数名f=4*(x(1)-5)^2+(x(2)-6)^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd)%进退法函数x0=0;step0=0.000001;step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(f_name,st,sd)[a,b]=jintuifa(st,sd); %进退法求最佳步长区间a(1)=a;b(1)=b;L=0.1;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd;q=st+u(1)*sd;m(1)=feval(f_name,p);n(1)=feval(f_name,q);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd;z=st+u(k+1)*sd;m(k+1)=feval(f_name,w);n(k+1)=feval(f_name,z);ans=feval(f_name,w);k=k+1;endt(k)=0;u(k)=0;m(k)=0;n(k)=0;p=[a',b',t',u',m',n'];ans=(a(k)+b(k))/2;end3.运行结果四.无约束优化方法——鲍威尔法1.eg:函数:min f(x)=4*(x(1)-5)^2+(x(2)-6)^2;初始参数:初始点x为[8,9],初始搜索方向[0,1],[1,0];2.编程代码:function [x,f]=powill(x0,d1,d2)%输入x0为初始点,d1,d2为两个线性无关向量for k=1:2w=x0(1);q=x0(2);a1=golden('objfun',x0,d1);x1=x0+a1*d1;a2=golden('objfun',x1,d2);x2=x1+a2*d2;d1=d2;d2=x2-x0;a3=golden('objfun',x2,d2);x3=x2+a3*d2;x0=x3;endx=x0;f=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=objfun(x)f=4*(x(1)-5)^2+(x(2)-6)^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd)x0=0;step0=0.0001;step=step0;f0=jintui(x0,st,sd);x1=x0+step0;f1=jintui(x1,st,sd);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2;f1=f0;f0=f2;endendend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd)f=objfun(st+a.*sd);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(f_name,st,sd)[a,b]=jintuifa(st,sd);a(1)=a;b(1)=b;L=0.1;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd;q=st+u(1)*sd;m(1)=feval(f_name,p);n(1)=feval(f_name,q);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd;z=st+u(k+1)*sd;m(k+1)=feval(f_name,w);n(k+1)=feval(f_name,z);ans=feval(f_name,w);k=k+1;endend3.运行结果五.有约束优化方法——复合形法1.eg:函数:min f(x)=x1^2+x2^2-x1*x2-10*x1-4*x2+60 St:g1(x)=-x1≤0g2(x)=-x2≤0g3(x)=x1-6≤0g4(x)=x2-8≤0g5(x)=x1+x2-11≤02.编程代码:function fuhexing(n,b,h,xb1,xb2)%元素数n,初始可行点b,精度h,xb1横坐标上下界,xb2为纵坐标上下界if (rem(n,2)==0)k=n+n/2;elsek=n+(n+1)/2;end%取k值A=kexingdian(k,xb1,xb2,b');%确定可行点A=mubiao(A,n,k,h);%求出目标函数并排序比较,得出最优解End %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function A=mubiao(A,n,k,h)for i=1:kA(3,i)=objfun(A(:,i));endB=A';%根据目标函数值排序A=sortrows(B,3)';p=0;for j=1:kx=(objfun(A(:,j))-objfun(A(:,1)))^2;p=p+x;endo=sqrt(p/(k-1));%收敛条件if(o<h)%判断所求点是否为最优点disp('最优点为')xz(1)=A(1,1);xz(2)=A(2,1);disp(xz);disp('其函数值为')f=A(3,1);disp(f);elsexr=Xcpanduan(A,k,n,h,1.3);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function A=kexingdian(k,xb1,xb2,b)A=zeros(3,k);A(1,1)=b(1);A(2,1)=b(2);for i=2:kA(1,i)=xb1(1)+rand(1)*(xb1(2)-xb1(1));A(2,i)=xb2(1)+rand(1)*(xb2(2)-xb2(1));%产生j个顶点endt=0;for j=1:kif(A(1,j)+A(2,j)<=11&&A(1,j)<=6&&A(2,j)<=8)%判断是否有不可行点t=t+1;T(:,t)=A(:,j);endendif(t<k)%计算出可行点的中心位置xcxc=zhongxindian(T,t);endt=0;for j=1:k%利用中心点将原不可行点逼近为可行点while(A(1,j)+A(2,j)>11||A(1,j)>6||A(2,j)>8)A(:,j)=xc+0.5*(A(:,j)-xc);endendendx=x0;f=objfun(x);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function f=objfun(x)f= x1^2+x2^2-x1*x2-10*x1-4*x2+60;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xc=Xcpanduan(A,k,n,h,a)for i=1:k-1T(:,i)=A(:,i);endxc=zhongxindian(T,k-1);%计算除最坏点以外的可行点中心坐标if(xc(1)+xc(2)<=11&&xc(1)<=6&&xc(2)<=8)%判断xc是否可行xr=Xrpanduan(xc,A,a,n,k,h);A(:,k)=xr;else%不可行时,即重新确定初始可行点fuhexing(n,h,A(:,1),xr);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xc=zhongxindian(T,t)xc=[0;0;0];for i=1:txc=xc+T(:,i);endxc=xc/t;%求解中心点end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function xr=Xrpanduan(xc,A,a,n,k,h)xr=xc+a*(xc-A(:,k));while(xr(1)+xr(2)>11||xr(1)>6||xr(2)>8)%判断xr 是否可行若不可行,则持续迭代a=0.5*a;xr=xc+a*(xc-A(:,k));endxr=ercipanduan(a,xr,A(:,k),A,n,k,xc,h,xr);%可行时进入下一判断end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function xr=ercipanduan(a,p,b,A,n,k,xc,h,t)if(objfun(p)>=objfun(b))%判断反射点和最坏点函数值的大小if(a<=1e-10)A(:,k)=A(:,k-1);xr=Xcpanduan(A,k,n,h,a);disp(xr);elsea=0.5*a;xr=Xrpanduan(xc,A,a,n,k,h);%返回中心点判断,持续迭代endelseA(:,k)=p;%以反射点取代最坏点进行循环mubiao(A,n,k,h);xr=t;endend3.运行结果五.有约束优化方法——混合惩罚法1.eg:函数:min f(x)=(x(4)-x(1))^2+(x(5)-x(2))^2+(x(6)-x(3))^2;St:g1=x(1)^2+x(2)^2+x(3)^2-5;g2=(x(4)-3)^2+x(5)^2-1;g3=x(6)-8;g4=4-x(6);2.编程代码function [x,f]=hunhechengfa(x0,r0,c,h1,h2)k=1;z=0;A(:,1)=x0;r(1)=r0;while (z==0)k=k+1;x=lunhuan(x0,r(k-1));A(:,k)=x;r(k)=c*r(k-1);z=shoulian(A,r,h1,h2,k);if(z==1)break;endx0=x;enddisp('最优解点x=');disp(x);disp('最优值=');f=fhanshu(x);disp(f);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function z=shoulian(A,r,h1,h2,k)%判断收敛条件U=abs(objfun(A(:,k),r(k))-objfun(A(:,k-1),r(k-1))/obj fun(A(:,k-1),r(k-1)));V=0;for i=2:kV=V+(A(1,k)-A(1,k-1))^2;endV=sqrt(V);if(U<=h1&&V<=h2)z=1;elsez=0;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function p=objfun(x,r)%φ函数g1=x(1)^2+x(2)^2+x(3)^2-5;g2=(x(4)-3)^2+x(5)^2-1;g3=x(6)-8;g4=4-x(6);j=sqrt(r);u=r*(1/g1+1/g2+1/g3+1/g4);v=(g1^2+g2^2+g3^2+g4^2)/j;p=fhanshu(x)-u+v;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function f=fhanshu(x)%目标函数f=(x(4)-x(1))^2+(x(5)-x(2))^2+(x(6)-x(3))^2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function x=lunhuan(x0,r)%轮换法p=1;h=0.01;d=zeros(6,6);a=zeros(6,1);x=x0;for i=1:6for j=1:6if(i==j)d(i,j)=1;endendendwhile(p>h)t=x;v=0;for k=1:6a(k)=golden(x,d(:,k),r);c=d(:,k);x=x-a(k)*c';v=v+(x(k)-t(k))^2;endp=sqrt(v);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function ans=golden(st,sd,r)%黄金分割法求最佳步长 [g,h]=jintuifa(st,sd,r);a(1)=g;b(1)=h;L=0.01;t(1)=a(1)+0.382*(b(1)-a(1));u(1)=a(1)+0.618*(b(1)-a(1));k=1;p=st+t(1)*sd';q=st+u(1)*sd';m(1)=objfun(p,r);n(1)=objfun(q,r);while(b(k)-a(k)>L)if(m(k)>n(k))a(k+1)=t(k);b(k+1)=b(k);t(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1));elsea(k+1)=a(k);b(k+1)=u(k);u(k+1)=t(k);t(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1));endw=st+t(k+1)*sd';z=st+u(k+1)*sd';m(k+1)=objfun(w,r);n(k+1)=objfun(z,r);k=k+1;endans=(a(k)+b(k))/2;end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function f=jintui(a,st,sd,r)%代入步长f=objfun(st+a.*sd',r);end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [lb,ub]=jintuifa(st,sd,r)%进退法求最佳步长区间x0=0;step0=0.001;step=step0;f0=jintui(x0,st,sd,r);x1=x0+step0;f1=jintui(x1,st,sd,r);if f1<=f0while truestep=2*step;x2=x1+step;f2=jintui(x2,st,sd,r);if f1<=f2lb=x0;ub=x2;break;elsex0=x1;x1=x2;f0=f1;f1=f2;endendelsewhile truestep=2*step;x2=x0-step;f2=jintui(x2,st,sd,r);if f0<=f2lb=x2;ub=x1;break;elsex1=x0;x0=x2; f1=f0; f0=f2;endendend3.运行结果。
利用matlab求解机械设计优化问题-螺栓【整理版】
利用matlab求解机械设计优化问题-螺栓【整理版】3.机械优化设计应用实例机械优化设计把数学规划理论与数值方法应用于设计中,用计算机从大量可行方案中找出最优化设计方案,从而大大提高设计质量和设计效率。
MATLAB 具有解决线性规划和非线性规划、约束优化和无约束优化问题的内部函数,因而可以完成这一功能。
现举一例:螺栓组联结的优化设计 如图4所示的压力容器螺栓组联接中,已知D 1= 400mm,D 2 =250mm ,缸内工作压力为p=1.5 MPa ,螺栓材料为35号钢,σs =320Mpa,安全系数S=3,取残余预紧力Q ’p =1.6F,采用铜皮石棉密封垫片。
现从安全、可靠、经济的角度来选择螺栓的个数n 和螺栓的直径d 。
3.1 设计问题分析若从经济性考虑,螺栓数量尽量少些、尺寸小些,但这会使降低联结的强度和密封性,不能保证安全可靠的工作;若从安全、可靠度考虑,螺栓数量应多一些、尺寸大一些为好,显然经济性差,甚至造成安装扳手空间过小,操作困难。
为此,该问题的设计思想是:在追求螺栓组联结经济成本最小化的同时,还要保证联结工作安全、可靠。
3 .2 设计变量 目标函数 约束条件3.2 .1 设计变量 选取螺栓的个数n 和直径d(mm)为设计变量:T 21T ]x [x ]d [n X ==3.2 .2 目标函数 追求螺栓组联结经济成本C n 最小为目标。
而当螺栓的长度、材料和加工条件一定时,螺栓的总成本与nd 值成正比,所以本问题优化设计的目标函数为min F(X) = C n = n d = x 1x 2① 强度约束条件 为了保证安全可靠地工作,螺栓组联结必须满足强度条件][32.521σπσ≤=d Qca ; 其中Mpa S s 106.3320][===σσ; n n p n D F F F F Q Q p πππ6093742505.16.246.26.26.1222'=⨯=⨯==+=+=N ; 对于粗牙普通螺纹:由文献[3]推荐,小径 d 1=0.85d 所以,强度约束条件为:0106146192106146192106105624)(2212211≤-=-=-=x x nd nd X g ② 密封约束条件 为了保证密封安全,螺栓间距应小于10d ,所以,密封约束条件为:01040010)(2112≤-=-=x x d n D X g ππ③ 安装扳手空间约束条件 为了保证足够的扳手空间,螺栓间距应大于5d ,所以,安装约束条件为:040055)(1213≤-=-=x x n D d X g ππ ④ 边界约束条件 0)(14≤-=x X g ;0)(25≤-=x X g3.3 .3 建立数学模型综上所述,本问题的数学模型可表达为:设计变量:T 21]x [x X =目标函数:min F(X) = x 1x 2约束条件: s.t. 0)(≤X g i ( i = 1, 2, 3, 4, 5,)现运用MATLAB 的优化函数进行求解 :先编写M 文件function [c,ceq]=mynas(x)c(1)=146192/(x(1)*x(2)^2)-106; % 非线性不等式约束c(2)=400*pi/x(1)-10*x(2);c(3)=-400*pi/x(1)+5*x(2);ceq=[]; % 非线性等式约束在MATLAB 命令窗口输入:fun='x(1)*x(2)'; % 目标函数x0=[4,6]; % 设计变量初始值A=[-1,0;0,-1]; % 线性不等式约束矩阵b=[0;0];Aeq=[]; % 线性等式约束矩阵beq=[];lb=[]; % 边界约束矩阵ub=[];[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mynlsub) % 调用有约束优化函数运行结果如下:x = 11.4499 10.9751fval = 125.6637所以,该问题优化结果为:n =11.4499 ,d = 10.9751,目标函数最小值:F(X)= 125.6637。
MATLAB程序设计M文件程序控制结构程序调试程序举例
y=input('Please input y=:');
[rho,the]=tran(x,y);
rho
the MATLAB中,函数能够嵌套调用,即一种函数能够调用别旳函数, 甚至调用它本身。一种函数调用它本身称为函数旳递归调用。
例6 分别建立命令文件和函数文件,将华氏温度f转换为 摄氏温度c。
21.1111
x=
21.1111
(5). 函数文件旳其他有关概念
①局部变量和全局变量:
局部变量只存在于单个函数工作空间,全局变量 经过global定义,可穿行于不同函数工作空间, 涉及基本工作空间workspace。
函数文件旳内部变量是局部旳,与其他函数 及MATLAB内存相互隔离; 而假如在若干函数中把某一变量定义为全局 变量,那么这些函数将公用这个变量,全局 变量旳作用域是整个MATLAB旳工作区,即 全程有效,全部函数都能够对其存取和修改。
if (nargin == 1) tol = max(size(x)) * max(s) * eps;
程序部分
end
r = sum(s > tol);
(2)命令m文件建立及其运营
建立 涉及下列环节: 进入m文件编辑器 输入程序 定义文件名,保存程序
命令M文件旳运营方式: 直接在命令窗口输入该文件旳文件名 在m文件编辑器中打开该文件后点击工具条中
② M文件模式
将matlab语句构成旳程序存储成以m为扩展名 旳文件,然后再执行该程序文件,这种工作模式 称为程序文件模式。
程序文件不能在命令窗口下建立,因为命令窗口 只允许一次执行一行上旳一种或几种语句。
机械优化设计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语言的机械优化设计
Ab t a t T eo e a o u d f s r c : h p rt n s i eo i MAT B o t z d k t n sa p i a o rc s f c a ia p mie e AL p mie i a d i p l t n i p o e so h n c l t z d d - i t ci n me oi sg a e b e e c i e n t i r ce a i g o etp f h a s s in s a t st e e a l O e tb ih t e mah in h v e n d s r d i h sa t l .T k n n y e o e t n mi o h f a h x mp et sa l h t b i t r s s mo e o so t z d d sg ,whc h l b o v d b a s o d l ri p i e e i f t mi n ih s al e s l e y me n fMAT AB k t L i . Ke r s o t z d d s ; y wo d : p mie e i MAT AB; p mie i ;rn mis n s at i n g L o t z d k t ta s s i h f i o
祖 效群 赵艳 丽
(. 1 合肥工业大学高等 职业技术 学院( 安庆校 区) 安微 2 60 ;. , 4 0 12 西北机器厂 , 陕西 7 2 0 ) 24 5
摘要 : 了 M T A 介绍 A L B优某型号 传动 轴为 实例 , 建
2 MA L B优 化工 具箱 T A
美 国 Ma Wok 公 司 推 出的 MA L B( tx t rs h T A Ma i r
机械优化设计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机械优化设计应用实例
调用方式一: 在命令窗口中输入: [x,fval]=fminsearch('demfun1',[0,0])
调用方式二: 在命令窗口中输入: [x,fval]=fminsearch(@demfun1,[0,0])
得到的结果 X= 1.0016 0.8335
Fval= -3.3241
约束优化问题 1.线性规划
一维优化问题
一维优化问题的数学模型为:
min f (x) x1 x x2
在matlab中,一维优化问题,也就是一维搜索问题的实现是由函数fminbnd 来实现的。
具体的调用格式如下:
调用格式1:
X= fminbnd(FUN,x1,x2)
这种格式的功能是:返回在区间(x1,x2)中函数FUN最小值对应的X值。
f=[-7;-5]; A=[3,2;4,6;0,7]; b=[90;200;210]; lb=zeros(2,1);
调用linprog函数
[x,fval]=linprog(f,A,b,[],[],lb)
2 一般的约束非线性最优化问题
约束非线性最优化是指目标函数和约束函数都是定义在n维欧 几里得空间上的实值连续函数,并且至少有一个是非线性的。
X=fmincon(fun,x0,A,B,Aeq,Beq,LB,UB,NONLCON)
这个函数格式同上,同时,约束中增加由函数NONLCON定义的非线性约束条件, 在函数NONLCON的返回值中包含非线性等式约束Ceq(X)=0和非线性不等式 C(X)<=0。其中,C(X)和Ceq(X)均为向量。
这种格式的功能是:给定起始点X0,求函数FUN的局 部极小点X。其中,X0可以是一个标量、向量或者矩 阵。
调用格式2: [X,FVAL]=fminsearch (FUN,X0)
机械优化设计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程序
进退法步骤:1. 给定初始点(0)x ,初始步长0h ,令(1)(0)0,,0h h x x k ===2.令(4)(1),1x x h k k =+=+ 3.若(4)(1)()()f x f x <,则转4,否则转5 4.(2)(1)(1)(4)(2)(1)(1)(4),,()(),()()x x x x f x f x f x f x ====,令h =2h ,转2 5.若k =1,则转6,否则转,7 6.令h =-h ,(2)(4)(2)(4),()()x x f x f x ==,转2 7. 令(3)(2)(2)(1)(1)(4),,x x x x x x ===,停止计算,极小点包含于区间(1)(3)[,]x x 或(3)(1)[,]x x%目标函数:f%初始点:x0%初始步长:h0%精度:eps%目标函数取包含极值的区间左端点:minx%目标函数取包含极值的区间右端点:maxxfunction [minx,maxx] = minJT(f,x0,h0,eps)format long ;if nargin == 3eps = 1.0e-6;endx1 = x0;k = 0;h = h0;while 1x4 = x1 + h;k = k+1;f4 = subs(f, findsym(f),x4); ! subs : Symbolic substitution in symbolic expression or matrixf1 = subs(f, findsym(f),x1); ! findsym : Determine variables in symbolic expression or matrixif 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;syms t;f=t^4-t^2-2*t+5;[x1,x2]=minJT(f,0,0.1)黄金分割法:% 目标函数:f% 极值区间左端点:a% 极值区间右端点:b% 精度:eps% 目标函数取最小值时的自变量值:x % 目标函数的最小值:minffunction [x,minf] = minHJ(f,a,b,eps) 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;抛物线法:% 目标函数:f% 极值区间左端点:a% 极值区间右端点:b% 精度:eps% 目标函数取最小值时的自变量值:x% 目标函数的最小值:minffunction [x,minf] = minPWX(f,a,b,eps)format 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;一维牛顿法:% 目标函数:f% 初始点:x0% 精度:eps% 目标函数取最小值时的自变量值:x % 目标函数的最小值:minffunction [x,minf] = minNewton(f,x0,eps) format long;if 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;最速下降法:%: 目标函数:f%: 初始点:x0%: 自变量向量:var%: 精度:eps%: 目标函数取最小值时的自变量值:x%: 目标函数的最小值:minffunction [x,minf] = minFD(f,x0,var,eps)format long;if nargin == 3eps = 1.0e-6;endsyms l;tol = 1;gradf = - jacobian(f,var);while tol>epsv = Funval(gradf,var,x0);!Objective function value of the current point tol = norm(v); ! Vector and matrix normsy = x0 + l*v;yf = Funval(f,var,y);[a,b] = minJT(yf,0,0.1); %初始点0,步长为0.1xm = minHJ(yf,a,b);x1 = x0 + xm*v;x0 = x1;endx = x1;minf = Funval(f,var,x);format short;用共轭梯度法求无约束问题minf(x),n x R ∈的算法步骤如下:1. 给定初始点(0)x ,及精度ε2. 若(0)()f x ε∇≤,停止,极小点为(0)x ,否则转3.3. 取(0)(0)()d f x =-∇,且置k=04. 用一维搜索法求k α,使得()()()()()min ()k k k k k f x d f x d αα+=+令(1)()()k k k x x d α+=+,转55. 若(1)()k f x ε+∇≤,停止,极小点为(1)k x +,否则转66. 若k+1=n ,令(0)()n x x =转3,否则转77. 令2(1)(1)(1)()2()()(),()k k k k k k k f x d f x d f x λλ+++∇=-∇+=∇,置1k k =+,转4程序举例:function [x,minf] = minGETD(f,x0,var,eps) format long ;if nargin == 3eps = 1.0e-6;endx0 = transpose(x0);n = length(var);syms l ;gradf = jacobian(f,var);v0 = Funval(gradf,var,x0);d = -transpose(v0);k = 0;while 1v = Funval(gradf,var,x0);tol = norm(v);if tol<=epsx = x0;break;endy = x0 + l*d;yf = Funval(f,var,y);[a,b] = minJT(yf,0,0.1);xm = minHJ(yf,a,b);x1 = x0 + xm*d;vk = Funval(gradf,var,x1);tol = norm(vk);if tol<=epsx = x1;break;endif k+1==nx0 = x1;continue;elselamda = dot(vk,vk)/dot(v,v);d = -transpose(vk) + lamda*d;k = k+1;x0 = x1;endendminf = Funval(f,var,x);format short;用牛顿法求无约束问题,步骤:1. 给定初始点(0)x ,及精度ε2. 若(0)(f x ε∇≤,停止,极小点为(0)x ,否则转3.3. 计算12()()k f x -⎡⎤∇⎣⎦,令2()1()[()]();k k k d f x f x -=-∇∇ 4. 令(1)()(),1k k k x x d k k +=+=+,转2程序举例:function [x,minf] = minNT(f,x0,var,eps) format long ;if nargin == 3eps = 1.0e-6;endtol = 1;x0 = transpose(x0);gradf = jacobian(f,var);jacf = jacobian(gradf,var);while tol>epsv = Funval(gradf,var,x0); tol = norm(v);pv = Funval(jacf,var,x0);p = -inv(pv)*transpose(v);p = double(p);x1 = x0 + p;x0 = x1;endx = x1;minf = Funval(f,var,x);format short;syms t s;f=(t-4)^2+(s+2)^2+1;[x, mf]=minNewton(f, [0 0],[t s])。
机械优化设计MATLAB程序
机械优化设计MATLAB程序正文:⒈前言⑴研究背景机械优化设计是一种在机械工程领域中被广泛应用的方法,旨在通过使用数学模型和优化算法来改进机械系统的性能。
MATLAB是一种强大的数值计算和编程工具,可以用于开发机械优化设计程序。
⑵目的和范围⒉问题描述⑴设计需求在开始编写机械优化设计程序之前,需要明确设计需求,即需要实现的机械系统的性能指标或目标。
这些需求可以包括系统的功率、效率、噪声、振动等方面。
⑵优化目标根据设计需求,确定最终优化目标。
例如,通过调整机械系统的参数来最大化系统的效率、最小化系统的振动等。
⒊数学模型⑴设计变量设计变量是机械系统中可以调整的参数。
需要对设计变量进行定义和范围设定,以确保优化算法能够在合理的范围内搜索最优解。
⑵约束条件约束条件是在进行优化时必须满足的条件。
这些条件可以包括设计变量的边界条件、约束函数等。
在编写MATLAB程序时,需要将这些约束条件作为输入参数。
⒋算法选择与实现⑴优化算法选择根据优化目标和系统的特点,选择合适的优化算法。
常见的优化算法包括遗传算法、粒子群优化算法、模拟退火算法等。
⑵优化算法实现根据选择的优化算法,编写MATLAB程序实现优化过程。
程序应包括目标函数的定义、算法的参数设置、迭代过程和终止条件等。
⒌算法验证与结果分析⑴数据采集与处理在进行机械优化设计实验时,需要采集相应的实验数据,并对数据进行处理。
这些数据可以包括设计变量的调整情况、系统性能指标的变化等。
⑵结果分析基于采集到的数据,分析和比较不同优化算法的性能。
可以绘制图表展示优化过程和结果的变化,以便于进一步分析和优化。
⒍结论与展望总结机械优化设计MATLAB程序的设计过程和结果,对实验结果进行分析,并提出未来改进和研究的方向。
1、本文档涉及附件:附件1:MATLAB程序代码示例附件2:数据采集记录表2、本文所涉及的法律名词及注释:机械优化设计:指利用数学模型和优化算法改善机械系统性能的方法。
轴承 优化算法 matlab 程序
轴承优化算法 matlab 程序轴承优化算法的Matlab程序在机械领域中,轴承是一种用于减少摩擦和支撑转动运动的重要元件。
轴承的性能直接影响到机械设备的运行效率和寿命。
为了提高轴承的性能,并解决实际工程问题,优化算法是一种常用的工具。
本文将介绍一种使用Matlab编写的轴承优化算法程序。
轴承优化算法的设计目标是通过调整设计参数以达到最佳性能。
优化算法基于数学模型和计算机算法,通过迭代寻找最佳的解。
对于轴承而言,常见的设计参数包括几何尺寸、材料、润滑方式等。
首先,我们需要创建一个Matlab函数来定义轴承的数学模型。
例如,我们可以使用Reynolds方程来描述轴承的润滑情况。
根据Reynolds方程,轴承的载荷和润滑剂的粘度将影响到摩擦和热平衡。
函数的输入参数可以包括轴承的几何参数、载荷、转速和润滑剂的粘度等。
接下来,我们可以选择一个适当的优化算法来解决轴承的优化问题。
常见的优化算法包括遗传算法、粒子群算法、模拟退火算法等。
对于大规模优化问题,遗传算法通常是较好的选择。
在Matlab中,可以使用Global Optimization Toolbox来实现这些算法。
以遗传算法为例,需要定义目标函数、约束条件和遗传算法的参数。
然后,我们可以使用Matlab编写主程序来调用上述的函数和算法。
主程序负责设置优化问题的目标函数和约束条件,以及调用遗传算法进行求解。
在每次迭代之后,程序将输出当前的最佳解以及对应的目标函数值。
在轴承优化算法程序中,还可以加入一些其他的功能和模块,以提高其实用性和可扩展性。
例如,可以添加一个用户界面模块,使用户可以方便地输入轴承的参数和运行优化算法。
还可以添加一个结果分析模块,用于评估不同参数组合的性能,并提供可视化的结果展示。
最后,需要对程序进行验证和优化。
可以通过比较优化算法的结果和现有的经验数据来验证程序的正确性。
如果发现程序存在性能问题,可以通过调整参数或改进算法来进行优化。
MATLAB在机械优化设计中的应用
线 性规 划模 型如下 :
mif X n
x Hx+ rx T
() 3
,
A *X ( 性 不 等 式 约 束 ) 线
st JA q* = bq 线性等式约束 ) .. e e( I 鱼 优化变量 上下界约束) / b l(
略) ;
ei a z g为迭 代终 止 条件 ( 省 略 ) 为正 数 时 , 可 ,
表示 目标 函数 收 敛 于 解 z处 ; 负 数 时 , 示 目标 为 表 函数不 收敛 ; 为零 , 则表 示 已经达 到 函数评 价或 迭代 的最大次 数 ;
设 计 中 的问题 不仅方 便 实用 , 而且 编程 简单 易懂 。
问 题 采 用 f n n 函 数 、 miu e函 数 和 f n mib d f nn mi— sac e rh函 数 , 中 默 认 的 算 法 就 是 B GS算 法 。 其 F
式 中 , ( ) C q x 分 别 为非 线性 函数 , C 、 e() 其余 参 数 意
义 同 式 ( ) 1。
fA
.
线性不等式约束
() 1
式 中 , 为对 称矩 阵 , 余参 数 意义 同式 ( ) H 其 1。
q apo u d rg函数 调用 格式 为 : L 知a , x a o t u , a d ]一 q a — , l e i g, up t lmb a u d
fJA q X= bq 线性等式约束 ) . e e(
曾怀 灵 , 建 国 贺
( 沙矿 山研 究院 有 限责任 公 司 , 湖 南 长沙 长 4 01 ) 1 0 2
二次插值法机械优化设计matlab.wps
一维无约束优化算法——二次插值法二次插值法亦是用于一元函数在确定的初始区间内搜索极小点的一种方法。
它属于曲线拟合方法的范畴。
一、基本原理在求解一元函数的极小点时,常常利用一个低次插值多项式来逼近原目标函数,然后求该多项式的极小点(低次多项式的极小点比较容易计算),并以此作为目标函数的近似极小点。
如果其近似的程度尚未达到所要求的精度时,可以反复使用此法,逐次拟合,直到满足给定的精度时为止。
常用的插值多项式为二次或三次多项式,分别称为二次插值法和三次插值法。
这里我们主要介绍二次插值法的计算公式。
假定目标函数在初始搜索区间中有三点、和,其函数值分别为、和(图1},且满足,,即满足函数值为两头大中间小的性质。
利用这三点及相应的函数值作一条二次曲线,其函数为一个二次多项式,式中、、为待定系数。
图1根据插值条件,插值函数与原函数在插值结点、、处函数值相等,得(2)为求插值多项式的极小点,可令其一阶导数为零,即(3)解式(3)即求得插值函数的极小点(4)式(4)中要确定的系数可在方程组(2)中利用相邻两个方程消去而得:(5)(6)将式(5)、(6)代入式(4)便得插值函数极小值点的计算公式:(7)把取作区间内的另一个计算点,比较与两点函数值的大小,在保持两头大中间小的前提下缩短搜索区间,从而构成新的三点搜索区间,再继续按上述方法进行三点二次插值运算,直到满足规定的精度要求为止,把得到的最后的作为的近似极小值点。
上述求极值点的方法称为三点二次插值法。
为便于计算,可将式(7)改写为(8)式中:(9)(10)二.程序框图)/()(3211212212131a a c a a y y c a a y y c ----←--←)/(5.02131c c a a a p -+←)(p p a f y ←?22ε<-y y y p?0)(2>-h a a p ?2p y y <pp y y a a ←←**2*2*y y a a ←←结束?2p y y <?2p y y ≥pp y y a a y y a a ←←←←222121pp y y a a ←←33pp y y a a y y a a ←←←←222323pp y y a a ←←11否否否否否是 是是 是是给定hy y y a a a ,,,,,,313,212ε开始三.例题及其程序代码1.用二次差值法求f(α)=sinα在4≤α≤5上的极小值2.程序(1) function y=f(x)y=sin(x); …………………….%定义f文件(2)c1=(y3-y1)/(x3-x1);c2=((y2-y1)/(x2-x1)-c1)/(x2-x3);ap=0.5*(x1+x3-c1/c2);yp=f(ap);……………………%定义f1文件(3)x1=4;x2=4.5;x3=5;e=0.001;y1=f(x1);y2=f(x2);y3=f(x3); ………………%确定初始差值节点h=0.1;c1=(y3-y1)/(x3-x1);c2=((y2-y1)/(x2-x1)-c1)/(x2-x3);ap=0.5*(x1+x3-c1/c2);yp=f(ap);…% 计算二次插值函数极小点while (abs((y2-yp)/y2)<e)....%判断迭代终止if ((ap-x2)*h>0) 条件if(y2>=yp)x1=x2;y1=y2;x2=ap;y2=yp;f1;elsex3=ap;y3=yp;f1;endelseif (y2>=yp)x3=x2;y3=y2;x2=ap;y2=yp;f1;elsex1=ap;y1=yp;f1;…………………..%缩短搜索区间endendif (y2<yp)xo=x2;yo=y2;elsexo=ap;yo=yp;endxoyo二次插值法四结果分析经过MA TLAB运算,结果如上,与解析法运算结果相同,说明二次差值的效果很好。
0.618法牛顿法Powell法优化设计MATLAB程序设计
机械优化设计*名:***学号:************ 班级:机械工程15班1.用0.618法求一元函数f(t)=t^2+2*t在区间[-3,5]中的极小点,要求计算到区间的长度小于0.05。
用MATLAB编程如下:function [x,minf]=minHJ(f,a,b,eps)format long;if nargin==3eps=0.05;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);minf = double(minf);format short;syms t;f=t^2+2*t;[x,fx]=minHJ(f,-3,5,eps)运行结果:2.用牛顿法求函数f = x1^2 + 4*x2^2 + x3^2 - 2*x1 + 18*x3的极小点。
用MATLAB编程如下:function [diff_x] = function_c1(x1,x2,x3)syms x1x2x3f = x1^2 + 4*x2^2 + x3^2 - 2*x1 + 18*x3;diff_x1 = diff(f,x1);diff_x2 = diff(f,x2);diff_x3 = diff(f,x3);diff_x = [diff_x1; diff_x2; diff_x3];returnendfunction [H] = function_c2(x1,x2,x3)syms x1x2x3f = x1^2 + 4*x2^2 + x3^2 - 2*x1 + 18*x3;diff_x1 = diff(f,x1);diff_x2 = diff(f,x2);diff_x3 = diff(f,x3);diff_x1_x1 = diff(diff_x1,x1);diff_x2_x2 = diff(diff_x2,x2);diff_x3_x3 = diff(diff_x3,x3);diff_x1_x2 = diff(diff_x1,x2);diff_x1_x3 = diff(diff_x1,x3);diff_x2_x1 = diff_x1_x2;diff_x2_x3 = diff(diff_x2,x3);diff_x3_x1 = diff_x1_x3;diff_x3_x2 = diff_x2_x3;H = [diff_x1_x1 diff_x1_x2 diff_x1_x3;...diff_x2_x1 diff_x2_x2 diff_x2_x3;...diff_x3_x1 diff_x3_x2 diff_x3_x3];returnende = 1;x1 = 0;x2 = 0;x3 = 0;while e>0.00001f_d = function_c1(x1,x2,x3);f = subs(f_d, 'x1,x2,x3', [x1,x2,x3]);H = function_c2(x1,x2,x3);H_inv = inv(H);x = [x1;x2;x3] - H_inv * f;e = abs(x(1)-x1) / x(1);x1 = x(1);x2 = x(2);x3 = x(3);enddisp(x)运行结果:3.用Powell法求函数f=t^2+s^2-t*s-10*t-4*s+60的最优点X*=[t,s]T。
机械优化设计_经典实例
g3 ( x)
1
7 45
x13 x2
0
g4 ( x)
1
1 321
x1 x22
0
g5 (x) x1 0
g6 (x) x2 0
盖板优化实例
l1 ) 2
]
0
优化设计工具
优化设计工具
第1部分 MATLAB基础 第2部分 优化计算工具
第1部分 MATLAB基础
1.1 MATLAB环境简介 1.2 数据表示 1.3 数组 1.4 源文件(M-文件)
1.1 MATLAB窗口
启动MATLAB 其窗口如右
1、Command Window (命令窗口)
x = 0:0.1:2*pi; y = sin(x); plot(x,y)
1.4.3 M-文件的操作
1.4.3 M-文件的操作
sin( x 2 y 2 ) z
x2 y2
(7.5 x 7.5,7.5 y 7.5)
1.4.3 M-文件的操作
1.4.3 M-文件的操作
( ) arccosl12 l22 l32 l42 2l1l4 cos
2l2 l12 l42 2l1l4 cos arctg l1 sin
l4 l1 cos
设计实例2:
点M的坐标: xM xA l1 cos( ) l5 cos( ) yM yA l1 sin( ) l5 sin( )
1.5 f max
1
1 321
x1 x22
1
0
g5 (x) x1 0
g6 (x) x2 0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.8970.9483fx =0.7647k =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.8970.9483fx=0.7647k=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 --+=的极小点。
用鲍威尔法在MATLAB 的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;g01=A*x0+b;a01=-d01'*g01/(d01'*A*d01);x01=x0+a01*d01;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.用单纯形法求线性规划问题⎪⎩⎪⎨⎧=≥=+++=++-+--=)4,3,2,1(0535.224..4.43.32.21.1)(min 43213214321j x x x x x x x x t s x x x x x f j用单纯形法在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 ;).(max )(min ),(max 4.43.32.21.1)(min ,4.43.32.21.1)(43214321x g x f x g x x x x x f x x x x x g -=--+--=+-+=即就变成求则求令运行结果如下:>> 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 0 4.0000 1.6667val =7.3333kk =2所以,3333.7)(m in ,667.1,0000.4,04321-=====x f x x x x 的最优解为经两次转轴运算,得到7. 求解线性规划问题⎪⎪⎩⎪⎪⎨⎧=≥=++=++=++--=)5,4,3,2,1(03001032005436049..127min 52142132121j x x x x x x x x x x t s x x z j 用单纯形法在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;end.. ..... . . end% 以下进行转轴运算A(outb,:)=A(outb,:)/A(outb,inb);for i=1:mAif i~=outbA(i,:)=A(i,:)-A(outb,:)*A(i,inb); endendendendend ;运行结果如下:.-m ax Y m inz m ax Y ,127x m inz ,1272121=--=+=即可转变为求则求令x x x Y >> A=[9 4 1 0 0 360;4 5 0 1 0 200;3 10 0 0 1 300;7 12 0 0 0 0]; N=[3;4;5]; [sol,val,kk]=danchunxingfa (A,N) sol =20 24 84 0 0val =420kk =3所以,经3次转轴运算,得到的最优解为.420m in ,0,84,24,2054321-======z x x x x x。