优化设计实验报告

合集下载

机械优化设计实验报告

机械优化设计实验报告

《机械优化设计》实验报告目录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 题目 (24)6.4 源程序代码及结果 (24)7.机械设计实际问题分析 (30)7.2计算过程如下 (30)7.3 源程序编写 (31)8.报告总结 (33)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黄金分割法基本思路:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。

高中物理实验优化设计教案

高中物理实验优化设计教案

高中物理实验优化设计教案
实验目的:通过优化设计实验,让学生了解如何在实验中进行设计优化,提高实验的精确
性和可靠性,培养学生的实验设计能力和创新意识。

实验内容:以测量光滑斜面上物体滑动加速度为例,设计一个优化实验,通过改变斜面的
角度、物体的质量和表面的摩擦系数等因素,优化实验方案,使实验结果更加准确和可靠。

实验步骤:
1. 设计实验方案:根据实验目的,确定要改变的实验因素和要测量的实验参数,设计实验
方案。

2. 准备实验材料:准备斜面、物体、计时器、测量尺等实验材料。

3. 进行实验:依据设计方案,进行实验操作,记录实验数据。

4. 分析数据:分析实验数据,寻找影响实验结果的因素,并进行优化设计。

5. 重新进行实验:根据优化设计方案,重新进行实验,比较实验结果的差异。

实验要求:
1. 实验操作要准确、规范,记录实验过程和数据。

2. 分析实验数据,找出影响实验结果的因素,并尝试优化设计。

3. 着重培养学生实验设计能力和创新意识。

实验评估:
1. 实验记录:实验过程和数据记录是否准确完整。

2. 数据分析:对实验数据的分析是否合理,是否找出影响实验结果的因素。

3. 优化设计:是否尝试优化设计,提出改进方案。

实验总结:通过优化设计实验,学生可以提高实验设计能力和创新意识,更好地掌握物理
实验技能,培养科学研究的思维方式和方法。

机械优化设计实验报告

机械优化设计实验报告

一、实验目的本次实验旨在通过计算机编程,加深对机械优化设计方法的理解,掌握常用的优化算法,并能够利用计算机解决实际问题。

二、实验内容1. 黄金分割法(1)实验原理黄金分割法是一种常用的优化算法,适用于一元函数的极值求解。

其基本原理是:在给定初始区间内,通过迭代计算,逐步缩小搜索区间,直到满足收敛条件。

(2)实验步骤① 设计实验程序,实现黄金分割法的基本算法。

② 编写函数,用于计算一元函数的值。

③ 设置初始区间和收敛精度。

④ 迭代计算,更新搜索区间。

⑤ 判断是否满足收敛条件,若满足则输出结果,否则继续迭代。

(3)实验结果通过编程实现黄金分割法,求解函数f(x) = x^3 - 6x^2 + 9x + 1在区间[0, 10]内的极小值。

实验结果显示,该函数在区间[0, 10]内的极小值为1,且收敛精度达到0.001。

2. 牛顿法(1)实验原理牛顿法是一种求解非线性方程组的优化算法,其基本原理是:利用函数的导数信息,逐步逼近函数的极值点。

(2)实验步骤① 设计实验程序,实现牛顿法的基本算法。

② 编写函数,用于计算一元函数及其导数。

③ 设置初始值和收敛精度。

④ 迭代计算,更新函数的近似值。

⑤ 判断是否满足收敛条件,若满足则输出结果,否则继续迭代。

(3)实验结果通过编程实现牛顿法,求解函数f(x) = x^3 - 6x^2 + 9x + 1在区间[0, 10]内的极小值。

实验结果显示,该函数在区间[0, 10]内的极小值为1,且收敛精度达到0.001。

3. 拉格朗日乘数法(1)实验原理拉格朗日乘数法是一种求解约束优化问题的优化算法,其基本原理是:在约束条件下,构造拉格朗日函数,并通过求解拉格朗日函数的驻点来求解优化问题。

(2)实验步骤① 设计实验程序,实现拉格朗日乘数法的基本算法。

② 编写函数,用于计算目标函数、约束函数及其导数。

③ 设置初始值和收敛精度。

④ 迭代计算,更新拉格朗日乘数和约束变量的近似值。

物流配送优化设计实验报告

