机械优化设计王荣老师.docx
- 文档编号:3798727
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:37
- 大小:405.84KB
机械优化设计王荣老师.docx
《机械优化设计王荣老师.docx》由会员分享,可在线阅读,更多相关《机械优化设计王荣老师.docx(37页珍藏版)》请在冰豆网上搜索。
机械优化设计王荣老师
(一)一维搜索方法
1.1题目:
1.2最优解:
1.3采用的算法及其算法的基本思想:
首先采用进退法确定函数极值点所在的搜索区间[a,b],然后采用牛顿法求出极值。
进退法的基本思想:
按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。
黄金分割法的基本思想:
通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。
按
(
)缩小比较
大小确定取舍区间。
1.4程序框图:
进退法和黄金分割法流程图如下:
图1进退法流程图
图2黄金分割法程序框图
1.5具体程序如下:
共3个M文件,文件名分别为:
F.m;JINTUI.m;FGOLDEN.m
F.m具体程序:
%定义f(x)函数的表达式f(x)=t^2-10*t+36
functiony=F(t)
y=t^2-10*t+36;
JINTUI.m具体程序:
function[t,minF]=FGOLDEN(precision,a0,h)
[a,b]=JINTUI(a0,h);
A=a;
B=b;
n=1;
while0.618^(n-1)>=precision
C=A+0.312*(B-A);
D=A+0.618*(B-A);
ifC ifF(C) B=D; else A=C; end else ifF(C) A=C; else B=D; end end n=n+1; end t=A; minF=F(A); FGOLDEN.m具体程序如下: function[x1,x2]=JINTUI(a0,h) a=a0; b=a0+h; while1 ifF(a) h=-h; a=a+h; b=a-h; ifF(b) break; end else a=b; b=a+h; ifF(a) break; end end end x1=a; x2=b; 1.6输出结果: 2.1题目: 2.2最优解: 2.3采用的算法及其算法的基本思想: 首先采用进退法确定函数极值点所在的搜索区间[a,b],然后采用牛顿法求出极值。 进退法的基本思想: 按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。 黄金分割法的基本思想: 通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。 按 ( )缩小比较 大小确定取舍区间。 2.4程序框图: 进退法和黄金分割法流程图如下: 图1进退法流程图 图2黄金分割法程序框图 2.5具体程序如下: 共3个M文件,文件名分别为: F12.m;JINTUI12.m;FGOLDEN12.m F12.m具体程序: %定义f(x)函数的表达式f(x)=t^4-5*t^3+4*t^2-6*t+60 functiony12=F12(t) y12=t^4-5*(t^3)+4*(t^2)-6*t+60; JINTUI12.m具体程序如下: %用进退法找到合适的初始区间 function[x1,x2]=JINTUI12(a0,h) a=a0; b=a0+h; while1 ifF12(a) h=-h; a=a+h; b=a-h; ifF12(b) break; end else a=b; b=a+h; ifF12(a) break; end end end x1=a; x2=b; FGOLDEN12具体程序如下: %定义黄金分割法函数模块 function[t,minF12]=FGOLDEN12(precision,a0,h) %初始区间[a,b],精度precision,为区间的多少分之一 %a0为初始区间,h为步长 [a,b]=JINTUI12(a0,h); A=a; B=b; n=1; while0.618^(n-1)>=precision C=A+0.312*(B-A); D=A+0.618*(B-A); %以上黄金分割法赋值 ifC ifF12(C) B=D; else A=C; end %判断1,取区间AD,将D点值赋给B或是取区间CB else ifF12(C) A=C; else B=D; end end %判断2 n=n+1;%循环加1 end t=A; minF12=F12(A); 2.6计算运行结果如下: 3.1题目: 3.2最优解: 3.3采用的算法及其算法的基本思想: 首先采用进退法确定函数极值点所在的搜索区间[a,b],然后采用牛顿法求出极值。 进退法的基本思想: 按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。 黄金分割法的基本思想: 通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。 按 ( )缩小比较 大小确定取舍区间。 3.4程序框图: 进退法和黄金分割法流程图如下: 图3.1进退法流程图 图3.2黄金分割法程序框图 3.5具体程序如下: 共3个M文件,文件名分别为: F13.m;JINTUI13.m;FGOLDEN13.m F13.m: %定义f(x)函数的表达式f(x)=(t+1)(t-2)^2 functiony13=F13(t) y13=t^3-3*t^2+4; JINTUI13.m: %用进退法找到合适的初始区间 function[x1,x2]=JINTUI13(a0,h) a=a0; b=a0+h; while1 ifF13(a) h=-h; a=a+h; b=a-h; ifF13(b) break; end else a=b; b=a+h; ifF13(a) break; end end end x1=a; x2=b; FGOLDEN13.m %定义黄金分割法函数模块 function[t,minF13]=FGOLDEN13(precision,a0,h) %初始区间[a,b],精度precision,为区间的多少分之一 %a0为初始区间,h为步长 [a,b]=JINTUI13(a0,h); A=a; B=b; n=1; while0.618^(n-1)>=precision C=A+0.312*(B-A); D=A+0.618*(B-A); %以上黄金分割法赋值 ifC ifF13(C) B=D; else A=C; end %判断1,取区间AD,将D点值赋给B或是取区间CB else ifF13(C) A=C; else B=D; end end %判断2 n=n+1;%循环加1 end t=A; minF13=F13 (2); 3.6计算运行结果如下: 二无约束优化问题 1.1题目: 1.2最优解: 1.3采用的算法及其算法的基本思想: 将f(x)在x(k)点作泰勒展开,取二次函数式Φ(x)作为近似函数,以Φ(x)的极小值点作为f(x)的近似极小值点。 求二次函数的极值 1.4程序框图: 牛顿法程图如下: 1.6程序: 共一个main21.m文件: main21.m具体程序如下: clc;clearall; symsx1x2tpmaxnprecision;%定义变量 f21=4*x1^2+x2^2-40*x1-12*x2+136;%定义函数 fx1=diff(f21,x1);%对f求x1偏导求的一阶导数;diff(函数,n),求的n阶导数(n是具体整数);%diff(函数,变量名),求对的偏导数;diff(函数,变量名,n) fx2=diff(f21,x2);%对f求x2偏导 p=0;g=1; disp('用梯度法求二元二次目标函数f(X)=4*x1^2+x2^2-40*x1-12*x2+136的最优解'); fori=1: 5%fori=1: 5 if(p==0)%if(p==0) x1=input('Pleaseentertheinitialstartingpointx1: '); x2=input('Pleaseentertheinitialstartingpointx2: '); maxn=input('Pleaseenterthemaxmumnumberofinterationsmaxn: '); precision=input('Pleaseentertheminimumofthesearchingdirectionprecision: '); g=input('Outputtheresultofeachinteration,ifyouwantEnter1,ornot: '); fora=1: maxn%fora=1: 2: 8,则每次取值为1,3,5,7.其中2是步长 %但步长为1时可省略即原式为forn=1: 1: 100 f0=subs(f21);%subs(函数名)将函数里的变量用已知量代换对f中的变量带入已知量 f1=subs(fx1);%subs(函数名)将函数里的变量用已知量代换对fx1中的变量带入已知量 f2=subs(fx2);%subs(函数名)将函数里的变量用已知量代换对fx2中的变量带入已知量 if(double(sqrt(f1^2+f2^2))<=precision)%计算梯度模值进行比较 %以下为输出函数 disp('*************************************************************************'); disp('Theresult: '); disp('Thetotalnumberofinterationsa: '); disp('Thevalueofextremumx1: '); vpa(x1,5)%vpa函数来实现数值精确到小数点后某一位vpa会根据精度要求去掉末尾的数位%或者补0vpa(x1,7) %vpa的结果是符号数值,可以用于初等运算,不可用于关系运算以小数形式表示 disp('Thevalueofextremumx2: '); vpa(x2,5) disp('Thefunctionofextremumvalue: '); vpa(f0) p=1;break; else FF=F21(x1-t*f1,x2-t*f2);%最优解为t FFt=diff(FF,t); tt=solve(FFt,'t');%solve命令主要是用来求解代数方程(即多项式)的解即求解满足此中默认FFt=0;x1=x1-tt*f1;x2=x2-tt*f2; if(g==1) disp('Thenumberofinterationsa: '); disp('Thevalueofx1: '); x1=vpa(x1,5)%vpa函数来实现数值精确到小数点后某一位vpa会根据精度要求去掉末尾的数位或者补0vpa(x1,5) %vpa的结果是符号数值,可以用于初等运算,不可用于关系运算以小数形式表示 disp('Thevalueofx2: '); x2=vpa(x2,5); disp('Thevalueoffunctionf0: '); f0=vpa(f0,5) disp('*************************************************************************'); end end%对if进行结束 end%对for进行结束 if(p==0) disp('PLEASETRYAGAIN'); end%if(p==0) end%if(p==0)头一个 end%fori=1: 5 1.7计算输出结果: 2.1题目: 2.2最优解: 2.3采用的算法及其算法的基本思想: 将f(x)在x(k)点作泰勒展开,取二次函数式Φ(x)作为近似函数,以Φ(x)的极小值点作为f(x)的近似极小值点。 求二次函数的极值 2.4程序框图: (牛顿法程图如下) 2.5具体程序: Main22具体程序如下: %用牛顿法求目标函数f(x)=(x1^2+x2-11)^2+(x1+x2^2-7)^2的最优解 clc; symsx1x2precision; f=(x1^2+x2-11)^2+(x1+x2^2-7)^2; v=[x1x2]; df=jacobian(f,v); df=df.'; H=jacobian(df,v); disp('**********************************************************'); disp('用牛顿法求目标函数f(x)=(x1^2+x2-11)^2+(x1+x2^2-7)^2的最优解'); disp('**********************************************************'); disp('请输入初始位置点以及精度要求'); fprintf('\n'); x1=input('选取的初始点坐标点x1: '); x2=input('选取的初始点坐标点x2: '); precision=input('计算所要求迭代精度为: '); x0=[x1,x2]'; g0=subs(df,v,x0); H0=subs(H,v,x0); H0=inv(H0); k=0; s=-H0*g0; while(subs(sqrt(s(1,1)^2+s(2,1)^2))>precision) s=-H0*g0; x0=x0+s; g0=subs(df,v,x0); H0=subs(H,v,x0); H0=inv(H0); k=k+1; end disp('----------------------------------'); disp('计算结果如下: '); fprintf('迭代的总次数: \nk=%d\n',k); fprintf('最优点坐标: \nx1=%3.4f\n',x0 (1)); fprintf('最优点坐标: \nx2=%3.4f\n',x0 (2)) f=subs(f,v,x0); fprintf('函数的极值: \nf=%3.4f\n',f); disp('*************************************************'); disp('*************************************************'); 2.6计算和输出结果: 3.1题目: 3.2最优解: 3.3采用的算法及其算法的基本思想: 将f(x)在x(k)点作泰勒展开,取二次函数式Φ(x)作为近似函数,以Φ(x)的极小值点作为f(x)的近似极小值点。 求二次函数的极值 3.4程序框图: 3.5程序: 共一个M文件: main23.m: %用牛顿法求目标函数f(x)=(x1^2+10*x2)^2+5*(x3-x4^2)^2+(x2-2*x3)^2+10*(x1-x4)^4最优解 clc; symsx1x2x3x4precision; f=(x1^2+10*x2)^2+5*(x3-x4^2)^2+(x2-2*x3)^2+10*(x1-x4)^4;%目标函数 v=[x1x2x3x4];%变量向量 df=jacobian(f,v);%梯度 df=df.';%非共轭转置 H=jacobian(df,v);%海森矩阵 disp('************************************************************************'); disp('用牛顿法求目标函数f(x)=(x1^2+10*x2)^2+5*(x3-x4^2)^2+(x2-2*x3)^2+10*(x1-x4)^4的最优解'); disp('***********************************************************************'); disp('请输入初始位置点以及精度要求'); fprintf('\n'); x1=input('选取的初始点坐标点x1: '); x2=input('选取的初始点坐标点x2: '); x3=input('选取的初始点坐标点x3: '); x4=input('选取的初始点坐标点x4: '); precision=input('计算所要求迭代精度要求: '); x0=[x1,x2,x3,x4]';g0=subs(df,v,x0);H0=subs(H,v,x0); H0=inv(H0);%海森矩阵的逆 k=0;s=-H0*g0; while(subs(sqrt(s(1,1)^2+s(2,1)^2)+s(3,1)^2+s(4,1)^2)>precision) s=-H0*g0;x0=x0+s; g0=subs(df,v,x0);%求梯度的值 H0=subs(H,v,x0);%求海森矩阵的值 H0=inv(H0); k=k+1; end disp('----------------------------------'); disp('计算结果如下: '); fprintf('迭代的总次数: \nk=%d\n',k);fprintf('最优点坐标: \nx1=%3.4f\n',x0 (1)); fprintf('最优点坐标: \nx2=%3.4f\n',x0 (2));fprintf('最优点坐标: \nx3=%3.4f\n',x0(3)); fprintf('最优点坐标: \nx4=%3.4f\n',x0(4));f=subs(f,v,x0); fprintf('函数的极值: \nf=%3.4f\n',f); disp('*************************************************'); disp('*************************************************'); 3.6计算结果如下: 三约束优化问题 1.1题目: 1.2最优解: 1.3采用的算法及其算法的基本思想: 采用的为外点法来进行计算。 其基本思想: 外点法是从可行域的外部构造一个点序列去逼近原约束问题的最优解。 构造函数进行计算。 1.4程序框图: 1.5程序: 共2个M文件,分别为: main31.m和fdd31.m. main31.m具体如下: %用外点法求多维有约束目标函数f(x)=(x1-2)^2+(x2-1)^2极值 clc; k=0; M=1; c=10; symsx1x2precision1precision2a1a2; v=[x1x2];%变量向量 f=(x1-2)^2+(x2-1)^2;%目标函数 g1=-x1^2-x2; g2=x1+x2-2; disp('****************************************************'); disp('用外点法求多维有约束目标函数f(x)=(x1-2)^2+(x2-1)^2极值'); disp('****************************************************'); disp('请输入初始位置点以及精度要求'); fprintf('\n'); a1=input('选取的初始点坐标点a1: '); a2=input('选取的初始点坐标点a2: '); precision1=input('计算所要求迭代精度要求precision1: '); precision2=input('计算所要求迭代精度要求precision2: '); X0=[a1,a2]'; while(k<100) q=f+M*((g1)^2+(g2)^2); X1=fdd31(q,x1,x2,X0); norm=subs(sqrt((X1 (1)-X0 (1))^2+(X1 (2)-X0 (2))^2)); ff0=subs(subs(q,v,X0)); ff1=subs(subs(q,v,X1)); if(norm<=precision1)&(abs((ff0-ff1)/ff0)<=precision2) break; end X0=X1; M=c*M; k=k+1; end disp('------------------------------------------'); disp('计算结果如下: '); fprintf('迭代的总次数: \nk=%d\n',k); fprintf('最优点坐标: \nx1=%3.4f\n',X0 (1)); fprintf('最优点坐标: \nx2=%3.4f\n',X0 (2)); f=subs(f,v,X0); fprintf('函数的极值: \nf=%3.4f\n',f); disp('********************************************************************'); disp('********************************************************************'); fdd31.m具体如下: functionsc=fdd31(f,x1,x2,X0) symsv;v=[x1,x2];%变量向量 df=jacobian(f,v);%梯度 df=df.';G=jacobian(df,v);%海森矩阵
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 优化 设计 老师
![提示](https://static.bdocx.com/images/bang_tan.gif)