机械优化设计课本中编程实例
机械优化设计实验c语言程序

二次插值法#include "stdio.h"#include "math.h"#include "conio.h"void main(){float *area(float a1,float p,float a[3]);float f(float x);float ar,fr;float a2,a3;float f1,f2,f3;float a1=10,p=0.01,e=0.00001;float pa[3];area(a1,p,pa);a1=pa[0];a2=pa[1];a3=pa[2];f1=f(a1);f2=f(a2);f3=f(a3);do{ar=((a3*a3-a2*a2)*f1+(a1*a1-a3*a3)*f2+(a2*a2-a1*a1)*f3); ar=ar/2/((a3-a2)*f1+(a1-a3)*f2+(a2-a1)*f3);fr=f(ar);if(ar>a2){if(fr>f2){a3=ar;f3=fr;}else if(fr<f2){a1=a2;f1=f2;a2=ar;f2=fr;}else{a3=ar;a1=a2;a2=(a1+a3)/2;f1=f2;f3=fr;f2=f(a2);}}else if(ar<a2){if(fr>f2){a1=ar;f1=fr;}else if(fr<f2){a3=a2;f3=f2;a2=ar;f2=fr;}else{a1=ar;a3=a2;a2=(a1+a3)/2;f1=fr;f3=f2;f2=f(a2);}}if(fabs(a1-a3)<=e) break;}while(1);if(f2<fr){ar=a2;fr=f2;}printf("\nx*=%f\nf(x*)=%f",ar,fr);}float *area(float a1,float p,float a[3]){float f(float x);float a2,f2,a3,f3,temp;float acc=0.01;float f1=f(a1);float p;while(1){a2=a1+p;f2=f(a2);if(f2>=f1){if(fabs(f2-f1)<acc)p=p/2;elsep=-p;}else break;}while(1){a3=a2+p;f3=f(a3);if(f2<=f3) break;p=2*p;a1=a2;f1=f2;a2=a3;f2=f3;}if(a1>a3){temp=a1;a1=a3;a3=temp;}a[0]=a1;a[1]=a2;a[2]=a3;return a;}float f(float x){float y=pow(x,4)-4*pow(x,3)-6*pow(x,2)-16*x+4;return y;}变尺度法计算f(x1,x2)=x1^2+2*x2^2-4*x1-2*x1*x2 的无约束极值,初始点x0=[1,1]。
第八章机械优化设计应用实例

最优值 上面的最优解是连续性的,需进一步离散化处理,从略。
1,确定设计变量
铰链四杆机构按主从动连架杆给定的角度对应关系进行 设计时,各杆长度按同一比例缩放并不影响主,从动杆转 角的对应关系。因此可把曲柄长度作为单位长度,即令 L1=1,其余三杆表示为曲柄长度的倍数,用其相对长度l2, L3,l4作为变量。一般考虑,本问题与初始角 , 也有 关系,所以变量本应为l2,l3,l4, 和 五个。但是两 转角变量并不是独立变量,而是杆长的函数。写出如下式
D:
二,选择优化方法及结果分析
该题维数较低,用哪一种优化方法都适宜。这里选用约束 坐标轮换法。
计算时,曾用若干组不同的初始数据进行计算,从中选出 其中三组。见课本表8.1
由其中的计算结果可以看出,第二次计算结果应为最优解。
, 为相对杆长。最后,根据机构的结构设计需要按一定 的比例尺求出机构实际杆长L1,L2,L3,L4。
由余弦定理a图
整理得约束条件 同理由上页b图传动角最小位置写出 整理得约束条件
⑵按曲柄存在条件建立约束条件 写成约束条件有
用全部约束条件画成次下图所示的平面曲线,则可见, g3(x)~g7(x)均是消极约束。而可行域D实际上只是由g1(x) 与g2(x)两个约束条件围成的。综合上述分析,本题的优 化数学模型如下
输 出 角 函 数 图
对于该机构设计问题,可以取机构输出角的平方偏差 最小为原则建立目标函数。为此,将曲柄转角为
的区间分成n等分,从动摇杆输出角也有相对
应的分点。若各分点标号记作i,以各分点输出角的偏差 平方和作为目标函数,则有
式中的有关参数按如下步骤及公式计算 ①曲柄各等分点的转角
②期望输出角 ③实际输出角
机械优化设计_经典实例

1.5 f max
1
1 321
x1 x22
1
0
g5 (x) x1 0
g6 (x) x2 0
盖板优化实例
f (x) 2 60t 2 0.5h 120 x1 x2
盖板优化实例
g1 ( x)
1
1 4
x2
0
7 g2 (x) 1 45 x1x2 0
目标函数:
f (x) 2 60t 2 0.5h 120 x1 x2
约束:
g1 ( x)
[ ] max
1
1 4
x2
1
0
g2 (x)
[ ] max
1
7 45
x1 x2
1
0
g3 (x)
c max
1
7 45
x13 x2
1
0
g4 (x)
第2部分 优化计算工具
2.1 线性规划优化函数 2.2 无约束非线性优化函数 2.3 约束优化函数
MATLAB解决的线性规划问题的标准形式为:
min cT x s.t. Ax b, x 0
A (aij )mn , x (x1, x2, x3,...xn )T c (c1, c2, )T ,b (b1,b2,...bm )T ,且b 0
a2
1 b2
an
1 bn
(a、b维数必须相同)
1.4 源文件(M-文件)
分为两类: 函数文件和非函数文件 都用扩展名.M
1.4.1 函数文件(相当于子程序)
机械优化设计c语言程序