物流配送优化设计实验报告

物流配送优化设计实验报告1 引言1.1 实验背景及意义随着我国经济的快速发展,电子商务的兴起,物流行业得到了前所未有的发展机遇。

物流配送作为物流行业中的重要环节,其效率直接影响着企业的运营成本和客户满意度。

然而,当前我国物流配送面临着诸多问题,如配送路径不合理、配送成本高、配送时效性差等。

本实验旨在通过对物流配送优化设计的研究,提出合理的优化策略和算法,为我国物流配送行业的发展提供理论支持和实践指导。

1.2 实验目的本实验的主要目的有以下几点:1.分析我国物流配送行业的现状,找出存在的问题,为后续优化设计提供依据。

2.研究物流配送优化设计的方法和策略,提高配送效率和降低配送成本。

3.对比分析不同优化算法的性能,为实际物流配送提供有效的算法支持。

4.通过实验验证所提优化策略和算法的有效性,为物流企业实施优化提供参考。

1.3 实验内容与方法本实验主要包括以下内容:1.分析我国物流配送行业的现状,总结存在的问题。

2.研究物流配送优化设计的原理与策略,提出针对性的优化方法。

3.介绍粒子群算法和遗传算法,分析其在物流配送优化中的应用。

4.设计实验方案,利用实际数据验证所提优化策略和算法的有效性。

实验方法主要包括文献调研、数据收集与处理、算法设计与实现、实验分析等。

通过对相关理论和方法的深入研究,结合实际数据,探讨物流配送优化的有效途径。

2. 物流配送现状分析2.1 我国物流配送行业概况我国物流配送行业随着电子商务的兴起和市场经济的发展,已经取得了显著的成就。

当前,物流配送行业呈现出以下特点:首先,物流配送市场规模不断扩大。

随着消费者对购物便利性需求的提升,物流配送行业迎来了快速发展期,各大电商平台纷纷加大物流配送体系的建设力度。

其次,物流配送技术不断升级。

在人工智能、大数据等技术的推动下,物流配送行业逐步实现信息化、智能化,如无人配送车、无人机等新型配送方式已开始试点运行。

再次,物流企业竞争激烈。

随着市场的扩大,物流企业数量不断增加,竞争愈发激烈,企业之间不仅在价格上竞争,更在服务质量、配送速度等方面展开竞争。

机构优化设计综合实验报告 摆动导杆机构资料.doc

机构优化设计综合实验报告 摆动导杆机构资料.doc

