1、机械优化设计王荣老师复习过程(一) 一维搜索方法1.1 题目: 1.2 最优解: 1.3 采用的算法及其算法的基本思想:首先采用进退法确定函数极值点所在的搜索区间a, b,然后采用牛顿法求出极值。进退法的基本思想:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。黄金分割法的基本思想:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。按()缩小 比较大小 确定取舍区间。1.4 程序框图: 进退法和黄金分割法流程图如下: 图1 进退法流程图图2 黄金分割法程序框图1.5 具体程序如下:共3个M文件,文件名分别为:F.m;JINTUI.m;FGOL
2、DEN.mF.m具体程序:%定义f(x)函数的表达式f(x)=t2-10*t+36function y=F(t)y=t2-10*t+36;JINTUI.m具体程序:function t,minF=FGOLDEN(precision,a0,h)a,b=JINTUI(a0,h); A=a; B=b; n=1;while 0.618(n-1)=precision C=A+0.312*(B-A); D=A+0.618*(B-A); if CD if F(C)F(D) B=D; else A=C; end else if F(C)F(D) A=C; else B=D; endend n=n+1; end
3、t=A;minF=F(A);FGOLDEN.m具体程序如下:function x1,x2=JINTUI(a0,h) a=a0; b=a0+h;while 1 if F(a)F(b) h=-h; a=a+h; b=a-h; if F(b)F(b-h)&F(b)F(a) break; end else a=b; b=a+h; if F(a)F(b)&F(a)F(a-h) break; end endendx1=a;x2=b;1.6 输出结果: 2.1 题目: 2.2 最优解: 2.3 采用的算法及其算法的基本思想:首先采用进退法确定函数极值点所在的搜索区间a, b,然后采用牛顿法求出极值。进退法的
4、基本思想:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。黄金分割法的基本思想:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。按()缩小 比较大小 确定取舍区间。2.4程序框图: 进退法和黄金分割法流程图如下: 图1 进退法流程图图2 黄金分割法程序框图2.5具体程序如下:共3个M文件,文件名分别为:F12.m;JINTUI12.m;FGOLDEN12.mF12.m具体程序:%定义f(x)函数的表达式f(x)=t4-5*t3+4*t2-6*t+60function y12=F12(t)y12=t4-5*(t3)+4*(t2)-6*t+60
5、;JINTUI12.m具体程序如下:%用进退法找到合适的初始区间function x1,x2=JINTUI12(a0,h) a=a0; b=a0+h;while 1 if F12(a)F12(b) h=-h; a=a+h; b=a-h; if F12(b)F12(b-h)&F12(b)F12(a) break; end else a=b; b=a+h; if F12(a)F12(b)&F12(a)=precision C=A+0.312*(B-A); D=A+0.618*(B-A); %以上黄金分割法赋值 if CD if F12(C)F12(D) B=D; else A=C; end %判断
6、1,取区间AD,将D点值赋给B或是取区间CBelse if F12(C)F12(D) A=C; else B=D; endend%判断2 n=n+1; %循环加1endt=A;minF12=F12(A);2.6 计算运行结果如下:3.1 题目: 3.2 最优解: 3.3 采用的算法及其算法的基本思想:首先采用进退法确定函数极值点所在的搜索区间a, b,然后采用牛顿法求出极值。进退法的基本思想:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。黄金分割法的基本思想:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。按()缩小 比较大小 确定取舍区
7、间。3.4程序框图: 进退法和黄金分割法流程图如下: 图3.1 进退法流程图 图3.2 黄金分割法程序框图3.5具体程序如下:共3个M文件,文件名分别为:F13.m;JINTUI13.m;FGOLDEN13.mF13.m: %定义f(x)函数的表达式f(x)=(t+1)(t-2)2function y13=F13(t)y13=t3-3*t2+4;JINTUI13.m:%用进退法找到合适的初始区间function x1,x2=JINTUI13(a0,h) a=a0; b=a0+h;while 1 if F13(a)F13(b) h=-h; a=a+h; b=a-h; if F13(b)F13(b
8、-h)&F13(b)F13(a) break; end else a=b; b=a+h; if F13(a)F13(b)&F13(a)=precision C=A+0.312*(B-A); D=A+0.618*(B-A); %以上黄金分割法赋值 if CD if F13(C)F13(D) B=D; else A=C; end %判断1,取区间AD,将D点值赋给B或是取区间CBelse if F13(C)F13(D) A=C; else B=D; endend%判断2 n=n+1; %循环加1endt=A;minF13=F13(2);3.6 计算运行结果如下:二 无约束优化问题1.1 题目: 1
9、.2 最优解: 1.3 采用的算法及其算法的基本思想: 将f(x)在x(k)点作泰勒展开,取二次函数式(x) 作为近似函数,以(x)的极小值点作为 f(x)的近似极小值点。求二次函数的极值1.4程序框图: 牛顿法程图如下:1.6 程序:共一个main21.m文件: main21.m具体程序如下:clc;clear all;syms x1 x2 t p maxn precision; %定义 变量 f21=4*x12+x22-40*x1-12*x2+136;%定义函数 fx1=diff(f21,x1); % 对f求x1偏导 求的一阶导数; diff(函数, n) , 求的n阶导数(n是具体整数)
10、; %diff(函数,变量名), 求对的偏导数; diff(函数, 变量名,n)fx2=diff(f21,x2); %对f求x2偏导p=0;g=1;disp( 用梯度法求二元二次目标函数f(X)=4*x12+x22-40*x1-12*x2+136的最优解);for i=1:5 %for i=1:5if(p=0) %if(p=0)x1=input(Please enter the initial starting point x1:);x2=input(Please enter the initial starting point x2:);maxn=input(Please enter the
11、 maxmum number of interations maxn:);precision=input(Please enter the minimum of the searching direction precision:);g=input(Output the result of each interation,if you want Enter 1,or not:);for a=1:maxn % for a=1:2:8,则每次取值为1,3,5,7.其中2是步长 %但步长为1时可省略 即原式为 for n=1:1:100f0=subs(f21); %subs(函数名)将函数里的变量用
12、已知量代换 对f中的变量带入已知量f1=subs(fx1); %subs(函数名)将函数里的变量用已知量代换 对fx1中的变量带入已知量f2=subs(fx2); %subs(函数名)将函数里的变量用已知量代换 对fx2中的变量带入已知量if (double(sqrt(f12+f22) precision) s=-H0*g0; x0=x0+s; g0=subs(df,v,x0); H0=subs(H,v,x0); H0=inv(H0); k=k+1;enddisp(-);disp(计算结果如下:);fprintf(迭代的总次数:n k=%dn,k);fprintf(最优点坐标 :n x1=%3
13、.4fn,x0(1);fprintf(最优点坐标 :n x2=%3.4fn ,x0(2)f=subs(f,v,x0);fprintf(函数的极值:n f=%3.4fn,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)=(x12+10*x2)2+5*(x3-x42)2+(x2-2*x3
14、)2+10*(x1-x4)4最优解clc;syms x1 x2 x3 x4 precision;f=(x12+10*x2)2+5*(x3-x42)2+(x2-2*x3)2+10*(x1-x4)4;%目标函数v=x1 x2 x3 x4; %变量向量df=jacobian(f,v);%梯度 df=df.; %非共轭转置H=jacobian(df,v);%海森矩阵 disp(*);disp(用牛顿法求目标函数f(x)=(x12+10*x2)2+5*(x3-x42)2+(x2-2*x3)2+10*(x1-x4)4的最优解);disp(*);disp(请输入初始位置点以及精度要求);fprintf(n)
15、;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)
16、; %求梯度的值 H0=subs(H,v,x0); %求海森矩阵的值 H0=inv(H0); k=k+1;enddisp(-);disp(计算结果如下:);fprintf(迭代的总次数:n k=%dn,k);fprintf(最优点坐标 :n x1=%3.4fn,x0(1);fprintf(最优点坐标 :n x2=%3.4fn ,x0(2);fprintf(最优点坐标 :n x3=%3.4fn ,x0(3);fprintf(最优点坐标 :n x4=%3.4fn ,x0(4);f=subs(f,v,x0);fprintf(函数的极值:n f=%3.4fn,f);disp(*);disp(*);3.
17、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;syms x1 x2 precision1 precision2 a1 a2;v=x1 x2; %变量向量f=(x1-2)2+(x2-1)2;%目
18、标函数g1=-x12-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(k100) q=f+M*(g1)2+(g2)2); X1=fdd31(q,x1,x
19、2,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; enddisp(-);disp(计算结果如下:);fprintf(迭代的总次数:n k=%dn,k);fprintf(最优点坐标 :n x1=%3.4fn,X0(1);fprintf(最优点坐标 :n x2=%3.4fn ,X0(2);f=subs(f,v,X0);fprintf(函数的极值:n f=%3.4fn,f);disp(*);disp(*);fdd31.m具体如下:function sc=fdd31(f,x1,x2,X0)syms v;v=x1,x2; %变量向量df=jacobian(f,v);%梯度 df=df.; G=jacobian(df,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1