计算f(x1,x2)=x0^2+x1^2-x0*x1-10*x0-4*x1+60#include "stdio.h"#include "stdlib.h"#include "math.h"double objf(double x[]){double ff;ff=x[0]*x[0]+x[1]*x[1]-x[0]*x[1]-10*x[0]-4*x[1]+60;return(ff);}void jtf(double x0[],double h0,double s[],int n,double a[],double b[]) {int i;double *x[3],h,f1,f2,f3;for(i=0;i<3;i++)x[i]=(double *)malloc(n*sizeof(double));h=h0;for(i=0;i<n;i++)*(x[0]+i)=x0[i];f1=objf(x[0]);for(i=0;i<n;i++)*(x[1]+i)=*(x[0]+i)+h*s[i];f2=objf(x[1]);if(f2>=f1){h=-h0;for(i=0;i<n;i++)*(x[2]+i)=*(x[0]+i);f3=f1;for(i=0;i<n;i++){*(x[0]+i)=*(x[1]+i);*(x[1]+i)=*(x[2]+i);}f1=f2;f2=f3;}for(;;){h=2*h;for(i=0;i<n;i++)*(x[2]+i)=*(x[1]+i)+h*s[i];f3=objf(x[2]);if(f2<f3) break;else{ for(i=0;i<n;i++){*(x[0]+i)=*(x[1]+i);*(x[1]+i)=*(x[2]+i);}f1=f2;f2=f3;}}if(h<0)for(i=0;i<n;i++){a[i]=*(x[2]+i);b[i]=*(x[0]+i);}elsefor(i=0;i<n;i++){a[i]=*(x[0]+i);b[i]=*(x[2]+i);}for(i=0;i<3;i++)free(x[i]);}double gold(double a[],double b[],double eps,int n,double xx[]) {int i;double f1,f2,*x[2],ff,q,w;for(i=0;i<2;i++)x[i]=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++){*(x[0]+i)=a[i]+0.618*(b[i]-a[i]);*(x[1]+i)=a[i]+0.382*(b[i]-a[i]);}f1=objf(x[0]);f2=objf(x[1]);do{if(f1>f2){for(i=0;i<n;i++){b[i]=*(x[0]+i);*(x[0]+i)=*(x[1]+i);}f1=f2;for(i=0;i<n;i++)*(x[1]+i)=a[i]+0.382*(b[i]-a[i]);f2=objf(x[1]);}else{ for(i=0;i<n;i++){a[i]=*(x[1]+i);*(x[1]+i)=*(x[0]+i);}f2=f1;for(i=0;i<n;i++)*(x[0]+i)=a[i]+0.618*(b[i]-a[i]);f1=objf(x[0]);}q=0;for(i=0;i<n;i++)q=q+(b[i]-a[i])*(b[i]-a[i]);w=sqrt(q);}while(w>eps);for(i=0;i<n;i++)xx[i]=0.5*(a[i]+b[i]);ff=objf(xx);for(i=0;i<2;i++)free(x[i]);return(ff);}double oneoptim(double x0[],double s[],double h0,double epsg,int n,double x[]) {double *a,*b,ff;a=(double *)malloc(n*sizeof(double));b=(double *)malloc(n*sizeof(double));jtf(x0,h0,s,n,a,b);ff=gold(a,b,epsg,n,x);free(a);free(b);return (ff);}double powell(double p[],double h0,double eps,double epsg,int n,double x[]) {int i,j,m;double *xx[4],*ss,*s;double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;ss=(double *)malloc(n*(n+1)*sizeof(double)); s=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++){for(j=0;j<=n;j++)*(ss+i*(n+1)+j)=0;*(ss+i*(n+1)+i)=1;}for(i=0;i<4;i++)xx[i]=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++)*(xx[0]+i)=p[i];for(;;){for(i=0;i<n;i++){*(xx[1]+i)=*(xx[0]+i);x[i]=*(xx[1]+i);}f0=f1=objf(x);dlt=-1;for(j=0;j<n;j++){for(i=0;i<n;i++){*(xx[0]+i)=x[i];*(s+i)=*(ss+i*(n+1)+j);}f=oneoptim(xx[0],s,h0,epsg,n,x);df=f0-f;if(df>dlt){dlt=df;m=j;}}sdx=0;for(i=0;i<n;i++)sdx=sdx+fabs(x[i]-(*(xx[1]+i)));if(sdx<eps){free(ss);free(s);for(i=0;i<4;i++)free(xx[i]);return(f);}for(i=0;i<n;i++)*(xx[2]+i)=x[i];f2=f;for(i=0;i<n;i++){*(xx[3]+i)=2*(*(xx[2]+i)-(*(xx[1]+i)));x[i]=*(xx[3]+i);}fx=objf(x);f3=fx;q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt);d=0.5*dlt*(f1-f3)*(f1-f3);if((f3<f1)||(q<d)){if(f2<=f3)for(i=0;i<n;i++)*(xx[0]+i)=*(xx[2]+i);elsefor(i=0;i<n;i++)*(xx[0]+i)=*(xx[3]+i);}else{for(i=0;i<n;i++){*(ss+(i+1)*(n+1))=x[i]-(*(xx[1]+i));*(s+i)=*(ss+(i+1)*(n+1));}f=oneoptim(xx[0],s,h0,epsg,n,x);for(i=0;i<n;i++)*(xx[0]+i)=x[i];for(j=m+1;j<=n;j++)for(i=0;i<n;i++)*(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j);}}}void main(){double p[]={1,2};double ff,x[2];ff=powell(p,0.3,0.001,0.0001,2,x);printf("x[0]=%f,x[1]=%f,ff=%f\n",x[0],x[1],ff); getchar();}。
机械优化设计经典实例