机构优化设计综合实验报告摆动导杆机构资料.doc机构优化设计综合实验报告学号: 姓名: 班级: 成绩:同组实验同学: 实验日期: 指导教师:1. 实验目的:学习在ADAMS软件平台上建立摆动导杆机构的参数化仿真模型,并对该机构模型进行运动学、动力学分析和机构的优化设计。2. 实验内容:摆动导杆机构是一种应用十分广泛的典型机构,如下图所示。该机构工作时,曲柄为原动件,匀速转动,滑块2为执行构件,做往复直线运动。滑块2从左向右运动时称为工作行程,此时要求速度较低并且均匀;滑块2从右向左运动时称为空回行程,此时要求速度较高,以提高工作效率。为此,该机构应具有急回特性。另外,滑块2在工作行程中,受到阻力F P的作用,而在空回行程中则不受阻力作用。已知:曲柄的转速为n(r/min),各构件的尺寸、质心位置和质量;导杆绕质心的转动惯量J S及阻力F P的变化规律;滑块2的导路位于导杆端点B所做圆弧高的平分线上。要求:(1)建立摆动导杆机构运动尺寸的数学模型;(2)建立摆动导杆机构的参数化仿真模型;(3)对机构进行运动学和动力学仿真分析;(4)对机构进行设计研究和优化设计。3. 实验参数:4. 实验结果;(1) 机构在左极限位置时,在直角坐标系下的建模过程,即机构各点的坐标表达式。10 X + 30 Y(2)滑块2质心点的位移、速度和加速度曲线。(3)导杆的角速度和角加速度曲线。(4)阻力曲线、各转动副的受力曲线和曲柄上的平衡力矩曲线。(5)机构优化结果报告。5. 思考题:(1)摆动导杆有没有急回特性?如果有,所设计方案中其行程速度变化系数k为多少?答:有,且k=(180°+θ)/(180°-θ),根据现有数据,得θ=2*α=2*arcsin(11/38)= 33.65°,故k=1.460。(2)对摆动导杆机构进行参数化建模的步骤是什么?答:1.建立设计变量:即建立设计初始参数和建立设计变量;2.建立设计点:在Point Table上创建设计点及其数值或表达式;3.创建运动件:对于本模型,有滑块1、导杆、曲柄、滑块2和连杆;4.创建运动副:即创建相应位置的转动副或移动副;5.给机构施加驱动:在相应位置加驱动力;6.机构仿真:观察其运动情况;7.细化机构仿真模型:即修改质心位置、惯性参数、加力、力的参数化等。(3)在对摆动导杆机构进行优化设计前,为什么要进行设计研究?答:当需要迅速获得一个经过改善的模型,即在对摆动导杆机构进行优化设计前,它应满足机构设计提出的各种要求和所有的必须动作,在满足一定的设计条件下,要对一些变量进行设计方案的研究,从中找出一种方案使机构中各铰链点的支反力达到最小值。故进行设计研究很有必要。(4)试举摆动导杆机构在工程实际中2—3个应用案例。答:1. M6的低频振动攻丝工作台用摆动导杆机构近似替代低频振动攻丝机中的简谐扭振机构,对近似替代的可能性和可行性进行了分析。得出结论:当曲柄长度与机架长度之比小于0.1时,摆动导杆机构可以足够精确地输出正弦函数。给出了该机构在攻螺纹直径为M6的低频振动攻丝工作台中的应用实例。2. 小袋包装机针对我国国内全自动计量杯式小袋包装机上传动系统的不足,提出了摇块式摆动导杆滑槽间歇机构实施量杯旋转盘动停结合,保证计量杯有充足的时间加料和排料;并确定了此机构的基本参数和几何尺寸,还分析了该机构的运动特性.3. 牛头刨床牛头刨床的摆动导杆的机构用于调整滑枕的行程。

西华大学优化设计实验报告

西华大学优化设计实验报告

优化设计实验报告课程代码: 6003999 学生姓名:学号:所在学院:机械工程与自动化学院指导老师:陈宏实验地点:机械学院5A-304实验方板有限元分析一、实验目的1、了解、掌握优化设计有限元的分析过程2、熟练运用abaqus软件进行有限元的分析二、实验工具盒实验对象工具:微型计算机,abaqus6.12有限元分析软件实验对象:长、宽均为100mm,厚1毫米,平板几何中心处有一直径5mm通孔的方板。

运用abaqus软件对给定的实验对象进行有限元分析三、实验内容由于带孔方板是对称结构,我们取它的四分之一进行有限元分析,可以减少分析过程的复杂性。

将方板四分之一在abaqus中建模,分别对它属性、装配、分析步、载荷、网格进行参数设定,让后进行作业得出方板各个分析体受力过程位移和力大小的改变情况。

