机械优化设计一维搜索实验报告
机械优化设计实验报告
![机械优化设计实验报告](https://img.taocdn.com/s3/m/437d409903d276a20029bd64783e0912a2167c37.png)
《机械优化设计》课程实验报告M a t l a b优化工具箱一、实验目的和要求熟悉Matlab7.0软件的界面和基本功能,了解Matlab优化工具箱的常用算法;使用Matlab优化工具箱的f m i n u n c/f m i n s e a r c h函数求解多变量非线性无约束优化问题;使用Matlab优化工具箱的f m i n c o n函数求解多变量非线性约束优化问题。
二、实验设备和软件台式计算机,Matlab7.0软件。
三、实验内容求解下列优化问题的最优解。
要求:(1)编写求解优化问题的M文件,(2)在命令窗口输入求解优化问题的命令,并得出计算结果。
1、标量优化问题1) f=x2-10x+362) f=x4-5x3+4x2-6x+603) f=(x+1)(x-2)22、多变量非线性无约束优化问题1) f=4(x1-5) 2+( x2-6) 2初始点:x0=[8,9]T;2) f=(x12+x2-11)2+( x1+ x22-7)2初始点:x0=[1,1]T;3) f=[1.5- x1(1- x2)]2+[2.25- x1(1- x22)]2+[2.625- x1(1- x23)]2初始点:x0=[2,0.2]T;4) f=( x12+12 x2-1)2+(49 x1+49 x2+84 x1+2324 x2-681)2初始点:x0=[1,1]T;5) f=( x1+10 x2)2+5(x3- x4)2+( x2-2 x3)4+10(x1- x4)4初始点:x0=[3,-1,0,1]T;3、多变量非线性约束优化问题1) f=( x1-2)2+( x2-1)2g1= x12-x2≤0g2= x1+x2-2≤0初始点:x0=[3,3]T;2) f= x23[( x1-3)2-9]/273≤0g1=x2-x1/3≤0g2=-x1+x2/3≤0g3=x1+x2/3-6≤0g4=-x1≤0g5=-x2≤0初始点:x0=[1,5]T;3) f=1000- x12-2x2 2-x32-x1x2-x1x3g1=-x1≤0g2=-x2≤0g3=-x3≤0g4=x12+x22+x3 2-25=0g5=8x1+14x2+7x3-56=0初始点:x0=[2,2,2]T4)f=100(x2-x12)2+(1-x1)2+90(x4-x32)2+(1-x3)2+10[(x2-1)2+(x4-1)2]+19.8(x2-1)(x4-1)-10≤x1≤10-10≤x2≤10-10≤x3≤10-10≤0x4≤10初始点:x0=[-3,-1,-3,-1]T;四、M文件、在命令窗口输入的求解命令清单及计算结果记录>>1、(1)目标函数的M文件function f=fun1(x)f=x^2-10*x+36调用求解命令x0=0;options=optimset('LargeScale','off');lb=-10;ub=10;[x,fval]=fminbnd(@fun1,lb,ub,options)或{ x0=0; [x,fval]=fminbnd(@fun1,-10,10)} x =5.0000fval =11.00002、(2)目标函数的M文件function f=fun2(x)f=x^4-5*x^3+4*x^2-6*x+60调用求解命令x0=0;options=optimset('LargeScale','off');lb=0;ub=10;[x,fval]=fminbnd(@fun2,lb,ub,options)x =3.2796fval =22.65902、(3)目标函数的M文件function f=fun3(x)f=(x+1)*(x-2)^2调用求解命令> x0=0;options=optimset('LargeScale','off');lb=0;ub=10;[x,fval]=fminbnd(@fun3,lb,ub,options)x =2.0000fval =1.9953e-0113(1)目标函数的M文件function f=fun4(x)f=4*(x(1)-5)^2+(x(2)-6)^2调用求解命令x0=[8,9];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun4,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =5.00006.0000fval =1.7876e-0123(2)目标函数的M文件function f=fun5(x)f=(x(1)^2+x(2)-11)^2+(x(1)+x(2)^2-7)^2调用求解命令>> x0=[1,1];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun5,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =3.0000 2.0000fval =5.2125e-0123(3)目标函数的M文件function f=fun6(x)f=[1.5-x(1)*(1-x(2))]^2+[2.25-x(1)*(1-x(2)^2)]^2+[2.625-x(1)*(1-x(2)^3)]^2调用求解命令x0=[2,0.2];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun6,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =3.0000 0.5000fval =3.9195e-0143(4)目标函数的M文件function f=fun7(x)f=(x(1)^2+12*x(2)-1)^2+(49*x(1)+49*x(2)+84*x(1)+2324*x(2)-681)^2调用求解命令x0=[1,1];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun7,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =0.9570 0.2333fval =7.37643(5)目标函数的M文件function f=fun8(x)f=(x(1)+10*x(2))^2+5*(x(3)-x(4))^2+(x(2)-2*x(3))^4+10*(x(1)-x(4))^4调用求解命令>> x0=[3,-1,0,1];options=optimset('LargeScale','off');[x,fval]=fminunc(@fun8,x0,options)Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x =0.0015 -0.0002 -0.0031 -0.0031fval =6.3890e-009三、3、(1)目标函数的M文件function f=fun9(x)f=(x(1)-2)^2+(x(2)-1)^2约束函数的M文件function [c,cep]=con1(x)c=[x(1)^2-x(2);x(1)+x(2)-2];cep=[]当前窗口条用求解命令x0=[3,3];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun9,x0,[],[],[],[],[],[],@con1,options)Optimization terminated: first-order optimality measure less than options.TolFun and maximum constraint violation is less than options.TolCon.Active inequalities (to within options.TolCon = 1e-006):lower upper ineqlin ineqnonlin12x =1.0000 1.0000fval =1.00003、(2)目标函数的M文件function f=fun10(x)f=x(2)^3*[(x(1)-3)^2-9]/27*3^(1/2)约束函数的M文件function [c,cep]=con2(x)c=[x(2)-x(1)/3^(1/2);-x(1)+x(2)/3^(1/2);x(1)+x(2)/3^(1/2)-6];cep=[]当前窗口条用求解命令x0=[1,5];lb=[0,0];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun10,x0,[],[],[],[],lb,ub,@con2,options)Optimization terminated: first-order optimality measure lessthan options.TolFun and maximum constraint violation is lessthan options.TolCon.Active inequalities (to within options.TolCon = 1e-006):lower upper ineqlin ineqnonlin13x =4.5000 2.5981fval =-7.59383、(3)目标函数的M文件function f=fun11(x)f=1000-x(1)^2-2*x(2)^2-x(3)^2-x(1)*x(2)-x(1)*x(3)约束函数的M文件function [c,cep]=con3(x)c=[];cep=[x(1)^2+x(2)^2+x(3)^2-25;8*x(1)+14*x(2)+7*x(3)-56];当前窗口条用求解命令x0=[2,2,2];lb=[0,0,0];ub=[];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun11,x0,[],[],[],[],lb,ub,@con3,options)Optimization terminated: first-order optimality measure lessthan options.TolFun and maximum constraint violation is lessthan options.TolCon.No active inequalitiesx =3.5121 0.2170 3.5522fval =961.71523、(4)目标函数的M文件function f=fun12(x)f=100*(x(2)-x(1)^2)^2+(1-x(1))^2+90*(x(4)-x(3)^2)^2+(1-x(3))^2+10*[(x(2)-1) ^2+(x(4)-1)^2]+19.8*(x(2)-1)*(x(4)-1)约束函数的M文件function [c,cep]=con4(x)cep=[];当前窗口条用求解命令x0=[-3,-1,-3,-1,];lb=[-10,-10,-10,-10];ub=[10,10,10,10];options=optimset('LargeScale','off');[x,fval]=fmincon(@fun12,x0,[],[],[],[],lb,ub,@con4,options)Optimization terminated: Magnitude of directional derivative in searchdirection less than 2*options.TolFun and maximum constraint violationis less than options.TolCon.No active inequalitiesx =1.0001 1.0002 0.9999 0.9997fval =2.3989e-007五、质疑和建议对于一维标量优化问题搜索,在当前窗口中调用求解命令时,[x,fval]=fminbnd(@fun1,lb,ub,options)可以改成[x,fval]=fminbnd(@fun1,-10,10)如下:function f=fun1(x)f=x^2-10*x+36调用求解命令x0=0;options=optimset('LargeScale','off');lb=-10;ub=10;[x,fval]=fminbnd(@fun1,lb,ub,options)或{ x0=0; [x,fval]=fminbnd(@fun1,-10,10)}x =5.0000fval =11.0000。
《机械优化设计》课程实践报告
![《机械优化设计》课程实践报告](https://img.taocdn.com/s3/m/ee71243d76a20029bc642dda.png)
合肥工业大学《机械优化设计》课程实践研究报告班级:学号:姓名:授课教师:日期: 2016年 11月 12 日目录1。
λ=0。
618的证明、一维搜索程序作业2。
单位矩阵程序作业3. 注释最佳再现给定运动规律连杆机构优化设计问题模型子程序4. 连杆机构问题+自行选择小型机械设计问题或其他工程优化问题(1)分析优化对象,根据设计问题的要求,选择设计变量,确立约束条件,建立目标函数,建立优化设计的数学模型并编制问题程序;(2)选择适当的优化方法,简述方法原理,进行优化计算;(3)进行结果分析,并加以说明。
5。
课程实践心得体会1。
λ=0.618的证明、一维搜索程序作业1.1证明:a α1 α2 ba α3 α1 α2黄金分割法要求插入点α1,α2的位置相对于区间[a,b]两端点具有对称性,即α1=b-λ(b-a)α2=b+λ(b-a)其中λ为待定常数.除了对称要求外,黄金分割法还要求在保留下来的区间内再插入一点,所形成的新三段与原来区间的三段具有相同的比例分布,故有1-λ=λ2取方程正数解,得≈0.618λ=√5−121.2一维搜索C语言程序:(以正弦函数y=sinx为例)#include〈stdio.h>#include<math.h>int main(){double a,b,c=0。
618,x[3],y[3],d;printf(”请输入区间[a,b]的值以及精度:\n”);scanf(”%lf,%lf,%lf”,&a,&b,&d);x[1]=b—c*(b—a);x[2]=a+c*(b—a);y[1]=sin(x[1]);y[2]=sin(x[2]);do{ if(y[1]>y[2]){ a=x[1];x[1]=x[2];y[1]=y[2];x[2]=a+c*(b—a);y[2]=sin(x[2]);}else{ b=x[2];x[2]=x[1];y[2]=y[1];x[1]=b—c*(b—a);y[1]=sin(x[1]);}}while(fabs((b-a)/b)>d);x[0]=(a+b)/2;y[0]=sin(x[0]);printf("极小点x*=%lf\n”,x[0]);printf("极小值y=%lf\n”,y[0]);}C语言程序运行结果:2. 单位矩阵程序作业2。
机械优化设计上机实践报告【精编版】
![机械优化设计上机实践报告【精编版】](https://img.taocdn.com/s3/m/a6eaea99e87101f69f319548.png)
机械优化设计上机实践报告【精编版】机械优化设计上机实践报告班级:机械(茅以升)101姓名:学号: 1004010510成绩:指导教师: 张迎辉日期: 2013.11.201 《一维搜索方法》上机实践报告1、写出所选择的一维搜索算法的基本过程、原理(可附流程图说明)。
(一)进退法1. 算法原理进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:()f x 为单谷函数(只有一个极值点),且[,]a b 为其极小值点的一个搜索区间,对于任意12,[,]x x a b ∈,如果()()12f x f x <,则2[,]a x 为极小值的搜索区间,如果()()12f x f x >,则1[,]x b 为极小值的搜索区间。
因此,在给定初始点0x ,及初始搜索步长h 的情况下,首先以初始步长向前搜索一步,计算()0f x h +。
(1) 如果()()00f x f x h <+则可知搜索区间为0[,]xx h +%,其中x %待求,为确定x %,后退一步计算0()f x h λ-,λ为缩小系数,且01λ<<,直接找到合适的*λ,使得()*00()f x h f x λ->,从而确定搜索区间*00[,]x h x h λ-+。
(2) 如果()()00f x f x h >+则可知搜索区间为0[,]x x %,其中x %待求,为确定x %,前进一步计算0()f x h λ+,λ为放大系数,且1λ>,知道找到合适的*λ,使得()*00()f x h f x h λ+<+,从而确定搜索区间*00[,]x x h λ+。
2. 算法步骤用进退法求一维无约束问题min (),f x x R ∈的搜索区间(包含极小值点的区间)的基本算法步骤如下:(1) 给定初始点(0)x ,初始步长0h ,令0h h =,(1)(0)x x =,0k =;(2) 令(4)(1)x x h =+,置1k k =+;(3) 若()()(4)(1)f x f x <,则转步骤(4),否则转步骤(5);(4) 令(2)(1)(1)(4),x x x x ==,()()(2)(1)f x f x =,()()(1)(4)f x f x =,令2h h =,转步骤(2);(5) 若1k =,则转步骤(6)否则转步骤(7);(6) 令h h =-,(2)(4)x x =,()()(2)(4)f x f x =,转步骤(2);(7) 令(3)(2)(2)(1)(1)(4),,x x x x x x ===,停止计算,极小值点包含于区间(1)(3)(3)(1)[,][,]x x x x 或(二)黄金分割法1、黄金分割法基本思路:黄金分割法适用于[a ,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
机械优化设计_第三章一维搜索方法
![机械优化设计_第三章一维搜索方法](https://img.taocdn.com/s3/m/f2ed22bbaff8941ea76e58fafab069dc5122477c.png)
机械优化设计_第三章一维搜索方法一维方法是一种常用的优化方法,适用于在一个单变量的空间中寻找最优解或近似最优解的问题。
在机械优化设计中,一维方法可以用来寻找最佳的设计参数值,以优化机械系统的性能。
一维方法包括了多种常用的算法,如二分法、黄金分割法、斐波那契法等。
下面将介绍其中的二分法和黄金分割法这两种常用的一维方法。
二分法是一种简单而常用的方法,基本思想是不断将空间划分为两部分,直到找到最优解或接近最优解的区间。
具体步骤如下:1.初始化区间[a,b],其中a和b分别是空间的下界和上界。
2.计算区间的中点x=(a+b)/23.根据目标函数的取值情况,确定最优解或接近最优解所在的子区间。
4.更新区间为[a,x]或[x,b],继续步骤2和3,直到区间足够小或找到了最优解。
二分法的优点是简单易实现,但其收敛速度相对较慢,特别是对于空间为初值范围较大的问题。
黄金分割法是一种相对高效的一维方法,其基本思想是通过黄金分割点来确定区间的缩减比例。
具体步骤如下:1.初始化区间[a,b],其中a和b分别是空间的下界和上界。
2.计算区间的两个黄金分割点,即x1=a+(1-φ)(b-a)和x2=a+φ(b-a),其中φ是黄金分割比例,其取值约为0.6183.根据目标函数的取值情况,确定最优解或接近最优解所在的子区间。
4.更新区间为[x1,b]或[a,x2],同时更新黄金分割点,继续步骤2和3,直到区间足够小或找到了最优解。
黄金分割法的优点是收敛速度相对较快,通常比二分法更有效。
然而,其实现相对复杂一些,需要额外的计算和判断步骤。
除了二分法和黄金分割法,还有其他一维方法,如斐波那契法、插值法等。
这些方法可以根据具体问题的特点选择适合的方法进行优化设计。
总结起来,一维方法是机械优化设计中常用的方法之一,用于在一个单变量的空间中寻找最优解或近似最优解的问题。
通过选择适当的方法,可以有效地优化机械系统的性能。
机械优化设计第三章一维搜索方法
![机械优化设计第三章一维搜索方法](https://img.taocdn.com/s3/m/2d64b952ba68a98271fe910ef12d2af90242a8a0.png)
(b a),故
Fn
b
a 。由Fn即可从斐波那契数列表或按F0
F1
1, Fn
Fn1
Fn2 (n
2, 3,
)
推算出相应的n。
3)确定试点并计算相应的函数值,在区间a, b内的两个试点:
x2
a
Fn1 Fn
(b
a),
x1
b
Fn1 Fn
(b
a),
f1 f (x1),
f2 f (x2 )
第三章 一维搜索方法
1.若f (a1) f (b1),则取[a,b1]为缩短后的搜索区间; 2.若f (a1) f (b1),则取[a1,b]为缩短后的搜索区间。
第三章 一维搜索方法
第二节 搜索区间的确定与区间消去法原理
间 接
假定在搜索区间[a, b]内取一点x, 并计算它的导数值 f '(x),可能出现三种情况:
x2 a b x1, f2 f (x2 )
5)检查迭代终止条件:bn1 an1
,若满足,则输出最优解x*
1 (a b), 2
ห้องสมุดไป่ตู้
f*
f (x*),
若不满足,则转入(4),继续进行迭代。
1. f (a1) f (b1),由于函数的单峰性, 极小点一定在[a, b1 ]内; 2. f (a1) f (b1),极小点一定在[a1,b]内; 3. f (a1) f (b1),极小点一定在[a1,b1]内。
第三章 一维搜索方法
第二节 搜索区间的确定与区间消去法原理
直 接 法
假定在搜索区间[a,b]内任取两点a1和b1,且a1 b1, 并计算f (a1)和f (b1),可能出现三种情况:
f (x1) f (x) f (x2)
机械优化设计上机报告
![机械优化设计上机报告](https://img.taocdn.com/s3/m/ad7a0f4959eef8c75fbfb36b.png)
机械优化设计上机实践报告班级:机械(茅以升)101姓名:学号: 1004010510成绩:指导教师: 张迎辉日期: 2013.11.201 《一维搜索方法》上机实践报告1、写出所选择的一维搜索算法的基本过程、原理(可附流程图说明)。
(一)进退法 1. 算法原理进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:()f x 为单谷函数(只有一个极值点),且[,]a b 为其极小值点的一个搜索区间,对于任意12,[,]x x a b ∈,如果()()12f x f x <,则2[,]a x 为极小值的搜索区间,如果()()12f x f x >,则1[,]x b 为极小值的搜索区间。
因此,在给定初始点0x ,及初始搜索步长h 的情况下,首先以初始步长向前搜索一步,计算()0f x h +。
(1) 如果()()00f x f x h <+则可知搜索区间为0[,]x x h +,其中x 待求,为确定x ,后退一步计算0()f x h λ-,λ为缩小系数,且01λ<<,直接找到合适的*λ,使得()*00()f x h f x λ->,从而确定搜索区间*00[,]x h x h λ-+。
(2) 如果()()00f x f x h >+则可知搜索区间为0[,]x x ,其中x 待求,为确定x ,前进一步计算0()f x h λ+,λ为放大系数,且1λ>,知道找到合适的*λ,使得()*00()f x h f x h λ+<+,从而确定搜索区间*00[,]x x h λ+。
2. 算法步骤用进退法求一维无约束问题min (),f x x R ∈的搜索区间(包含极小值点的区间)的基本算法步骤如下:(1) 给定初始点(0)x ,初始步长0h ,令0h h =,(1)(0)x x =,0k =; (2) 令(4)(1)x x h =+,置1k k =+;(3) 若()()(4)(1)f x f x <,则转步骤(4),否则转步骤(5);(4) 令(2)(1)(1)(4),x x x x ==,()()(2)(1)f x f x =,()()(1)(4)f x f x =,令2h h =,转步骤(2); (5) 若1k =,则转步骤(6)否则转步骤(7);(6) 令h h =-,(2)(4)x x =,()()(2)(4)f x f x =,转步骤(2);(7) 令(3)(2)(2)(1)(1)(4),,x x x x x x ===,停止计算,极小值点包含于区间(1)(3)(3)(1)[,][,]x x x x 或(二)黄金分割法1、黄金分割法基本思路:黄金分割法适用于[a ,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
机械优化设计实验
![机械优化设计实验](https://img.taocdn.com/s3/m/840548fd76c66137ef0619ed.png)
§1 综合性编程的上机实验一实验目的无约束坐标轮换优化方法调用一维最优化方法,一维最优化方法(0。
618法)又调用区间搜索法(进退法),综合性编制程序的上机实验。
二实验内容1、搜索区间的确定与区间消去法(进退法)原理(1)方法概要有了目标函数,确定了搜索方向,假设函数f(a)具有单谷性,确定极小点 a*所在的区间[a b]:①在搜索方向上,选定初始点 a1,初始点步长 h=0。
01(经验,可调整),前进一步得a2点。
②求出a1、a2对应的函数值y1、y2,比较对应点函数值,确定前进或后退。
(2)程序框图:3、一维搜索黄金分割法(0.618法)(1)基本思想前提:已通过进退法确定了符合函数值高低高规律的搜索区间[a,b]即,函数的极小点必在[a,b]内.所以要调用搜索区间的进退法(2)程序框图①初始区间[a,b],由进退法确定。
收敛精度ε(ε=10—4~ 10-5),缩短率λ=0。
618②计算a1、a2,f (a1)、 f (a2),③根据区间消去法原理缩短区间,进行区间名称的代换,并保留区间中计算的一个新试验点及函数值。
④检查区间是否短到足够小和函数值收敛到足够近。
若条件不满足,则返回到②⑤若条件满足,则取最后两个试验点的平均值作为极小点数值的近似解。
4、多维无约束坐标轮换法(1)基本思想把多维问题转化为一系列一维搜索问题.沿设计变量的各个分量形成的坐标轴依次进行一维搜索(固定其它分量,仅对一个分量优选,轮番搜索),即调用一维最优化方法(0.618法),而一维最优化方法(0。
618法)又调用区间搜索法(进退法)。
重复进行,直至找出满足精度的极小点。
(2)程序框图(3)具体要求①注意数组的应用,便于设计过程中沿各坐标轴迭代时的数据处理;②注意子程序和子函数的调用,简化设计过程,便于数据的计算机处理;③设计结果在界面上显示,并进行数据分析。
④写出上机实验报告§2有约束优化方法应用编制程序的上机实验一、实验目的使学生能用有约束优化设计方法解决简单工程问题的优化设计,对所设计的问题建立数学模型,并确定设计变量、目标函数和约束条件;调用有约束问题的最优化方法(惩罚函数法)编制程序,进而在计算机上求解并对优化的计算结果进行正确的分析和处理。
机械优化设计上机实践报告书
![机械优化设计上机实践报告书](https://img.taocdn.com/s3/m/77ce644ec8d376eeafaa31ab.png)
机械优化设计上机实践报告班级:机械(茅以升)101姓名:学号: 1004010510成绩:指导教师: 张迎辉日期: 2013.11.201 《一维搜索方法》上机实践报告1、写出所选择的一维搜索算法的基本过程、原理(可附流程图说明)。
(一)进退法1.算法原理进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:()f x 为单谷函数(只有一个极值点),且[,]a b 为其极小值点的一个搜索区间,对于任意12,[,]x x a b ∈,如果()()12f x f x <,则2[,]a x 为极小值的搜索区间,如果()()12f x f x >,则1[,]x b 为极小值的搜索区间。
因此,在给定初始点0x ,及初始搜索步长h 的情况下,首先以初始步长向前搜索一步,计算()0f x h +。
(1) 如果()()00f x f x h <+则可知搜索区间为0[,]x x h +,其中x 待求,为确定x ,后退一步计算0()f x h λ-,λ为缩小系数,且01λ<<,直接找到合适的*λ,使得()*00()f x h f x λ->,从而确定搜索区间*00[,]x h x h λ-+。
(2) 如果()()00f x f x h >+则可知搜索区间为0[,]x x ,其中x 待求,为确定x ,前进一步计算0()f x h λ+,λ为放大系数,且1λ>,知道找到合适的*λ,使得()*00()f x h f x h λ+<+,从而确定搜索区间*00[,]x x h λ+。
2. 算法步骤用进退法求一维无约束问题min (),f x x R ∈的搜索区间(包含极小值点的区间)的基本算法步骤如下:(1) 给定初始点(0)x ,初始步长0h ,令0h h =,(1)(0)x x =,0k =; (2) 令(4)(1)x x h =+,置1k k =+;(3) 若()()(4)(1)f x f x <,则转步骤(4),否则转步骤(5);(4) 令(2)(1)(1)(4),x x x x ==,()()(2)(1)f x f x =,()()(1)(4)f x f x =,令2h h =,转步骤(2); (5) 若1k =,则转步骤(6)否则转步骤(7);(6) 令h h =-,(2)(4)x x =,()()(2)(4)f x f x =,转步骤(2);(7) 令(3)(2)(2)(1)(1)(4),,x x x x x x ===,停止计算,极小值点包含于区间(1)(3)(3)(1)或x x x x[,][,](二)黄金分割法1、黄金分割法基本思路:黄金分割法适用于[a,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
(完整word版)机械优化设计实验报告(word文档良心出品)
![(完整word版)机械优化设计实验报告(word文档良心出品)](https://img.taocdn.com/s3/m/c8c3004d01f69e3142329404.png)
《机械优化设计》实验报告目录1.进退法确定初始区间 (3)1.1 进退法基本思路 (3)1.2 进退法程序框图 (3)1.3 题目 (3)1.4 源程序代码及运行结果 (3)2.黄金分割法 (4)2.2黄金分割法流程图 (4)2.3 题目 (5)2.4 源程序代码及结果 (5)3.牛顿型法 (5)3.1牛顿型法基本思路 (6)3.2 阻尼牛顿法的流程图 (6)3.3 题目 (6)3.4 源程序代码及结果 (6)4.鲍威尔法 (7)4.1 鲍威尔法基本思路 (7)4.2 鲍威尔法流程图 (7)4.3 题目 (8)4.4 源程序代码及结果 (8)5. 复合形法 (15)5.1 复合行法基本思想 (15)5.3 源程序代码及结果 (15)6. 外点惩罚函数法 (23)6.1解题思路: (23)6.2 流程框图 (23)6.3 题目 (23)6.4 源程序代码及结果 (23)7.机械设计实际问题分析 (29)7.2计算过程如下 (29)7.3 源程序编写 (30)8.报告总结 (32)1.进退法确定初始区间1.1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。
1.2 进退法程序框图1.3 题目:用进退法求解函数()2710=-+的搜索区间f x x x1.4 源程序代码及运行结果#include <stdio.h>#include <math.h>main(){float h,h0,y1,y2,y3,a1=0,a2,a3,fa2,fa3;scanf("h0=%f,y1=%f",&h0,&y1);h=h0;a2=h;y2=a2*a2-7*a2+10;if (y2>y1){h=-h;a3=a1;y3=y1;loop:a1=a2;y1=y2;a2=a3;y2=y3;}a3=a2+2*h;y3=a3*a3-7*a3+10;if (y3<y2){goto loop;}elseprintf("a1=%f,a2=%f,a3=%f,y1=%f,y2=%f,y3=%f\n",a1,a2,a3,y1,y2,y3);} 搜索区间为0 62.黄金分割法2.1黄金分割法基本思路:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。
《机械优化设计》课程实践报告
![《机械优化设计》课程实践报告](https://img.taocdn.com/s3/m/bb150ddc2dc58bd63186bceb19e8b8f67c1cefc4.png)
《机械优化设计》课程实践报告(课程实践报告封⾯模版)合肥⼯业⼤学《机械优化设计》课程实践研究报告班级:机设10 -04学号: 20100495姓名:李健授课⽼师:王卫荣⽇期: 2012年⽉⽇⽬录⼀主要内容1、⼀维搜索程序作业A.λ = 0.618的证明 (1)B.编写⽤0.618法求函数极⼩值的程序 (2)2、单位矩阵程序作业 (4)3、其他⼯程优化问题 (9)4连杆机构问题 (12)⼆实践⼼得体会 (15)⼀: 主要内容1. ⼀维搜索程序作业:A.λ = 0.618的证明 (y2 > y1)证明:0.618法要求插⼊点α1、α 2 的位置相对于区间 [a,b] 两端点具有对称性,即已知a1=a2 , 要求α11=α22由于α1=b-λ(b-a)α2=a+λ(b-a)若使α11=α22则有:b1-λ(b1-a1)=a2+λ(b2-a2)= a1+λ2(b1-a1)因此: b1- a1=(λ2+λ)( b1- a1)( b1- a1)(λ2+λ-1)=0因为: b1= a1所以: λ2+λ-1=0则有: 取⽅程正数解得若保留下来的区间为 [α1,b] ,根据插⼊点的对称性,也能推得同样的λ的值。
其0.618法的程序框图如下:B.编写⽤0.618法求函数极⼩值的程序例:(1)a=0 ,b=2π,f(x)=cox(x)(2)a=0 ,b=10, f(x)=(x-2)2+3(1)#include#includevoid main(void){int i;float a1,a2,aa,y1,y2,ymin,e;float a=0,b=2*3.14159,n=0.618;a1=b-n*(b-a);a2=a+n*(b-a);print(“输⼊精度:”);scanf(“%f”,&e);for(i=0;i=10000;i=i++){y1=cos(a1);y2=cos(a2);if(y1{a=a1;a1=a2;a2=a+n*(b-a);}If(y1b=a2;a2=a1;a1=b-n*(b-a);}if(fabs(b-a)/b{aa=(a+b)/2;ymin=cos(aa);printf(“x=%7.4f\tf(x)=%7.4f\n”),aa,ymin); break;}}}运⾏结果:(2)#include#includevoid main(void){int i;float a1,a2,aa,y1,y2,ymin,e; float a=0,b=10,n=0.618;a1=b-n*(b-a);a2=a+n*(b-a);print(“输⼊精度:”);scanf(“%f”,&e);for(i=0;i=10000;i=i++){y1=(a1-2)*(a1-2)+3; y2=(a2-2)*(a2-2)+3; if(y1>=y2){a=a1;a1=a2;a2=a+n*(b-a);}If(y1b=a2;a2=a1;a1=b-n*(b-a);}if(fabs(b-a)/b{aa=(a+b)/2;ymin=(aa-2)*(aa-2)+3;printf(“x=%6.3f\tf(x)=%6.3f\n”),aa,ymin); break;}}}运⾏结果:2.单位矩阵程序作业编写⽣成单位矩阵的程序程序⽂本#includevoid main(void){int a[100][100];int N,i,j;printf("请输⼊所要输出矩阵的阶数(最多100阶):"); scanf("%d",&N);printf("输出的矩阵阶数为%d\n",N);printf(" N "); /*****制作表头*****/ for(i=0;iprintf("%3d",i+1);printf("\n");for(i=0;iprintf("---"); /*****分割线*****/ printf("\n");for(i=0;i<100;i++) /*****数组赋值*****/ for(j=0;j<100;j++) {if(i==j)a[i][j]=1;elsea[i][j]=0;}for(i=0;iprintf("%2d:",i+1); /*****纵列序号*****/for(j=0;j{printf("%3d",a[i][j]);}printf("\n");}}结果显⽰从键盘输⼊9,显⽰9阶单位矩阵,结果如下3. 其他⼯程优化问题有⼀箱形盖板,已知长度L=600mm ,宽度b=60mm ,厚度t s =0.5mm 承受最⼤单位载荷q=60N/cm ,设箱形盖板的材料为铝合⾦,其弹性模量MPa E 4107?=,泊松⽐3.0=µ,许⽤弯曲应⼒[]MPa 70=σ,许⽤剪应⼒[]MPa 45=τ,要求在满⾜强度、刚度和稳定性条件下,设计重量最轻的结构⽅案。
机械优化设计上机报告
![机械优化设计上机报告](https://img.taocdn.com/s3/m/65806c6efab069dc51220187.png)
机械优化设计上机实践报告班级:机械(茅以升)101姓名 :学号 : 1004010510成绩 :指导教师 : 迎辉日期 : 2013.11.201 《一维搜索方法》上机实践报告1、写出所选择的一维搜索算法的基本过程、原理(可附流程图说明)。
(一)进退法 1. 算法原理进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:()f x 为单谷函数(只有一个极值点),且[,]a b 为其极小值点的一个搜索区间,对于任意12,[,]x x a b ∈,如果()()12f x f x <,则2[,]a x 为极小值的搜索区间,如果()()12f x f x >,则1[,]x b 为极小值的搜索区间。
因此,在给定初始点0x ,及初始搜索步长h 的情况下,首先以初始步长向前搜索一步,计算()0f x h +。
(1) 如果()()00f x f x h <+则可知搜索区间为0[,]x x h +%,其中x %待求,为确定x %,后退一步计算0()f x h λ-,λ为缩小系数,且01λ<<,直接找到合适的*λ,使得()*00()f x h f x λ->,从而确定搜索区间*00[,]x h x h λ-+。
(2) 如果()()00f x f x h >+则可知搜索区间为0[,]x x %,其中x %待求,为确定x %,前进一步计算0()f x h λ+,λ为放大系数,且1λ>,知道找到合适的*λ,使得()*00()f x h f x h λ+<+,从而确定搜索区间*00[,]x x h λ+。
2. 算法步骤用进退法求一维无约束问题min (),f x x R ∈的搜索区间(包含极小值点的区间)的基本算法步骤如下:(1) 给定初始点(0)x ,初始步长0h ,令0h h =,(1)(0)x x =,0k =; (2) 令(4)(1)x x h =+,置1k k =+;(3) 若()()(4)(1)f x f x <,则转步骤(4),否则转步骤(5);(4) 令(2)(1)(1)(4),x x x x ==,()()(2)(1)f x f x =,()()(1)(4)f x f x =,令2h h =,转步骤(2); (5) 若1k =,则转步骤(6)否则转步骤(7);(6) 令h h =-,(2)(4)x x =,()()(2)(4)f x f x =,转步骤(2);(7) 令(3)(2)(2)(1)(1)(4),,x x x x x x ===,停止计算,极小值点包含于区间(1)(3)(3)(1)[,][,]x x x x 或(二)黄金分割法1、黄金分割法基本思路:黄金分割法适用于[a ,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
机械优化设计一维搜索实验报告
![机械优化设计一维搜索实验报告](https://img.taocdn.com/s3/m/ff27423cb14e852459fb57d8.png)
《机械优化设计》实验报告班级: 机械设计(2)班姓名:邓传淮学号:09011020081 实验名称:一维搜索黄金分割法求最佳步长2 实验目的:通过上机编程,理解一维搜索黄金分割法的原理,了解计算机在优化设计中的应用。
3 黄金分割法的基本原理黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点α*的一种方法。
它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数[6],即只在单峰区间内才能进行一维寻优,其收敛效率较低。
其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]。
具体步骤是:在区间[a,b]内取点:a1 ,a2 把[a,b]分为三段。
如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1)<f(a2) ,令b=a2,a2=a1,a1=b-r*(b-a),如果|(b-a)/b|和|(y1-y2)/y2|都大于收敛精度ε重新开始。
因为[a,b]为单峰区间,这样每次可将搜索区间缩小0.618倍或0.382倍,处理后的区间都将包含极小点的区间缩小,然后在保留下来的区间上作同样的处理,如此迭代下去,将使搜索区[a,b]逐步缩小,直到满足预先给定的精度时,即获得一维优化问题的近似最优解。
黄金分割法原理如图所示,4实验所编程序框图(1)进退发确定单峰区间的计算框图(2)黄金分割法计算框图5 程序源代码(1)进退发确定单峰区间的程序源代码#include<stdio.h>#include<math.h>#define f(x) pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main(){int k;double x,h,x1,x2,x3;double f1,f2,f3,f;double a,b;x1=0;h=1;x2=x1+h;f1=f(x1);f2=f(x2);if (f1>f2){h=2*h;x3=x2+h;f3=f(x3);}else{h=-h;x1=x2;f1=f2;x3=x2+h;f3=f(x3);}printf("x1=%lf,x2=%lf\0",x1,x2);do{x1=x2;x2=x3;f1=f2;f2=f3;x3=x2+h;f3=f(x3);}while(f3<f2);if (h>0){a=x1;b=x3;}else{a=x3;b=x1;}printf("a=%lf,b=%lf\n",a,b);}(2)黄金分割法的程序源代码#include<stdio.h>#include<math.h>#define f(x)=pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main(){int k;double x,h,x1,x2,x3,c;double f1,f2,f3,f;double a,b;printf("input c:\n");scanf("%lf",&c);a=1;b=5;x1=b-0.618*(b-a);printf("x1=%lf ",x1);f1=f(x1);printf("f1=%lf ",f1);x2=a+0.618*(b-a);printf("x2=%lf ",x2);f2=f(x2);printf("f2=%lf ",f2);k=0;loop:{if(f1<f2){b=x2;printf("b=%lf ",b);x2=x1;printf("x2=%lf ",x2);f2=f1;printf("f2=%lf ",f2);x1=a+0.382*(b-a);printf("x1=%lf ",x1);f1=f(x1);printf("f1=%lf ",f1);}else{a=x1;printf("a=%lf ",a);x1=x2;printf("x1=%lf ",x1);f1=f2;printf("f1=%lf ",f1);x2=a+0.618*(b-a);printf("x2=%lf ",x2);f2=f(x2);printf("f2=%lf ",f2);}k=k+1;printf("k=%d\n",k);}if(fabs(b-a<c)){x=0.5*(b+a);printf("x=%lf ",x);f=f(x);printf("f=%lf ",f);}else{goto loop;}getchar();}6 程序运行截图。
中科大《优化设计》课程大作业之一维搜索优化设计实验报告
![中科大《优化设计》课程大作业之一维搜索优化设计实验报告](https://img.taocdn.com/s3/m/9f83cc295a8102d276a22ffa.png)
优化设计实验报告力学系型号:联想y470CPU:i5-2450M内存:2GB系统:win7-64位如下是三个目标函数(包括自定义函数)以及初值和精度选取:1、min f(x)=x*x*x*x-4*x*x*x-6*x*x-16x+4初值=3;精度=0.0000012、min f(x)=x*x+exp(-x)初值=100;精度=0.0000013、min f(x)=(x-1)*(x-1)+1初值= -3;精度=0.000001如下是各个方法运算结果:简要总结:通过上面的5个表格可以综合看出,牛顿法是这几个方法中最有效的方法。
同时,根据编程来看,牛顿法的算法简单,所以程序相对其他几种简洁,故牛顿法可作为常用方法使用。
在程序的运行方面,分别设置了可变的函数选择、起始点、方法选择、精度这四个输入,故可以在命令窗口运行主程序main,再根据提示分别输入这四个参数的所需值,就可以得到运行结果。
程序如下:1、主程序clear;global k;k=0;disp('1.f(x)=x*x*x*x-4*x*x*x-6*x*x-16*x+4');disp('2.f(x)=x*x+exp(-x)');disp('3.f(x)=(x-1)*(x-1)+1');while 1no=input('请输入上面所想选择函数的编号(1、2、3):');if no==1||no==2||no==3break;enddisp('此次输入无效.');enddisp(' ');x0=input('请输入初始值:');disp(' ');disp('1.黄金分割法');disp('2.平分法');disp('3.成功失败法');disp('4.牛顿法');disp('5.三点二次插值法');disp('6.三次插值法');while 1m1=input('请输入上面所想选择方法的编号(1、2、3、4、5、6):');if m1==1||m1==2||m1==3||m1==4||m1==5||m1==6break;enddisp('此次输入无效.');enddisp(' ');while 1e=input('请输入精度(建议0.001或0.000001):');if e>0break;enddisp('此次输入无效.');enddisp(' ');disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');[x,y]=fmin(no,x0,m1,e);fprintf('迭代次数为:%8.0f\n', k);fprintf('所求极值的横坐标x为:%16.5f\n', x);fprintf('所求极值的纵坐标y为:%16.5f\n', y);2、调用函数function [x,y]=fmin(no,x0,m1,e)[amin,amax,c]=range1(no,x0);if m1==1tic;[x,y]=gold(no,amin,amax,e);toc;elseif m1==2tic;[x,y]=pingfen(no,amin,amax,e);toc;elseif m1==3tic;[x,y]=chenggong(no,amin,e);toc;elseif m1==4tic;[x,y]=newton(no,amax,e);toc;elseif m1==5tic;[x,y]=chazhi(no,amin,amax,c,e);toc;elseif m1==6tic;[x,y]=sanci(no,amin,amax,e);toc;endend3、三点二次插值function [x,y]=chazhi(no,amin,amax,c0,e)%UNTITLED10 此处显示有关此函数的摘要% 此处显示详细说明global k;a1=amin;y1=f_1(no,a1);a2=c0;y2=f_1(no,a2);a3=amax;y3=f_1(no,a3);while 1c1=(y3-y1)/(a3-a1);c2=((y2-y1)/(a2-a1)-c1)/(a2-a3);a4=(a1+a3-c1/c2)/2;y4=f_1(no,a4);if abs((y4-y2)/y4)<ebreak;endif a4>a2if y4>y2a3=a4;y3=y4;elsea1=a2;y1=y2;a2=a4;y2=y4;endelseif y4>y2a1=a4;y1=y4;elsea3=a2;y3=y2;a2=a4;y2=y4;endendk=k+1;endif y4>y2x=a2;y=y2;elsex=a4;y=y4;endend4、成功法function [x,y]=chenggong(no,amin,e)%UNTITLED8 此处显示有关此函数的摘要% 此处显示详细说明global k;x0=amin;h=1;while 1x1=x0+h;f0=f_1(no,x0);f1=f_1(no,x1);if f1<f0x0=x1;h=2*h;elseif abs(h)<ebreak;elseh=-1/4*h;endendk=k+1;endx=(x0+x1)/2;y=f_1(no,x);end5、黄金分割法function [x,y]=gold(no,amin,amax,e)%UNTITLED6 此处显示有关此函数的摘要% 此处显示详细说明global k;a1=amax-0.618*(amax-amin);y1=f_1(no,a1);a2=amin+0.618*(amax-amin);y2=f_1(no,a2);while abs(amax-amin)>=eif y1>=y2amin=a1;a1=a2;y1=y2;a2=amin+0.618*(amax-amin);y2=f_1(no,a2);elseamax=a2;a2=a1;y2=y1;a1=amax-0.618*(amax-amin);y1=f_1(no,a1);endk=k+1;endx=(amax+amin)/2;y=f_1(no,x);end6、牛顿法function [xx,yy]=newton(no,amax,e)%UNTITLED9 此处显示有关此函数的摘要% 此处显示详细说明global k;syms x;if no==1f=x*x*x*x-4*x*x*x-6*x*x-16*x+4;elseif no==2f=x*x+exp(-x);elseif no==3f=(x-1)*(x-1)+1;endx0=amax;while(1)x0 = x0-double(subs(diff(f,x),x0)/subs(diff(diff(f,x),x),x0));if abs(double(subs(diff(f,x),x0)))<ebreak;endk=k+1;endxx=x0;yy=f_1(no,xx);end7、平分法function [x,y]=pingfen(no,amin,amax,e)%UNTITLED7 此处显示有关此函数的摘要% 此处显示详细说明global k;c=(amin+amax)/2;c1=f_2(no,c);while abs(c1)>=eif c1>0amax=c;elseamin=c;endc=(amin+amax)/2;c1=f_2(no,c);if amax-amin<ebreak;endk=k+1;x=(amin+amax)/2;y=f_1(no,x);end8、三次插值法(附加方法,可不用)function [x,y]=sanci(no,amin,amax,e)%UNTITLED11 此处显示有关此函数的摘要% 此处显示详细说明global k;a=amin;fa=f_1(no,a);ffa=f_2(no,a);b=amax;fb=f_1(no,b);ffb=f_2(no,b);while 1A=((b-a)*(ffb+ffa)+2*(fa+fb))/((b-a)*(b-a)*(b-a));B=(3*(fb-fa)-(b-a)*(ffb+2*ffa))/((b-a)*(b-a));C=ffa;d=a-C/(B+sqrt(B*B-3*A*C));ffd=f_2(no,d);ffd=double(ffd);if abs(ffd)<ebreak;endif ffd<0a=d;elseb=d;endk=k+1;endx=d;y=y_1(no,x);end9、确认区间函数function [amin,amax,c] = range1(no,x0)%UNTITLED5 此处显示有关此函数的摘要% 此处显示详细说明h=1;a1=x0;y1=f_1(no,a1);a2=a1+h;y2=f_1(no,a2);if y2>y1h=-h; a3=a1;y3=y1;a1=a2;a2=a3;y2=y3;a3=a2+h;y3=f_1(no,a3);while y3<y2h=h*2;a1=a2;a2=a3;y2=y3;a3=a2+h;y3=f_1(no,a3);endamin=min(a1,a3);amax=max(a1,a3);c=a2;end10、所给题目的函数1function y=f_1(no,x)if no==1y=x*x*x*x-4*x*x*x-6*x*x-16*x+4;elseif no==2y=x*x+exp(-x);elseif no==3y=(x-1)*(x-1)+1;endend11、所给题目的函数2function y=f_2(no,x0)%UNTITLED 此处显示有关此函数的摘要% 此处显示详细说明syms x;if no==1y1=x*x*x*x-4*x*x*x-6*x*x-16*x+4;y2=diff(y1);y=subs(y2,x,x0);elseif no==2y1=x*x+exp(-x);y2=diff(y1);y=subs(y2,x,x0);elseif no==3y1=(x-1)*(x-1)+1;y2=diff(y1);y=subs(y2,x,x0);end。
机械优化实验报告
![机械优化实验报告](https://img.taocdn.com/s3/m/467319b25ff7ba0d4a7302768e9951e79a89696c.png)
一、实验目的本次实验旨在加深对机械优化设计方法的基本理论和算法步骤的理解,培养学生独立编制、调试计算机程序的能力,并掌握常用优化方法程序的使用方法。
通过实验,学生能够灵活运用优化设计方法解决工程实际问题。
二、实验内容本次实验主要涉及以下内容:1. 优化方法的基本原理2. 编程实现优化方法3. 优化方法的实际应用三、实验步骤1. 黄金分割法(1)基本原理黄金分割法是一种在给定初始区间内搜索极小点的一维搜索方法。
其基本原理是:在区间内取两个点,根据函数值的比较,将区间分为三段,保留包含极小值的段,再进行相同的操作,逐步缩小搜索区间。
(2)编程实现根据黄金分割法的基本原理,编写相应的C语言程序,实现一维搜索。
```c#include <stdio.h>#include <math.h>double f(double x) {// 定义目标函数return x x - 4 x + 4;}double golden_section_search(double a, double b, double tol) {double r = 0.618;double a1 = a + r (b - a); double a2 = b - r (b - a); double fa1 = f(a1);double fa2 = f(a2);while (fabs(b - a) > tol) { if (fa1 > fa2) {a = a1;a1 = a2;a2 = b - r (b - a); fa1 = fa2;fa2 = f(a2);} else {b = a2;a2 = a1;a1 = a + r (b - a); fa2 = fa1;fa1 = f(a1);}}return (a + b) / 2;}int main() {double x_min = golden_section_search(a, b, tol);printf("Optimal solution: x = %f\n", x_min);return 0;}```(3)结果分析通过运行程序,可以得到最优解 x = 2.000000,目标函数值为 f(x) = 0。
机械优化设计报告
![机械优化设计报告](https://img.taocdn.com/s3/m/8b147c0ca6c30c2259019e10.png)
机械优化设计上机实验报告班级:05021004人员:马春曹旭南咪咪吕进龙李鸿飞王建华日期:2013年5月一 进退法1.1算法的原理进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:()f x 为单谷函数(只有一个极值点),且[,]a b 为其极小值点的一个搜索区间,对于任意12,[,]x x a b ∈,如果()()12f x f x <,则2[,]a x 为极小值的搜索区间,如果()()12f x f x >,则1[,]x b 为极小值的搜索区间。
因此,在给定初始点0x ,及初始搜索步长h 的情况下,首先以初始步长向前搜索一步,计算()0f x h +。
(1) 如果()()00f x f x h <+则可知搜索区间为0[,]x x h +,其中x 待求,为确定x ,后退一步计算0()f x h λ-,λ为缩小系数,且01λ<<,直接找到合适的*λ,使得()*00()f x h f x λ->,从而确定搜索区间*00[,]x h x h λ-+。
(2) 如果()()00f x f x h >+则可知搜索区间为0[,]x x ,其中x 待求,为确定x ,前进一步计算0()f x h λ+,λ为放大系数,且1λ>,知道找到合适的*λ,使得()*00()f x h f x h λ+<+,从而确定搜索区间*00[,]x x h λ+。
进退法流程图:1.2算法特点从初始点开始一出事步长向前试探,如果函数值上升,则步长变号,机改变试探方向。
如果函数值下降,则维持原来的试探方向,并将步长加倍。
区间的始点、中间点一次沿试探方向移动一步。
此过程以自己进行到函数值再次上升位置,既可找到搜索区间的终点。
最后大额到的三个点纪委搜索区间的始点、中间点和终点,形成函数值得“高-低-高”趋势,1.3算法的改进及建议由于解析过程中没有精度的要求,所以解析的精度比较差,只能确定一个比较理想的最优解区间,仅仅能够作为求职最优解的参考,所以希望通过进一步的完善来实现精度的提高并且能够求得较为满意的最优解。
机械优化设计实验报告浙江理工大学
![机械优化设计实验报告浙江理工大学](https://img.taocdn.com/s3/m/6786444b102de2bd9705885f.png)
机械优化设计实验报告班级:XXXX姓名:XX学号:XXXXXXXXXXX一、外推法1、实验原理常用的一维优化方法都是通过逐步缩小极值点所在的搜索区间来求最优解的。
一般情况下,我们并不知道一元函数f(X)极大值点所处的大概位置,所以也就不知道极值点所在的具体区域。
由于搜索区间范围的确定及大小直接影响着优化方法的收敛速度及计算精度。
因此,一维优化的第一步应首先确定一个初始搜索区间,并且在该区间内函数有唯一的极小值存在。
该区间越小越好,并且仅存在唯一极小值点。
所确定的单股区间应具有如下性质:如果在[α1,α3]区间内任取一点α2,,α1<α2<α3或α3<α2<α1,则必有f(α1)>f(α2)<f(α3)。
由此可知,单股区间有一个共同特点:函数值的变化规律呈现“大---小---大”或“高---低---高”的趋势,在极小值点的左侧,函数值呈严格下降趋势,在极小值点右侧,函数值呈严格上升趋势,这正是单股区间依据。
2、实验工具C-Free3.5软件3、程序调试#include<stdio.h>#include<math.h>#define f(x) 3*x*x-8*x+9 //定义函数int main(){double a0,a1,a2,a3,f1,f2,f3,h;printf(“a0=”,a0); //单谷区间起始点scanf(“%lf”,&a0);printf(“h=”,h); //起始的步长scanf(“%lf”,&h);a1=a0;a2=a1+h;f1=f(a0);f2=f(a2);if(f1>f2) //判断函数值的大小,确定下降方向{a3=a2+h;f3=f(a3);}else{h=-h;a3=a1;f3=f1;a1=a2;f1=f2;a2=a3;f2=f3;a3=a2+h;f3=f(a3);}while(f3<=f2) //当不满足上述比较时,说明下降方向反向,继续进行判断{h=2*h;a1=a2;f1=f2;a2=a3;f2=f3;a3=a2+h;f3=f(a3);}printf(“a1=%lf,a3=%lf\n”,a1,a3);printf(“[a1,a3]=[%lf,%lf]\n”,a1,a3); //输出区间}4、调试结果5、总结与讨论1)当写成void main时会出现如下警告改成int main警告消失。
机械优化设计黄金分割法实验报告
![机械优化设计黄金分割法实验报告](https://img.taocdn.com/s3/m/5fbceaa82b160b4e777fcfcc.png)
实验报告课程名称:机械优化设计实验项目:一维搜索(黄金分割)法上机实验专业班级: XXXXX级机械工程及自动化XX班学号: XXXXXXXXXX 姓名: XXXXXX 指导老师: XXXXXX 日期: 201X.12.12机械工程试验教学中心实验1 一维搜索(黄金分割)法实验报告实验日期 201X 年 12 月 11 日报告日期 201X 年 12 月 12 日班级 XXXXX级机自XXXX班姓名 XXXXXX 学号 XXXXXXXXXXXXXXX1、实验目的○1了解黄金分割法的基本原理;○2熟悉matlab程序使用方法;○3学习上机调试、运行所编写的程序。
2、黄金分割法原理该法适用于[a,b]区间上单谷函数极小值问题。
在搜索区间[a,b]内按照0.618比例加入两点α1,α2,并计算其函数值。
α1,α2将区间分成三段,然后利用区间消去法,通过比较函数值大小,删除其中一段,使搜索区间缩短,在保留区间进行同样处理,直到搜索区间缩小到指定精度为止。
3、编制MATLAB优化程序○1编写函数文件,并命名为fx.m保存,程序代码如下:function f=fx(w)%f=w^2-10*w+36;%f=w^4-5*w^3+4*w^2-6*w+60;%f=((w+1)^4)*((w-2)^2);注:上述“%”后面分别为要求解的三个方程,求解该方程式把相应方程式前面的“%”删除,点击保存,并运行下面的hjf.m文件,输入相应的初始步长h0、初始点x0、收敛法则epsilan的值○2编写进退法程序文件,命名为ab1.m保存,程序代码如下:function [a,b]=ab1(h0,x0)h=h0;x1=x0;f1=fx(x1);x2=x1+h;f2=fx(x2);if f2>f1h=-h;x3=x1;f3=f1;x1=x2;f1=f2;x2=x3;f2=f3;endx3=x2+h;f3=fx(x3);while f2>=f3x1=x2;f1=f2;x2=x3;f2=f3;x3=x2+2*h;f3=fx(x3);endif h<0a=x3;b=x1;elsea=x1;b=x3;end○3编写黄金分割法程序文件,命名为hjfgf.m 保存,程序代码如下: function hjfclearh1 = input('h0=?');x1=input('x0=?');epsilan=input('epsilan=?');[a,b]=ab1(h1,x1);x1=a+0.382*(b-a);f1=fx(x1);x2=a+0.618*(b-a);f2=fx(x2);while abs(b-a)>epsilanif f1>f2a=x1;x1=x2;f1=f2;x2=a+0.618*(b-a);f2=fx(x2);elseb=x2;x2=x1;f2=f1;x1=a+0.382*(b-a);f1=fx(x1);endendxm=(a+b)/2;['Optimal result:',blanks(3),'xm=[',...num2str(xm),']',blanks(6),'fm=',num2str(fx(xm))]4、实验结果()3610min )12+-=t t t f结果: *t = 5.0001 =*f 11 (h0=0.3、x0=0、epsilan=0.001)()60645min )2234+-+-=t t t t t f结果: *t = 3.2795 =*f 22.659 (h0=0.3、x0=0、epsilan=0.001)()()()2421min )3-+=t t t f 结果: *t =__-0.99989__ =*f __1.4253e-015__ (h0=0.3、x0=0、epsilan=0.001)。
机械优化设计方法第四章 一维搜索
![机械优化设计方法第四章 一维搜索](https://img.taocdn.com/s3/m/b0dff2d476a20029bd642d60.png)
一、消去法 的基本原理 消去法的基 本思路是:逐步 缩小搜索区间, 直至最小点存在 的范围达到允许 的误差范围为止。 设一元函数 f(α)如图4-8所 示,起始搜索区 间为[a,b],α* 为所要寻求的函 数的极小点。
4-3 黄金分割法பைடு நூலகம்
在搜索区间[a,b]内任取两点α(1)与α(2),且a<α(1)<α(2)<b, 计算函数f(α(1))与f(α(2))。当将f(α(1))与f(α(2))进行比较时,可 能的猜况有下列三种: (1) f(α(1))<f(α(2)):如图4-8(a)、(b)所示,这种情况下。 可丢掉[α(2),b]部分。而最小点α*必在区间[a,α(2)]内。 (2) f(α(1))>f(α(2)):如图4-8(c)、(d)所示,这种情况下, 可丢掉[a,α(1)]部分,而最小点α*必在区间[α(1),b]内。 (3) f(α(1))=f(α(2)):如图4-8(e)所示,这种情况下,不论 丢掉[a,α(1)]还是丢掉[α(2) ,b],最小点α*必在留下的部分内。 因此,只要在搜索区间内任取两点,计算它们的函数值 并加以比较之后,总可以把搜索的区间缩小。这就是消去 法的基本原理。
对于第(1)、(2)两种情况,经过缩小的区间内都保存了一 个点的函数值,即f(α(1))或f(α(2)),只要再取一个点α(3) ,计 算函数值f(α(3))并进行比较,就可以再次缩短区间进行序 列消去。但对于第(3)情况,区间[α(1),α(2)]中没有已知点的 函数值,若再次缩短区间必须计算两个点的函数值。为了 简化迭代程序,可以把第(3)种情况合并到前面(1)、(2)两 种情况之一中去,例如可以把上述三种情况合并为下述两 种情况: (1) 若f(α(1))≤f(α(2)),取区间[a,α(2)] (2) 若f(α(1))>f(α(2)),取区间[α(1),b]。 这样做虽然对于原第(3)种情况所取的区间扩大了,但在 进一步搜索时每次只要计算一个点,和第(1)、(2)种情况 一致,简化了迭代程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《机械优化设计》
实验报告
班级: 机械设计(2)班
姓名:邓传淮
学号:0901102008
1 实验名称:一维搜索黄金分割法求最佳步长
2 实验目的:通过上机编程,理解一维搜索黄金分割法的原理,了解计算机在优化设计中的应用。
3 黄金分割法的基本原理
黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点α*的一种方法。
它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数[6],即只在单峰区间内才能进行一维寻优,其收敛效率较低。
其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]。
具体步骤是:在区间[a,b]内取点:a1 ,a2 把[a,b]分为三段。
如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1)<f(a2) ,令b=a2,a2=a1,a1=b-r*(b-a),如果|(b-a)/b|和|(y1-y2)/y2|都大于收敛精度ε重新开始。
因为[a,b]为单峰区间,这样每次可将搜索区间缩小0.618倍或0.382倍,处理后的区间都将包含极小点的区间缩小,然后在保留下来的区间上作同样的处理,如此迭代下去,将使搜索区[a,b]逐步缩小,直到满足预先给定的精度时,即获得一维优化问题的近似最优解。
黄金分割法原理如图所示,
4实验所编程序框图(1)进退发确定单峰区间的计算框图
(2)黄金分割法计算框图
5 程序源代码
(1)进退发确定单峰区间的程序源代码
#include<stdio.h>
#include<math.h>
#define f(x) pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main()
{
int k;
double x,h,x1,x2,x3;
double f1,f2,f3,f;
double a,b;
x1=0;
h=1;
x2=x1+h;
f1=f(x1);
f2=f(x2);
if (f1>f2)
{
h=2*h;
x3=x2+h;
f3=f(x3);
. }
else
{
h=-h;
x1=x2;
f1=f2;
x3=x2+h;
f3=f(x3);
}
printf("x1=%lf,x2=%lf\0",x1,x2);
do
{
x1=x2;
x2=x3;
f1=f2;
f2=f3;
x3=x2+h;
f3=f(x3);
}while(f3<f2);
if (h>0)
{
a=x1;
b=x3;
}
else
{
a=x3;
b=x1;
}
printf("a=%lf,b=%lf\n",a,b);
}
(2)黄金分割法的程序源代码
#include<stdio.h>
#include<math.h>
#define f(x)=pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main()
{
int k;
double x,h,x1,x2,x3,c;
double f1,f2,f3,f;
double a,b;
printf("input c:\n");
scanf("%lf",&c);
a=1;
b=5;
x1=b-0.618*(b-a);printf("x1=%lf ",x1);
f1=f(x1);printf("f1=%lf ",f1);
x2=a+0.618*(b-a);printf("x2=%lf ",x2);
f2=f(x2);printf("f2=%lf ",f2);
k=0;
loop:
{
if(f1<f2)
{
b=x2;printf("b=%lf ",b);
x2=x1;printf("x2=%lf ",x2);
f2=f1;printf("f2=%lf ",f2);
x1=a+0.382*(b-a);printf("x1=%lf ",x1);
f1=f(x1);printf("f1=%lf ",f1);
}
else
{
a=x1;printf("a=%lf ",a);
x1=x2;printf("x1=%lf ",x1);
f1=f2;printf("f1=%lf ",f1);
x2=a+0.618*(b-a);printf("x2=%lf ",x2);
f2=f(x2);printf("f2=%lf ",f2);
}
k=k+1;
printf("k=%d\n",k);
}
if(fabs(b-a<c))
{
x=0.5*(b+a);printf("x=%lf ",x);
f=f(x);printf("f=%lf ",f);
}
else
{
goto loop;
}
getchar();
}
6 程序运行截图。