机械优化设计经典实例机械优化设计是指通过对机械结构和工艺的改进,提高机械产品的性能和技术指标的一种设计方法。
机械优化设计可以在保持原产品功能和形式不变的前提下,提高产品的可靠性、工作效率、耐久性和经济性。
本文将介绍几个经典的机械优化设计实例。
第一个实例是汽车发动机的优化设计。
汽车发动机是汽车的核心部件,其性能的提升对汽车整体性能有着重要影响。
一种常见的汽车发动机优化设计方法是通过提高燃烧效率来提高功率和燃油经济性。
例如,通过优化进气和排气系统设计,改善燃烧室结构,提高燃烧效率和燃油的利用率。
此外,采用新材料和制造工艺,减轻发动机重量,提高动力性能和燃油经济性也是重要的优化方向。
第二个实例是飞机机翼的优化设计。
飞机机翼是飞机气动设计中的关键部件,直接影响飞机的飞行性能、起降性能和燃油经济性。
机翼的优化设计中,常采用的方法是通过减小机翼的阻力和提高升力来提高飞机性能。
例如,优化机翼的气动外形,减小阻力和气动失速的风险;采用新材料和结构设计,降低机翼重量,提高飞机的载重能力和燃油经济性;优化翼尖设计,减小湍流损失,提高升力系数。
第三个实例是电机的优化设计。
电机是广泛应用于各种机械设备和电子产品中的核心动力装置。
电机的性能优化设计可以通过提高效率、减小体积、降低噪音等方面来实现。
例如,采用优化电磁设计和轴承设计,减小电机的损耗和噪音,提高效率;通过采用新材料和工艺,减小电机的尺寸和重量,实现体积紧凑和轻量化设计。
总之,机械优化设计在提高机械产品性能和技术指标方面有着重要应用。
通过针对不同机械产品的特点和需求,优化设计可以提高机械产品的可靠性、工作效率、耐久性和经济性。
这些经典实例为我们提供了有效的设计思路和方法,帮助我们在实际设计中充分发挥机械优化设计的优势和潜力。
机械优化设计三个案例

机械优化设计案例11. 题目对一对单级圆柱齿轮减速器,以体积最小为目标进行优化设计。
2。
已知条件已知数输入功p=58kw ,输入转速n 1=1000r/min ,齿数比u=5,齿轮的许用应力[δ]H =550Mpa ,许用弯曲应力[δ]F =400Mpa 。
3.建立优化模型3。
1问题分析及设计变量的确定由已知条件得求在满足零件刚度和强度条件下,使减速器体积最小的各项设计参数。
由于齿轮和轴的尺寸(即壳体内的零件)是决定减速器体积的依据,故可按它们的体积之和最小的原则建立目标函数.单机圆柱齿轮减速器的齿轮和轴的体积可近似的表示为:]3228)6.110(05.005.2)10(8.0[25.087)(25.0))((25.0)(25.0)(25.0222122212221222212212122221222120222222222121z z z z z z z z z z z g g z z d d l d d m u mz b bd m u mz b b d b u z m b d b z m d d d d l c d d D c b d d b d d b v +++---+---+-=++++-----+-=πππππππ 式中符号意义由结构图给出,其计算公式为b c d m umz d d d mumz D mz d mz d z z g g 2.0)6.110(25.0,6.110,21022122211=--==-===由上式知,齿数比给定之后,体积取决于b 、z 1 、m 、l 、d z1 和d z2 六个参数,则设计变量可取为T z z T d d l m z b x x x x x x x ][][211654321== 3。
2目标函数为min )32286.18.092.0858575.4(785398.0)(2625262425246316321251261231232123221→++++-+-+-+=x x x x x x x x x x x x x x x x x x x x x x x x x x f3.3约束条件的建立1)为避免发生根切,应有min z z ≥17=,得017)(21≤-=x x g2 )齿宽应满足max min ϕϕ≤≤d b ,min ϕ和max ϕ为齿宽系数d ϕ的最大值和最小值,一般取min ϕ=0。
机械优化设计课本中编程实例

燕山大学机械优化设计论文专业:12机械工程班级: 工学部1班学号:姓名:2012年12月05日摘 要:机械优化设计是将最优化原理和计算技术应用于设计领域,为工程设计提供一种重要的科学设计方法。
机械优化设计包括建立优化设计问题的数学模型和选择恰当的优化方法与程序两方面的内容.由于机械优化设计是应用数学方法寻求机械设计的最优方案,所以首先要根据实际的机械设计问题建立相应的数学模型,即用数学形式来描述实际设计问题.在建立数学模型时,需要用专业知识确定设计的限制条件和所追求的目标,确立各设计变量之间的相互关系等。
机械优化设计问题的数学模型可以是解析式,实验数据或经验公式。
虽然它们给出的形式不同,但都是反应设计变量之间的数量关系的。
MATLAB 是目前国际上最流行的科学与工程计算的软件工具, 它具有强大的数值分析、矩阵运算、信号处理、图形显示、模拟仿真和最优化设计等功能.本文用MATLAB 来解决机械设计中的几个常见的问题。
关键词:MATLAB ;优化;机械设计;软件1 引 言近年来发展起来的计算机辅助设计,在引入优化设计方法后,使得在设计过程中既能够不断选择设计参数并评选出最优设计方案,又可以加快设计速度,缩短设计周期。
在科学技术发展要求机械产品更新日益缩短的今天,把优化设计方法与计算机辅助设计结合起来,使设计过程完全自动化,已成为设计方法的一个重要趋势.2 采用MATLAB 软件进行优化设计2.1.问题描述:求3682+-=t t f 的最优解2。
1。
1规划模型的建立:目标函数36102+-=t t f约束条件无约束2.1.2对应的程序:clcclearsyms tf=t^2-10*t+36;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-1)*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—1)*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);t_min=a2;f_min=f2;elseb=a2;a2=a1;a1=b—k*(b-a);f2=f1;f1=subs(f,a1);t_min=a1;f_min=f1;endc=(b—a)/2;endt_minf_min2。
机械优化设计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);。
第八章机械优化设计实例+(1)