五、实验步骤1、打开abaqus软件建立模型如图1所示;图12、对模型的属性进行参数设置,包括材料的创建和截面的创建,如图2所示;图2 3、将模型进行装配,如图3所示;图3 4、进行分析步的设定,如图4所示;图45、对其载荷进行参数设置并且设置边界条件(载荷F=124MPa,边界条件设为与孔相邻的两边,如图5所示;图56、网格设置包括边上布种、指派网格控制属性、指派单元类型,如图6所示;图67、创建作业,提交作业经过分析得出方板在力和位移上的变化,如下图所示;方板受力变化云图方板受力前后比较方板位移前后变化比较六、实验总结及其注意事项1、实验过程中要做好软件中每一步的参数设置,如果出现问题仔细思考或者向指导老师反映,并反复操作完成实验。

2、实验步骤可以不按照上面的顺序进行,但是在网格布种的过程中,一定要将对象中的“装配”改成“部件”否则无法完成实验。

3、在该实验中划分的网格一定要尽量均匀,如果不均匀的话,分析出来的结果可能不会那么理想4、本实验也可以改用其他软件完成,例如vb编程、analysis等。

5、本实验中所加的力一定要是负的,即拉力。

优化设计黄金分割法试验报告

优化设计黄金分割法试验报告

机械优化设计黄金分割法实验报告1、黄金分割法基本思路:黄金分割法适用于[a , b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。

因此,这种方法的适应面非常广。

黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点al, a2,并计算其函数值。

a1, a2将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小。

然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。

2黄金分割法的基本原理一维搜索是解函数极小值的方法之一,其解法思想为沿某一已知方向求目标函数的极小值点。

一维搜索的解法很多,这里主要采用黄金分割法(0.618法)。

该方法用不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受。

rl=a+O 382(Js-a)r2=a+0.618(b-a)如图所農新区间为[si, r2]以再新区间,继续求新的试点黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点a *的一种方法。

它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数⑹,即只在单峰区间内才能进行一维寻优,其收敛效率较低。

其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间⑺。

具体步骤是:在区间[a,b]内取点:al,a2把[a,b]分为三段。

如果f(a1)>f(a2),令a=a1,a仁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 | 都大于收敛精度£重新开始。

优化设计的实验报告

优化设计的实验报告

优化设计的实验报告一、设计目的和背景现代工程设计中,优化设计是提高产品性能和降低成本的重要手段之一、优化设计的目标是通过合理的设计改进产品的形状、结构、材料和工艺等方面,使得产品在给定的约束条件下达到最优性能。

本实验旨在通过优化设计的方法,提高一个结构件的刚度。

二、实验内容实验采用有限元分析软件对原始结构件进行建模和分析,确定初始的结构刚度。

然后,在对初始结构进行可行性分析的基础上,采用一种优化算法,按照给定的约束条件进行优化设计,得到改进后的结构。

最后,再次使用有限元分析软件对改进后的结构进行分析,得到新的结构刚度。

三、实验步骤1.建立原始结构件的有限元模型。

首先,使用有限元分析软件将原始结构件的几何形状转换为一个虚拟三维模型。

然后,在模型上划分网格,并设置结构件材料的力学参数,以及边界条件等。

2.进行有限元分析。

对于原始结构件的有限元模型,进行静态或动态分析,得到相应的位移和应力场。

3.可行性分析。

根据分析结果,评估是否存在结构刚度不足问题,以及可能的改进方向。

4.优化设计。

根据可行性分析的结果,选择一种适当的优化算法进行设计优化。

将原始结构件的有限元模型作为初始解,通过迭代更新模型参数,直到满足约束条件。

5.进行新结构的有限元分析。

在得到优化后的结构模型后,使用有限元分析软件进行新结构的分析,得到新的位移和应力场。

6.结果分析和比较。

对比优化前后的分析结果,分析改进的效果,验证优化设计的可行性和有效性。

四、实验结果和分析根据实验中的步骤,首先对原始结构进行有限元分析,得到其初始的位移和应力场。

然后,根据初始分析结果进行可行性分析,发现结构刚度不足的问题。

在优化设计过程中,采用遗传算法对结构进行优化,设置约束条件为使结构刚度提高20%。

经过多次迭代后,得到优化后的结构。

最后,再次进行有限元分析,得到新的位移和应力场。

通过对比优化前后的分析结果,发现新结构在刚度方面有了显著的提高,并且在位移和应力方面也有所改善。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机械优化设计实验报告姓名:欧阳龙学号:2007500817班级:07机设一班一、黄金分割法1、 数学模型2()2f x x x =+,56x -≤≤2、 黄金分割法简介黄金分割法适用于单谷函数求极小值问题,且函数可以不连续。

黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间[],a b 内适当插入两点1α、2α,并计算其函数值。

1α、2α将区间分成三段。

应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。

然后再在保留下来的区间上作同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。

黄金分割法能使相邻两次都具有相同的缩短率0.618,故黄金分割法又称作0.618法。

3、黄金分割法程序清单#include<stdio.h>#include<math.h>/*目标函数*/float ff(float x){float y;y=x*x+2*x;return(y);}main(){float a,b,ab,Epsilon;float y1,y2,Alpha1,Alpha2;float Lambda=0.618;printf("please input the arear and Epsilon\n");scanf("%f,%f,%f",&a,&b,&Epsilon);Alpha1=b-Lambda*(b-a),Alpha2=a+Lambda*(b-a);printf("%f,%f\n",Alpha1,Alpha2);y1=ff(Alpha1);y2=ff(Alpha2);printf("y1=%f,y2=%f\n",y1,y2);do{if(y1>=y2){a=Alpha1;Alpha1=Alpha2;y1=y2;Alpha2=a+Lambda*(b-a);y2=Alpha2*Alpha2+2*Alpha2;}else{b=Alpha2;Alpha2=Alpha1;y2=y1;Alpha1=b-Lambda*(b-a);y1=Alpha1*Alpha1+2*Alpha1;}printf("a=%f,b=%f,y1=%f,y2=%f\n",a,b,y1,y2);}while(!(abs((b-a)/b)<Epsilon&&abs((y2-y1)/y2)<Epsilon));ab=0.5*(a+b);y1=ff(ab);printf("the result is :%f",y1);getch();}4、运行结果:一、 变尺度法1、 数学模型211222121248),(x x x x x x x F --+=2、 变尺度法简介基本思想:(1) 用简单矩阵代替二阶导数矩阵的逆矩阵12()k f X -⎡⎤∇⎣⎦ (2) 用坐标变换简化目标函数具体如下:当用牛顿法寻求极小点时,其牛顿迭代公式为11(0,1,2)k k k k k x x G g k α+-=-=其中在迭代中建立变尺度矩阵()k k H H x ≡来替换1k G -,即构造一个矩阵序列{}k H 来逼近海赛逆矩阵序列{}1k G -。

每迭代一次,尺度就改变一次,这正是“变尺度”的含义。

这样,上式变为11(0,1,2)k k k k k xx G g k α+-=-= 其中k α是从k x 出发,沿方向 k k k d H g =-作一维搜索而得到的最佳步长。

当k H I (单位矩阵)时,它就变成最速下降法。

这就是变尺度法的基本思想。

变尺度法程序清单:/*计算 f(x1,x2)=x1^2+8*x2^2-4*x1-2*x1*x2 的无约束极值,初始点x0=[1,1]。

tt ---- 一维搜索初始步长ff ---- 差分法求梯度时的步长ac ---- 终止迭代收敛精度ad ---- 一维搜索收敛精度n ----- 设计变量的维数xk[n] -- 迭代初始点*/#include<stdio.h>#include<stdlib.h>#include<math.h>#include<conio.h>#define tt 0.01#define ff 1.0e-6#define ac 1.0e-6#define ad 1.0e-6#define n 8double ia;double fny(double *x){double x1=x[0],x2=x[1];double f;f=x1*x1+8*x2*x2-4*x1-2*x1*x2;return f;}double * iterate(double *x,double a,double *s){double *x1;int i;x1=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++)x1[i]=x[i]+a*s[i];return x1;}double func(double *x,double a,double *s){double *x1;double f;x1=iterate(x,a,s);f=fny(x1);return f;}void finding(double a[3],double f[3],double *xk,double *s) {double t=tt;int i;double a1,f1;a[0]=0;f[0]=func(xk,a[0],s);for(i=0;;i++){a[1]=a[0]+t;f[1]=func(xk,a[1],s);if(f[1]<f[0]) break;if(fabs(f[1]-f[0])>=ad){t=-t;a[0]=a[1];f[0]=f[1];}else{if(ia==1) return;t=t/2;ia=1;}}for(i=0;;i++){a[2]=a[1]+t;f[2]=func(xk,a[2],s);if(f[2]>f[1]) break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if(a[0]>a[2]){a1=a[0];f1=f[0];a[0]=a[2];f[0]=f[2];a[2]=a1;f[2]=f1;}return;}double lagrange(double *xk,double *ft,double *s){int i;double a[3],f[3];double b,c,d,aa;finding(a,f,xk,s);for(i=0;;i++){if(ia==1) { aa=a[1]; *ft=f[1]; break; }d=(pow(a[0],2)-pow(a[2],2))*(a[0]-a[1])-(pow(a[0],2)-pow(a[1],2))*(a[0]-a[2]);if(fabs(d)==0) break;c=((f[0]-f[2])*(a[0]-a[1])-(f[0]-f[1])*(a[0]-a[2]))/d;if(fabs(c)==0) break;b=((f[0]-f[1])-c*(pow(a[0],2)-pow(a[1],2)))/(a[0]-a[1]);aa=-b/(2*c);*ft=func(xk,aa,s);if(fabs(aa-a[1])<=ad) {if(*ft>f[1]) aa=a[1];break;}if(aa>a[1]){if(*ft>f[1]) {a[2]=aa;f[2]=*ft;}else if(*ft<f[1]) {a[0]=a[1];a[1]=aa;f[0]=f[1];f[1]=*ft;}else if(*ft==f[1]){a[2]=aa;a[0]=a[1];f[2]=*ft;f[0]=f[1];a[1]=(a[0]+a[2])/2;f[1]=func(xk,a[1],s);}}else{if(*ft>f[1]) {a[0]=aa;f[0]=*ft;}else if(*ft<f[1]) {a[2]=a[1];a[1]=aa;f[2]=f[1];f[1]=*ft;} else if(*ft==f[1]){a[0]=aa;a[2]=a[1];f[0]=*ft;f[2]=f[1];a[1]=(a[0]+a[2])/2;f[1]=func(xk,a[1],s);}}}if(*ft>f[1]) {*ft=f[1];aa=a[1];}return aa;}double *gradient(double *xk){double *g,f1,f2,q;int i;g=(double*)malloc(n*sizeof(double));f1=fny(xk);for(i=0;i<n;i++){q=ff;xk[i]=xk[i]+q; f2=fny(xk);g[i]=(f2-f1)/q; xk[i]=xk[i]-q;}return g;}double * bfgs(double *xk){double u[n],v[n],h[n][n],dx[n],dg[n],s[n];double aa,ib;double *ft,*xk1,*g1,*g2,*xx,*x0=xk;double fi;int i,j,k;ft=(double *)malloc(sizeof(double));xk1=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++){s[i]=0;for(j=0;j<n;j++){h[i][j]=0;if(j==i) h[i][j]=1;}}g1=gradient(xk);fi=fny(xk);x0=xk;for(k=0;k<n;k++){ib=0;if(ia==1) { xx=xk; break; }ib=0;for(i=0;i<n;i++) s[i]=0;for(i=0;i<n;i++)for(j=0;j<n;j++)s[i]+= -h[i][j]*g1[j];aa=lagrange(xk,ft,s);xk1=iterate(xk,aa,s);g2=gradient(xk1);for(i=0;i<n;i++)if((fabs(g2[i])>=ac)&&(fabs(g2[i]-g1[i])>=ac)){ib=ib+1;}if(ib==0) { xx=xk1; break; }fi=*ft;if(k==n-1){ int j;xk=xk1;for(i=0;i<n;i++)for(j=0;j<n;j++){h[i][j]=0;if(j==i) h[i][j]=1;}g1=g2; k=-1;}else{int j;double a1=0,a2=0;for(i=0;i<n;i++){dg[i]=g2[i]-g1[i];dx[i]=xk1[i]-xk[i];}for(i=0;i<n;i++){int j;u[i]=0;v[i]=0;for(j=0;j<n;j++){u[i]=u[i]+dg[j]*h[j][i];v[i]=v[i]+dg[j]*h[i][j];}}for(j=0;j<n;j++){a1+=dx[j]*dg[j];a2+=v[j]*dg[j];}if(fabs(a1)!=0){a2=1+a2/a1;for(i=0;i<n;i++)for(j=0;j<n;j++)h[i][j]+=(a2*dx[i]*dx[j]-v[i]*dx[j]-dx[i]*u[j])/a1;}xk=xk1; g1=g2;}}if(*ft>fi) { *ft=fi; xx=xk;}xk=x0;return xx;}void main (){int k;double *xx,f;double xk[n]={1,1};xx=bfgs(xk);f=fny(xx);printf("\n\nThe Optimal Design Result Is:\n");for(k=0;k<n;k++){printf("\nk=%d\n\tx[%d]*=%f",k,k+1,xx[k]);}printf("\n\tf*=%f",f);getch();}4、运行结果:三、复合形法1、数学模型168,F 222121--=x x x x )(2、复合形法简介复合形法是指n 维空间上取k (12n k n +≤≤)个点作为顶点所构成的n 维超多面体。

相关文档
最新文档