例如某热压机框架的优化设计中,许用应力为 [σ]= 150MPa,而下横梁的许用挠度[δ]=0.5mm,约束函数 为:
g1 x 150 0 g2 x 0.5 0
两者对数值变化的灵敏度相差很大,这对优化设计 是不利的。
一、单级圆柱齿轮减速器的优化设计
下图是单级齿轮减速器的结构简图。已知齿数比为u,输入功 率为P,主动齿轮转速为n1 ,求在满足零件的强度和刚度条件下, 使减速器体积最小的各项设计参数。
由于齿轮和轴的尺寸(即壳体内的零件)是决定减速器 体积的依据,因此可按它们的体积之和最小的原则来建立 目标函数。根据齿轮几何尺寸及齿轮结构尺寸的计算公式, 壳体内的齿轮和轴的体积可近似地表示为
第三节 圆柱齿轮减速器的优化设计
圆柱齿轮减速器是一种非常广泛的机械传动装置。
目前我国减速器存在的问题:体积大,重量重、承载 能力低、成本高和使用寿命短等问题。
对减速器进行优化设计,就要考虑:提高承载能力、 减轻重量和降低经济成本。
减速器的优化设计一般是在给定功率P、齿数比u、 输入转速n以及其他技术条件和要求下,找出一组使 减速器的某项经济技术指标达到最优的设计参数。
三、数学模型的尺度变换
数学模型的尺度变换是一种改善数学模型性态, 使之易于求解的技巧。
1.目标函数的尺度变换
在优化设计中,若目标函数严重非线性,使 函数性态恶化,此时不论采用哪一种优化方法, 其计算效率都不会高,且计算不稳定。需尺度 变换,改善其性态,加速优化计算的进程。例 如,目标函数
f (x) 144 x12 4x22 8x1x2
当齿数比给定后,体积V取决于b、z1、m、l
第八章机械优化设计实例

第八章机械优化设计实例机械优化设计是指通过优化设计方法和技术,提高机械产品的性能、降低成本和改善产品的可靠性和可维修性。
在本章中,我们将介绍两个机械优化设计实例,分别是汽车发动机和风力发电机的优化设计。
汽车发动机的优化设计是目前汽车行业的热点问题。
传统的汽车发动机具有功率输出低、能效低和排放高等问题。
为解决这些问题,可以通过优化设计改善发动机的气缸设计、燃烧室设计和可变气门技术等。
例如,通过增加气缸数和减小气缸直径来提高发动机的功率输出和燃烧效率;通过优化燃烧室形状和喷射系统来提高燃烧效率和降低排放;通过采用可变气门技术来提高发动机的响应速度和燃烧效率。
风力发电机的优化设计是提高风力发电机转化效率的重要途径。
传统的风力发电机的转化效率较低,主要是由于叶片的设计不合理和气动噪声等。
为此,可以通过优化叶片的形态和材料,改善气动性能和降低噪声水平。
例如,通过增加叶片的长度和调整叶片的弯曲角度来提高叶片的气动效率;通过选择具有良好耐候性和强度的材料来延长叶片的使用寿命。
此外,还可以通过改进整个风力发电机的结构和控制系统,提高发电机的运行稳定性和可靠性。
以上两个实例都是典型的机械优化设计案例,通过采用优化设计方法和技术,可以显著提高机械产品的性能和质量,降低生产成本和维护成本,同时还可以减少对环境的影响,提高产品的竞争力和市场占有率。
机械优化设计的核心是在设计阶段充分考虑产品的性能、成本和可靠性等因素,通过系统性的优化设计方法和工具,找出最佳设计方案。
优化设计的过程包括问题定义、设计参数选择、设计方案生成和评估等。
其中,设计参数的选择是非常重要的,设计参数的合理选择可以显著影响产品性能和成本。
在实际的优化设计中,可以使用模拟软件和实验方法进行参数优化和设计方案评估。
在机械优化设计实例中,我们提到了汽车发动机和风力发电机的优化设计。
这两个实例都是当今社会中具有重要意义的机械产品,它们的性能和质量对整个行业的发展和进步起着重要的推动作用。
机械优化设计实例

机械优化设计实例------以曲柄摇杆机构为例例8-5.设计一曲柄摇杆机构,要求曲柄l 1从φ0转到φm =φ0+90时,摇杆l3的转角最佳在线已知的运动规律:ΨE =Ψ0+2/3π(φ-φ0)2且已知l 1=1,l 4=5,φ0为极位角,其传动角允许在45<=γ<=135范围内变化。
解 1. 数学模型的建立该机构的运动简图如上图。
在这个问题中,已知l 1=1,l 4=5且φ和φm 不是独立参数,它们可由下式求出:⎥⎦⎤⎢⎣⎡--+=⎥⎦⎤⎢⎣⎡++-+=3232202232201025)1(arccos )1(1025)1(arccos l l l l l l ψϕ所以该问题只有两个独立参数l 2,l 3。
因此设计变量为:[][]TTl l x x x 3221==将输入角分成30等份,并用近似公式计算,可得目标函数的表达式:[]∑=---=30112)()()(i i i Ei i x f ϕϕψψ式中 ,其计算公式为时的去机构实际输出角—当—i ϕϕψ=ii i i βαπψ--=式中()21i 21i412421i i 2i 4i 21242i i 2i 21222i 3i 2232i i )10cos 26(cos l 2l l l r 10r 24r arccos l 2r l l r arccos x 2r x x r arccos l 2r l l r arccos ϕϕβα-=-+=⎪⎪⎭⎫ ⎝⎛+=⎪⎪⎭⎫ ⎝⎛-+=⎪⎪⎭⎫ ⎝⎛-+=⎪⎪⎭⎫ ⎝⎛-+=20i 0Eii Ei 32)(由下式计算时的理想输出角,其值为当ϕϕπψψϕϕψ-+==约束函数按曲柄存在条件对传动角的限制来建立,得g1(x)=-x1<=0 g2(x)=-x2<=0 g3(x)=6-x1-x2<=0 g4(x)=x1-x2-4<=0 g5(x)=x2-x1-4<=0g6(x)=x1^2+x2^2-1.414x1*x2-16<=0 g7(x)=36-x1^2-x2^2-1.414 x1*x2<=02.程序代码根据上述数学模型写出其程序代码 (1)function y=f(x) Pi=3.1416;c0=acos(((1+x(1))^2-x(2)^2+25)/(10*(1+x(1)))); d0=acos(((1+x(1))^2-x(2)^2-25)/(10*x(2))); y=0; for i=0:30;c=c0+Pi*i/60;r=(26-10*cos(c))^0.5;a=acos((r^2+x(2)^2-x(1)^2)/(2*r*x(2))); b=acos((r^2+24)/(10*r)); d=Pi-a-b;de=d0+2*(c-c0)^2/(3*Pi); y0=(d-de)^2*(Pi/60); y=y0+y;end………………………………….%建立f 文件计算目标函数的表达式(2)function [c1,c2]=nonlin(x)c1=[x(1)^2+x(2)^2-1.414*x(1)*x(2)-16;36-x(1)^2-x(2)^2-1.414*x(1)*x(2)]; c2=[];………………………..%建立nonlin 文件(3)A=[-1 -1;1 -1;-1 1];b=[-6;4;4]; lb=[0 0]; ub=[];Aeq=[]; beq=[];x0=[4 3];……………………….%给定初始搜索点[x,fval]=f mincon(@f,x0,A,b,Aeq,beq,lb,ub,@nonlin)…………..%建立约束优化条件并求最优解三运算结果及说明运用MA TLAB计算出结果跟课本运算结果最优解大致相同,但最优解的值有所区别,通过分析我认为其原因:由于Pi的值取的精度不同,初始点取得不同,导致运算的结果会有所区别,同时函数值即最优解的值比较小,而函数值变化浮动比较大。
机械优化设计经典实例PPT课件

x1
x2 x1
3/ 2
0
g3 (X ) 3 l 3 x3 0
g4 (X ) d x2 0
g5 ( X ) D d x1 x2 0
设计实例2: 平面连杆机构优化设计
一曲柄摇杆机构, M为连秆BC上一点, mm为预期的运动 轨迹,要求设计该 曲柄摇杆机构的有 关参数,使连杆上 点M在曲柄转动一 周中,其运动轨迹 (即连杆曲线)MM 最佳地逼近预期轨 迹mm。
6.12(x12 x22 )x3 106
设计实例1:
g1 ( X ) d 4 D 4 1.27 D 10 5 x2 4 x14 1.27 10 5 0
g2 ()
154.34D D4 d 4
Dd D
3/ 2
154.34x1 x14 x2 4
设计实例2:
设计一再现预期轨迹mm的曲柄摇杆机构。已知xA= 67mm,yA=10mm,等分数s=12,对应的轨迹mm 上12个点的坐标值见表,许用传动角[γ]=300。
设计实例2:
一、建立优化设计的数学模型
点M的坐标: xM xA l1 cos( ) l5 cos( ) yM yA l1 sin( ) l5 sin( )
( ) 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.初始化设计参数和步长。
2.计算当前设计参数下的目标函数值。
3.在当前方向上进行线,找到使目标函数值下降的步长。
4.更新设计参数,将方向和步长相乘加到当前设计参数上。
5.检查当前设计参数的变化是否满足终止条件,如果满足则结束,否则返回步骤26.返回最佳设计参数组合及对应的目标函数值。
下面以一个简单的机械优化设计案例为例进行详细说明。
假设有一个弹簧悬挂系统,需要设计合适的弹簧刚度和阻尼系数来满足特定的振动要求。
目标函数为最小化系统振动幅值。
首先,需要定义设计参数和目标函数。
设计参数可以选择弹簧刚度和阻尼系数。
目标函数可以定义为系统振动幅值的平方。
其次,需要确定方向和初始步长。
对于弹簧刚度和阻尼系数来说,方向可以选择正方向和负方向。
初始步长可以根据经验或试验来确定。
然后,根据鲍威尔法编程的步骤,进行迭代。
首先,初始化设计参数和步长。
然后,计算当前设计参数下的目标函数值。
接下来,根据当前方向和步长进行线,找到使目标函数值下降的步长。
再更新设计参数,将方向和步长相乘加到当前设计参数上。
最后,检查当前设计参数的变化是否满足终止条件,如果满足则结束,否则返回到线步骤继续。
最后,得到最佳的设计参数组合及对应的目标函数值。
可以根据实际情况进行设计参数的调整和优化,以获得更好的机械性能。
总之,鲍威尔法编程是一种常用的机械优化设计方法。
通过不断迭代的方式,寻找最佳的设计参数组合,以满足设计要求。
其原理和步骤相对简单,但需要结合具体问题进行参数的选择和调整。
机械优化设计上机完整版(程序)

X_0 = [1;1];X0_1 = X_0;fprintf(' 迭代初始点坐标为::X0_1 = [%6f;%6f]\n',X0_1)E = 0.001;e1 = [1;0];e2 = [0;1];S1_1 = e1;S2_1 = e2;f0 = X0_1(1)^2+2*X0_1(2)^2-4*X0_1(1)-2*X0_1(1)*X0_1(2);F1 = f0;syms a1X1_1 = X0_1 + a1*S1_1;f1 = X1_1(1)^2+2*X1_1(2)^2-4*X1_1(1)-2*X1_1(1)*X1_1(2);ff1=diff(f1);a1=solve(ff1);fprintf(' 第一轮第一次一维搜索的最优步长因子为::a1 = %6f\n',eval(a1))X1_1 = X0_1 + a1*S1_1;f1 =eval( X1_1(1)^2+2*X1_1(2)^2-4*X1_1(1)-2*X1_1(1)*X1_1(2));syms a2X2_1 = X1_1 + a2*S2_1;f2 = X2_1(1)^2+2*X2_1(2)^2-4*X2_1(1)-2*X2_1(1)*X2_1(2);ff2 = diff(f2);a2 = solve(ff2);fprintf(' 第一轮第二次一维搜索的最优步长因子为::a2 = %6f\n',eval(a2))X2_1 = X1_1 + a2*S2_1;f2 = eval(X2_1(1)^2+2*X2_1(2)^2-4*X2_1(1)-2*X2_1(1)*X2_1(2));F2 = f2;S_1 = X2_1-X0_1;fprintf(' 第一轮迭代完成过后,得到的第一个共轭方向向量为::S_1 = [%4f;%4f]\n',eval(S_1))X3_1 = 2*X2_1-X0_1;fprintf(' 沿着共轭方向S_1 计算X0_1 的映射点为::X3_1 = [%4f;%4f]\n',eval(X3_1)) F3 = eval(X3_1(1)^2+2*X3_1(2)^2-4*X3_1(1)-2*X3_1(1)*X3_1(2));Dt1_1 = f0-f1;Dt2_1 = f1-f2;Dtm_1 = max(Dt1_1,Dt2_1);if (F3<F1&(F1+F3-2*F2)*(F1-F2-Dtm_1)^2<0.5*Dtm_1*(F1-F3)^2)S1_2 = S2_1;S2_2 = S_1;elseS1_2 = S2_1;S2_2 = S1_1;endX_1 = X2_1+a3*S_1;f3 = X_1(1)^2+2*X_1(2)^2-4*X_1(1)-2*X_1(1)*X_1(2);ff3 = diff(f3);a3 = solve(ff3);X_1 = X2_1+a3*S_1;f3 = eval(X_1(1)^2+2*X_1(2)^2-4*X_1(1)-2*X_1(1)*X_1(2));X0_2 =eval(X_1);F_1 = f3;d1 = sqrt((X0_2(1)-X0_1(1))^2+(X0_2(2)-X0_1(2))^2);fprintf(' 第一轮迭代完成过后的精度检验值为::d1 = %4f\n',d1)if (d1>E)syms a4X1_2 = X0_2+a4*S1_2;f4 = X1_2(1)^2+2*X1_2(2)^2-4*X1_2(1)-2*X1_2(1)*X1_2(2);ff4 = diff(f4);a4 = solve(ff4);fprintf(' 第二轮迭代第一次一维搜索的最优步长因子为: a4 = %4f\n',eval(a4))X1_2 = X0_2+a4*S1_2;f4 = eval(X1_2(1)^2+2*X1_2(2)^2-4*X1_2(1)-2*X1_2(1)*X1_2(2));syms a5X2_2 = X1_2 + a5*S2_2;f5 = X2_2(1)^2+2*X2_2(2)^2-4*X2_2(1)-2*X2_2(1)*X2_2(2);ff5 = diff(f5);a5 = solve(ff5);fprintf(' 第二轮迭代第二次一维搜索的最优步长因子为: a5 = %4f\n',eval(a5))X2_2 = X1_2 + a5*S2_2;f5 = eval(X2_2(1)^2+2*X2_2(2)^2-4*X2_2(1)-2*X2_2(1)*X2_2(2));F_2 = f5;S_2 = X2_2-X0_2;fprintf(' 第二轮迭代完成过后,得到的第二个共轭方向向量为::S_2 = [%4f;%4f]\n',eval(S_2))X3_2 = 2*X2_2-X0_2;fprintf(' 沿着共轭方向S_2 计算X0_2 的映射点为::X3_2 = [%4f;%4f]\n',eval(X3_2)) F_3 = eval(X3_2(1)^2+2*X3_2(2)^2-4*X3_2(1)-2*X3_2(1)*X3_2(2));Dt1_2 = f3-f4;Dt2_2 = f4-f5;Dtm_2 = max(Dt1_1,Dt2_1);if (F_3<F_1&(F_1-2*F_2+F_3)*(F_1-F_2-Dtm_2)^2<0.5*Dtm_2*(F_1-F_3)^2)S1_3 = S2_2;S2_3 = S_2;elseS1_3 = S2_2;S2_3 = S1_2;endsyms a6X_2 = X2_2+a6*S_2;f6 = X_2(1)^2+2*X_2(2)^2-4*X_2(1)-2*X_2(1)*X_2(2);ff6 = diff(f6);a6 = solve(ff6);X_2 = X2_2+a6*S_2;f6 = eval(X_2(1)^2+2*X_2(2)^2-4*X_2(1)-2*X_2(1)*X_2(2));X0_3 = eval(X_2);F__1 = f6;d2 = sqrt((X0_3(1)-X0_2(1))^2+(X0_3(2)-X0_2(2))^2);fprintf(' 第二轮迭代完成过后的精度检验值为::d2 = %4f\n',d2)if(d2>E)syms a7X1_3 = X0_3+a7*S1_3;f7 = X1_3(1)^2+2*X1_3(2)^2-4*X1_3(1)-2*X1_3(1)*X1_3(2);ff7 = diff(f7);a7 = solve(ff7);fprintf(' 第三轮迭代第一次一维搜索的最优步长因子为: a7 = %4f\n',eval(a7))X1_3 = X0_3+a4*S1_3;f7 = eval(X1_3(1)^2+2*X1_3(2)^2-4*X1_3(1)-2*X1_3(1)*X1_3(2));syms a8X2_3 = X1_3 + a8*S2_3;f8 = X2_3(1)^2+2*X2_3(2)^2-4*X2_3(1)-2*X2_3(1)*X2_3(2);ff8 = diff(f8);a8 = solve(ff8);fprintf(' 第三轮迭代第二次一维搜索的最优步长因子为: a8 = %4f\n',eval(a8))X2_3 = X1_3+a8*S2_3;f8 = eval(X2_3(1)^2+2*X2_3(2)^2-4*X2_3(1)-2*X2_3(1)*X2_3(2));F__2 = f8;S_3 = X2_3-X0_3;fprintf(' 第三轮迭代完成过后,得到的第三个共轭方向向量为::S_3 = [%4f;%4f]\n',eval(S_3))X3_3 = 2*X2_3-X0_3;fprintf(' 沿着共轭方向S_3 计算X0_3 的映射点为::X3_3= [%4f;%4f]\n',eval(X3_3)) F__3 = eval(X3_3(1)^2+2*X3_3(2)^2-4*X3_3(1)-2*X3_3(1)*X3_3(2));Dt1_3 = f6-f7;Dt2_3 = f7-f8;Dtm_3 = max(Dt1_3,Dt2_3);if (F__3<F__1&(F__1-2*F__2+F__3)*(F__1-F__2-Dtm_3)^2<0.5*Dtm_3*(F__1-F__3)^2)S1_4 = S2_3;S2_4 = S_3;elseS1_4 = S2_3;S2_4 = S1_3;endsyms a9X_3 = X2_3+a9*S_3;f9 = X_3(1)^2+2*X_3(2)^2-4*X_3(1)-2*X_3(1)*X_3(2);ff9 = diff(f9);a9 = solve(ff9);X_3 = X2_3+a9*S_3;f9 = eval(X_3(1)^2+2*X_3(2)^2-4*X_3(1)-2*X_3(1)*X_3(2));X0_4 = eval(X_3);F___1 = f9;d3 = sqrt((X0_4(1)-X0_3(1))^2+(X0_4(2)-X0_3(2))^2);fprintf(' 第三轮迭代完成过后的精度检验值为::d3 = %4f\n',d3)if (d3>E)disp(' 进行第四次迭代!')elsedisp(' 满足精度要求,故迭代终止!')fprintf(' 本优化问题的最优解为::X_* = [%4f;%4f]\n',eval(X_3))f = eval(X_3(1)^2+2*X_3(2)^2-4*X_3(1)-2*X_3(1)*X_3(2));fprintf(' 本优化问题的最优函数值::f_* = %4f\n',f)endelsedisp(' 满足精度要求,故迭代终止!')fprintf(' 本优化问题的最优解为::X_* = [%4f;%4f]\n',eval(X_2))f = eval(X_2(1)^2+2*X_2(2)^2-4*X_2(1)-2*X_2(1)*X_2(2));fprintf(' 本优化问题的最优函数值::f_* = %4f\n',f)endelsedisp(' 满足精度要求,故迭代终止!')fprintf(' 本优化问题的最优解为::X_* = [%4f;%4f]\n',eval(X_1))f = eval(X_1(1)^2+2*X_1(2)^2-4*X_1(1)-2*X_1(1)*X_1(2));fprintf(' 本优化问题的最优函数值::f_* = %4f\n',f)end>> 迭代初始点坐标为::X0_1 = [1.000000;1.000000]第一轮第一次一维搜索的最优步长因子为::a1 = 2.000000第一轮第二次一维搜索的最优步长因子为::a2 = 0.500000第一轮迭代完成过后,得到的第一个共轭方向向量为::S_1 = [2.000000;0.500000] 沿着共轭方向S_1 计算X0_1 的映射点为::X3_1 = [5.000000;2.000000]第一轮迭代完成过后的精度检验值为::d1 = 2.886174第二轮迭代第一次一维搜索的最优步长因子为: a4 = 0.200000第二轮迭代第二次一维搜索的最优步长因子为: a5 = 0.080000第二轮迭代完成过后,得到的第二个共轭方向向量为::S_2 = [0.160000;0.240000] 沿着共轭方向S_2 计算X0_2 的映射点为::X3_2 = [4.120000;2.180000]第二轮迭代完成过后的精度检验值为::d2 = 0.360555第三轮迭代第一次一维搜索的最优步长因子为: a7 = 0.000000第三轮迭代第二次一维搜索的最优步长因子为: a8 = 0.100000第三轮迭代完成过后,得到的第三个共轭方向向量为::S_3 = [0.400000;0.200000] 沿着共轭方向S_3 计算X0_3 的映射点为::X3_3= [4.800000;2.400000]第三轮迭代完成过后的精度检验值为::d3 = 0.000000满足精度要求,故迭代终止!本优化问题的最优解为::X_* = [4.000000;2.000000]本优化问题的最优函数值::f_* = -8.000000>>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
燕山大学机械优化设计论文专业:12机械工程班级:工学部1班学号:姓名:2012年12月05日摘 要:机械优化设计是将最优化原理和计算技术应用于设计领域,为工程设计提供一种重要的科学设计方法。
机械优化设计包括建立优化设计问题的数学模型和选择恰当的优化方法与程序两方面的内容。
由于机械优化设计是应用数学方法寻求机械设计的最优方案,所以首先要根据实际的机械设计问题建立相应的数学模型,即用数学形式来描述实际设计问题。
在建立数学模型时,需要用专业知识确定设计的限制条件和所追求的目标,确立各设计变量之间的相互关系等。
机械优化设计问题的数学模型可以是解析式,实验数据或经验公式。
虽然它们给出的形式不同,但都是反应设计变量之间的数量关系的。
MATLAB 是目前国际上最流行的科学与工程计算的软件工具, 它具有强大的数值分析、矩阵运算、信号处理、图形显示、模拟仿真和最优化设计等功能。
本文用MATLAB 来解决机械设计中的几个常见的问题。
关键词:MATLAB ;优化;机械设计;软件1 引 言近年来发展起来的计算机辅助设计,在引入优化设计方法后,使得在设计过程中既能够不断选择设计参数并评选出最优设计方案,又可以加快设计速度,缩短设计周期。
在科学技术发展要求机械产品更新日益缩短的今天,把优化设计方法与计算机辅助设计结合起来,使设计过程完全自动化,已成为设计方法的一个重要趋势。
2 采用MATLAB 软件进行优化设计2.1.问题描述:求3682+-=t t f 的最优解2.1.1规划模型的建立:目标函数36102+-=t t f约束条件无约束2.1.2对应的程序:clcclearsyms tf=t^2-10*t+36;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-1)*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-1)*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);t_min=a2;f_min=f2;elseb=a2;a2=a1;a1=b-k*(b-a);f2=f1;f1=subs(f,a1);t_min=a1;f_min=f1;endc=(b-a)/2;endt_minf_min2.1.3运行结果2.1.4 程序基本原理此程序运用的是黄金分割法,黄金分割法适用于〔a ,b 〕区间上的任何单谷函数求极小值问题。
黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间〔a ,b 〕内插入两点并计算其函数值,将区间分成三段。
应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间无限缩小,从而得到极小点的数值近似解。
2.1.5 结 论黄金分割法可以通过最少的试验次数,找到“最佳点”。
它是一个一维的搜索方法,并且比较精确,配合计算机MATLAB 软件更能实现求解的快速性和准确性。
2.2.问题描述:求221212221)6182324844949()112()(min -++++-+=x x x x x x x f 的最优解2.2.1规划模型的建立:目标函数221212221)6182324844949()112()(min -++++-+=x x x x x x x f初始条件:[]Tx 1,10= ()33307690=x f 约束条件无约束2.2.2对应的程序:syms t1 t2f=(t1^2+12*t2-1)^2+(49*t1+49*t2+84*t1+2324*t2-681)^2;x0=[1;1]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); %产生在x0点的梯度d0=H0*g0;a=buchang(x0,d0,f);x1=x0-a*d0; %产生第一个点xcha=x1-x0; %计算两点之间的距离dis=mo(xcha);k=0;while dis>1e-5 %收敛条件g1=subs(g,b,x1); %判断在迭代点是否梯度为0if 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);x1 %输出每次的迭代点subs(f,b,x1) %迭代点的函数值k=k+1 %显示迭代次数end2.2.3运行结果2.1.4 程序基本原理 变量的尺度变换是放大或缩小各个坐标。
通过尺度变换可以把函数的偏心程度降低到最低到最低限制。
尺度变换技巧能显著地改进几乎所有极小化方法的收敛性质。
用最速下降法求22212125),(x x x x f +=的极小值时,需要进行10次迭代才能达到最小值点[]T x 0,0*=。
但是,若变换 11x y =225x y =即把2x 的尺度放大5倍,就可以将等值线为椭圆的函数),(21x x f 变换成等值线为圆的函数222121),(y y y y +=ψ,从而消除了函数的偏心,用最速下降法只需一次迭代即可求得最小值点。
在Newton 法中,基本迭代公式k k k k P t X X +=+1, 其中,1=k t ,)()]([12k k k X f X f P ∇∇-=-,于是有2,1,0,11=-=-+k g G X X k k k k (1)其中0X 是初始点,k g 和k G 分别是目标函数)(X f 在点k X 的梯度和Hesse 矩阵.为了消除这个迭代公式中的Hesse 逆矩阵1-k G ,可用某种近似矩阵)(k k X H H =来替换它,即构造一个矩阵序列}{k H 去逼近Hesse 逆矩阵序列}{1-k G此时式(1)变为k k k k g H X X -=+1事实上,式中k k k g H P -=无非是确定了第k 次迭代的搜索方向,为了取得更大的灵活性,我们考虑更一般的的迭代公式k k k k k g H t X X -=+1 (2)其中步长因子k t 通过从k X 出发沿k k k g H P -=作直线搜索来确定.式(2)是代表很长的一类迭代公式.例如,当I H k ≡(单位矩阵)时,它变为最速下降法的迭代公式.为使k H 确实与1-k G 近似并且有容易计算的特点,必须对k H 附加某些条件:第一,为保证迭代公式具有下降性质,要求}{k H 中的每一个矩阵都是对称 正定的.理由是,为使搜索方向k k k g H P -=是下降方向,只要0<-=-k k T k k T k g H g P g成立即可,即0>k k T k g H g成立.当k H 对称正定时,此公式必然成立,从而保证式(2)具有下降性质.第二,要求k H 之间的迭代具有简单形式.显然,k k k E H H +=+1 (3)是最简单的形式了.其中k E 称为校正矩阵,式(3)称为校正公式.第三,必须满足拟Newton 条件.即:)()(111k k k k k X X g g H -=-+++ (4)为了书写方便也记k k k g g y -=+1k k k X X S -=+1于是拟Newton 条件可写为k k k S y H =+1 (5)有式(3)和(5)知,k E 必须满足k k k k S y E H =+)(或k k k k k y H S y E == (6)2.2.5 结 论通过对本题的求解结果[]Tx 2681.0,3363.0*= 4318.5)(*=x f 与精确解[]Tx 27936.0,28581.0*= 9225.5)(*=x f 的比较虽然DFP 变尺度法具有综合了梯度法、牛顿法的优点而又避弃它们各自的缺点,只需计算一阶偏导数,无需计算二阶偏导数及其逆矩阵,对目标函数的初始点选择均无严格要求,收敛速度快的特点,但是还是会有一定的误差。
2.3.问题描述:求2221)1()2()(min -+-=x x x f 的最优解2.3.1规划模型的建立:目标函数2221)1()2()(m i n -+-=x x x f约束条件02211≤-=x x g022211≤-+=x x g初始条件[]T x 3,30= ()50=x f2.3.2对应的程序: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);2.3.3运行结果2.3.4 程序基本原理fmincon运行首先检查有无梯度表达提供,如有则选则大规模算法(subspace trust region),由此涉及到Hessian阵的近似计算,由于已提供了梯度的公式,则Hessian阵可以直接通过有限差分计算。
但是如果用户直接提供了Hessian计算公式,则直接计算。
如果没有梯度表达式提供,fmincon选则SQP算法,算法中Hessian阵可以通过BFGS迭代,初始Hessian阵任给。
注意BFGS公式中q项是需要计算目标函数梯度得到的。
所以Hessian矩阵的近似计算是需要用到有限差分法。
2.3.5 结论由以上实例可知,采用基于MATLAB软件的计算方法解决优化设计问题,求解程序简单、编程量小、求解效率高,能满足求解离散优化问题的要求,保证得到符合工程要求的最优解,从而可以获得很好的优化结果。