优化设计黄金分割发以及迭代法
- 格式:docx
- 大小:454.36 KB
- 文档页数:7
Matlab中常用的优化算法与迭代方法引言优化问题是在约束条件下求解使得目标函数达到最优值的过程,是许多领域中常见的问题。
而Matlab作为一种功能强大的计算软件,提供了各种优化算法和迭代方法,方便用户解决各种优化问题。
本文将介绍Matlab中常用的优化算法与迭代方法,并从理论与实践两个角度进行探讨。
一、最优化理论基础在了解Matlab中的具体算法之前,有必要了解一些最优化理论的基础知识。
最优化问题可以分为线性最优化问题和非线性最优化问题。
线性最优化问题的目标函数和约束条件都是线性的,而非线性最优化问题中目标函数和/或约束条件可以是非线性的。
在解决这些最优化问题时,有两种常用的方法:直接方法和间接方法。
直接方法是通过对优化问题进行求解,找到目标函数的最优值和最优解。
间接方法则是通过求解一系列相关方程,找到使目标函数最小的解。
对于大多数实际问题,非线性最优化问题往往需要使用间接方法进行求解。
二、Matlab中的优化算法1. 一维搜索方法一维搜索是一种简单但有效的优化方法,常用于非线性最优化问题的初始搜索和求解。
Matlab中提供了几种常用的一维搜索方法,包括黄金分割和斐波那契搜索方法。
黄金分割搜索方法和斐波那契搜索方法都是通过在一个区间内进行迭代搜索,以找到使目标函数达到最小值的位置。
这两种方法都是基于区间的分割原理,通过将区间划分为两个部分并缩小搜索空间,逐步逼近最优解。
2. 梯度下降法梯度下降法是一种常用的迭代方法,用于求解非线性最优化问题。
该方法通过迭代调整参数值,以找到目标函数的最小值。
具体而言,梯度下降法使用目标函数的负梯度方向作为搜索方向,并在每次迭代中更新参数值。
Matlab中提供了几种梯度下降法的变种,包括最速下降法和共轭梯度法。
最速下降法是一种简单但有效的梯度下降方法,它根据目标函数的梯度方向和学习率进行参数更新。
共轭梯度法是一种改进的梯度下降法,它在每次迭代中使用一组相互正交的搜索方向,加速收敛速度。
优化设计优化设计:就是在规定的设计限制条件下,运⽤最优化原理和⽅法将实际⼯程设计问题转化为最优化问题,然后以计算机为⼯具进⾏寻优计算,在全部可⾏设计⽅案中,寻求满⾜预定设计⽬标的最佳设计⽅案。
优化设计的⽅法:⾸先必须将实际问题加以数学描述,形成⼀组由数学表达式组成的数学模型;然后选择⼀种最优化数值计算⽅法和计算机程序,在计算机上进⾏寻优运算求解,得到⼀组最佳的设计参数。
这组设计参数就是设计的最优解。
优化设计的步骤:(1)设计课题分析(2)建⽴数学模型(3)选择优化设计⽅法(4)上机计算求优解上述优化设计过程的四步其核⼼是进⾏如下两项⼯作:⼀是分析设计任务,将实际问题转化为⼀个最优化问题,即建⽴优化问题的数学模型;⼆是选⽤适⽤的优化⽅法在计算机上求解数学模型,寻求最优设计⽅案。
数学模型三要素:设计变量(独⽴):⽬标函数的极⼩化minf(x):约束条件:g(x)<0等值线有以下⼏个特点:(1) 不同值的等值线不相交;(2) 除极值点外,在设计空间内,等值线不会中断;(3) 等值线充满整个设计空间;(4) 等值线分布的疏或密,反应出函数值变化的慢或快;(5) ⼀般来说,在极值点附近,等值线近似是同⼼椭圆族,极值点就是椭圆的中⼼点。
在设计空间内,⽬标函数值相等点的连线:对于⼆维问题,构成了等值线;对于三维问题,构成了等值⾯;对于四维以上的问题,则构成了等值超曲⾯。
约束条件约束条件是设计变量选取的限制条件,或称设计约束。
按照约束条件的形式不同,约束有不等式和等式约束两类,⼀般表达式为:约束的⼏何意义是它将设计空间⼀分为⼆,形成了可⾏域和⾮可⾏域。
不满⾜约束条件的设计点构成该优化问题的不可⾏域。
可⾏域也可看做满⾜所有约束条件的设计点的集合,因此,可⽤集合表⽰如下:对于优化问题数学模型的求解,⽬前可采⽤的求解⽅法有三种:数学解析法⽤数学解析法(如微分、变分法等)来求出最优解数学解析法是优化设计的理论基础。
改进的黄金分割法一、引言黄金分割法的基本思想是:通过取试探点和进行函数值的比较,使包含极小点的搜索区间不断缩短,当区间长度缩短到一定程度时,区间上各点的函数值均接近极小值,从而各点可以看作为极小点的近似;也即是,依照"去坏留好"原则,对称原则,以及等比收缩原则来逐步缩小搜索范围。
当函数是凸函数时,我们可以利用函数的凸性,得到函数值的上界和下界,进而利用这些信息,缩短函数不确定区间,达到优化算法的效果。
二、改进的黄金分割法很多人认为黄金分割法是搜索速度最快的方法,从程序编写角度来说,黄金分割法每次只需要插入一个点,每次只需要计算一次函数值,易于理解。
就对区间缩短率来讲,黄金分割法的缩短率是0.618,舍弃的区间是0.382。
但是,如果一个函数是凸函数,根据已知的函数值,可以找到它的最大值和最小值,这些信息有利于得到最优解的位置,进而大大缩减不确定区间。
假设是定义在区间上的连续的,单变量可微的凸函数,给点初始不确定区间[]。
下面介绍两种利用函数的凸性优化黄金分割的方法。
通过凸函数的一阶特征,定理1.3.11[4]:设为非空开凸集,是定义在上的可微函数,则为凸函数的充分必要条件是:(1)证明:必要性设是凸函数,于是对所有, ,有因此,对于,令,得充分性假设(1)成立,任取,。
令,我们有,于是得到:所以是凸函数。
这个定理表明了根据局部导数的线性近似是函数的低估,即凸函数图形位于图形上任一点切线的上方。
根据这个定理,所以函数的最小值一定在切线的上方。
利用凸函数的一阶特征以及已知的最小函数值就可以确定不确定区间。
函数两个端点处的切线和最小函数值的交点,即为缩小的不确定区间。
该算法的基本思想是:已知函数在区间端点两点的函数值,并比较两点函数值的大小,如果,最小值点为。
否则,就取,并给该点的函数赋值;下一步求出函数在两点处的切线函数;最小函数与两切线的交点,即是新的迭代区间[]。
由定理1.3.11,我们知道函数值一定在切线的上方,所以最小值也在新的迭代区间内。
黄金分割法机械优化设计机械优化设计黄金分割法班级:学硕一班学号:_姓名:______黄金分割法黄金分割法也成为0.618法,是一种应用广泛的一维搜索方法。
该方法对函数张)无特殊要求,函数甚至可以是不连续的。
黄金分割法是利用序列消去原理,通过不断缩小单峰区间长度,使搜索区间不断缩小,从而不断逼近目标函数极小点的一种优化方法o在搜索区间[a,b]内必须按下述规则对称地取勺和冬两点,使%= —“),a2=a + A(b-a)f这两点把区间分为三段,计算插入点的函数值,如图1-1所示。
根据单峰函数的性质,通过比较函数值大小,删去其中一段,使搜索区间缩小。
在新的区间继续上面的过程,使搜索区间不断缩小,当搜索区间无限缩小时,便可得到函数在极小点附近的近似解。
在第一次缩小区间后,新区间只需要再插入一点即可形成区间新三段。
按比例&缩小,新区间三段与原区间三段具有相同的比例分布,每次缩小所得新区间长度与原区间长度之比成为区间收缩率-设初始区间长度为L,为了保证区间收缩率不变,第一次收缩后的长度为弘,第二次收缩后的长度为厶(1 _兄), 而第二次的收缩率应该相等。
AL/L = (1 一A)/AL ->22 =(1-2)解次方程并舍去负根,就可得到2 = 75-1/2 = 0.618 o所以,⑷和色两点的取法为:a} = b-0.618(Z?-a)9 a2 = “+ 0.618(〃一a) o所以,对于黄金分割法,适用于设计变量少的优化问题中的一维搜索。
二、黄金分割法的搜索过程1)给出初始搜索区间及收敛精度,将別a〕=b-0・618(b-a), = f(a) y a = 6/+ 0.618(Z?-«), f = /(cr);并计0.6182 )按坐标点计算公式计算a〕=b-0・618(b-a), = f(a) y a = 6/+ 0.618(Z?-«), f = /(cr);并计算其对应的函数值。
机械优化设计黄金分割法实验报告1、黄金分割法基本思路:黄金分割法适用于[a,b]区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续。
因此,这种方法的适应面非常广。
黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点al,a2,并计算其函数值。
al,a2将区间分成三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,是搜索区间得以缩小。
然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。
2黄金分割法的基本原理一维搜索是解函数极小值的方法之一,其解法思想为沿某一已知方向求目标函数的极小值点。
一维搜索的解法很多,这里主要采用黄金分割法(0.618法)。
该方法用不变的区间缩短率0.618代替斐波那契法每次不同的缩短率,从而可以看成是斐波那契法的近似,实现起来比较容易,也易于人们所接受。
rl=a+O382(Js-a)r2=a+0,618(b-a)如图fi(r2)>f(rl)所以新区间为[迈以为新区间,继续求新的试点黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点**的一种方法。
它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数⑹,即只在单峰区间内才能进行一维寻优,其收敛效率较低。
其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]。
具体步骤是:在区间[a,b]内取点:al,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|都大于收敛精度e重新开始。
因为[a,b]为单峰区间,这样每次可将搜索区间缩小0.618倍或0.382倍,处理后的区间都将包含极小点的区间缩小,然后在保留下来的区间上作同样的处理,如此迭代下去,将使搜索区[a,b]逐步缩小,直到满足预先给定的精度时,即获得一维优化问题的近似最优解。
用Powell 法优化设计程序与一维搜索黄金分割法组合
编程求解函数
2112
221242)(x x x x x x f --+=
的极小点x ,初始点x 0=[1,1]T ,迭代精度ε=0.001。
解:已知2112
2
21242)(x x x x x x f --+=,初始点x 0=[1,1]T ,迭代精度ε=0.001。
在该优化设计过程中,黄金分割搜索法作为POWELL 算法主程序中的一部分。
在POWELL 算法运行过程中会多次调用黄金分割搜索算法程序。
这样可以缩短优化设计计算时间。
1. MATLAB 源程序代码 1.1 关于α的目标函数源代码
1.2 一元函数最小值区间函数源代码
1.3黄金分割搜索法函数源代码
1.4 POWELL算法程序源代码
2. 运行程序计算
经过计算可知,极小值点为(3.9998,1.9998),极小值为-8。
3. 验算
通过MATLAB软件内置fminsearch函数进行验算。
3.1 绘图
通过观察可以发现极小值点在(4,2)附近。
3.2 fminsearch 函数验算
通过fminsearch 函数验算,确认极小值点为(4,2),极小值为-8。
4. 结论
2112
221242)(x x x x x x f --+=函数的极小值点为(4,2),极小值为-8。
5. 程序流程图
黄金分割法程序框图。
最优化方法课程设计题目:黄金分割法及其算法实现院(系):数学与计算科学专业:信息与计算科学课题类型:验证性设计性工综合性软件开发2011年12月25日摘要最优化理论和方法日益受到重视,已经渗透到生产、管理、商业、军事、决策等各个领域,而最优化模型与方法广泛应用于工业、农业、交通运输、商业、国防、建筑、同学、政府机关等各个部门及各个领域。
伴随着计算机技术的高速发展,最优化理论与方法的迅速进步为解决实际最优化问题的软件也在飞速发展。
其中,MATLAB软件已经成为最优化领域应用最广的软件之一。
有了MATLAB 这个强大的计算平台,既可以利用MATLAB优化工具箱(OptimizationToolbox)中的函数,又可以通过算法变成实现相应的最优化计算。
在最优化计算中一维最优化方法是优化设计中最简单、最基本的方法。
一维搜索,又称为线性搜索,一维问题是多维问题的基础,在数值方法迭代计算过程中,都要进行一维搜索,也可以把多维问题化为一些一维问题来处理。
一维问题的算法好坏,直接影响到最优化问题的求解速度。
而黄金分割法是一维搜索方法中重要的方法之一,它适用于任何单峰函数求最小值的问题,甚至于对函数可以不要求连续,是一种基于区间收缩的极小点搜索算法。
关键词:最优化、黄金分割法、MATLAB、算法、一维搜索AbstractOptimization theory and methods and more attention,have penetrated into the production,management,business,military,decision-making and other fields,andoptimization models and methods widely used in industry,agriculture,transportation, commerce,defense,construction,students,government various departments and agencies and other fields.With the rapid development of computer technology, optimization theory and methods for the rapid progress of the optimization problem to solve practical software is also developing rapidly.Which,MATLAB software has become the most optimization software is one of the most widely used.With this powerful computing platform MATLAB,either using MATLAB optimization toolbox (OptimizationToolbox)in the function,but also can achieve the appropriate algorithm to optimize into the calculation.In the calculation of one-dimensional optimization optimization method is to optimize the design of the simplest,most basic method.One-dimensional search,also known as linear search,one-dimensional problem is multi-dimensional problem based on iterative methods in numerical calculation,should be one-dimensional search,can also multi-dimensional problem into a number of one-dimensional problem to deal with.One-dimensional algorithms are directly affected by the speed of solving optimization problems.The golden section method is a one-dimensional search method is one important method,which applies to any single peak function for the minimum of the problem,even on the function does not require a continuous, interval-based contraction is a very small point search algorithm.Key words:Optimization、Golden section method、MATLAB、Algorithm、One-dimensional search目录摘要 (2)第一章引言 (5)第二章最优化方法原理 (6)2.1无约束问题的最优性条件 (6)第三章黄金分割法的基本思想与原理 (7)3.1黄金分割法基本思路: (7)3.2黄金分割法的基本原理与步骤 (7)3.30.618法算法 (8)3.4算法流程图 (8)3.5用matlab编写源程序 (9)第四章黄金分割法应用举例 (10)4.1例1 (10)4.2例2 (11)第五章总结 (12)5.1概括总结 (12)5.2具体分工 (12)5.3个人感言 (12)参考文献 (15)第一章引言数学科学不仅是自然科学的基础,也是一切重要技术发展的基础。
凸优化之⽆约束优化(⼀维搜索⽅法:黄⾦分割法、斐波那契数列法)⽬标函数为⼀元单值函数f:R->R的最⼩化优化问题,⼀般不会单独遇到,它通常作为多维优化问题中的⼀个部分出现,例如梯度下降法中每次最优迭代步长的估计。
⼀维搜索⽅法是通过迭代⽅式求解的,这不同于我们⼈脑的直接通过解表达式求解⽅法。
迭代算法是从初始搜索点x(0)出发,产⽣⼀个迭代序列x(1),x(2),...。
在第k=0,1,2,...次迭代中,通过当前迭代点x(k)和⽬标函数 f 构建下⼀个迭代点x(k+1)。
某些算法可能只需要⽤到迭代点处的⽬标函数值,⽽另⼀些算法还可能⽤到⽬标函数的导数 f'(x),甚⾄是⼆阶导数 f''(x)。
1、问题描述:如果⼀元单值函数 f:R->R 在闭区间[a0,b0]上是单峰的,求解 f 在该区间上的极⼩点。
2、计算机求解⽅法:以下⽅法的本质是:区间压缩(截取)法,通过不断缩⼩极⼩点所在的区间长度到⾜够的精度⽔平来逼近极⼩点。
(1)黄⾦分割法(每次区间截取⽐例为固定值)第⼀步:初始区间[a0,b0],设定截取⽐例为 r,则第⼀次挑选两个中间点 a1和 b1,它们满⾜对称要求:a1-a0=b0-b1= r(b0-a0),显然r<1/2,如果 f(a1) < f(b1),那么极⼩点应该在区间 [a0,b1] 中; 否则,如 f(a1) >= f(b1),极⼩点应该位于区间 [a1,b0] 中。
第⼆步:经过第⼀次压缩后,极⼩点所在区间变为[a0,b1],或者[a1,b0]。
假定为[a0,b1],下⾯需要第⼆次挑选中间点 a2和 b2 。
为了充分利⽤第⼀次的挑选点信息,减少计算次数,那么第⼆次挑选的点 b2可以取第⼀次的挑选点 a1,这样就只需要计算b2(即a1)在新区间上的对称点 a2 和 f(a2) 。
为了实现这样的想法,那么必须满⾜下⾯的要求: r(b1-a0)= b1 - b2=b1-a1 <=> r[b0-r(b0-a0)-a0]=(1-2r)(b0-a0)<=>r2-3r+1=0<=>1-r=(sqrt(5)-1)/2 = 0.618,即每次截取后保留⽐例为0.618 故称此⽅法为黄⾦分割法。
第02章优化计算方法2.1黄金分割法黄金分割法也称0.618法,是通过对黄金分割点函数值的计算和比较,将初始区间逐次进行缩小,直到满足给定的精度要求,即求得一维极小点的近似解。
一、方法概述(一)区间缩小的基本思路已知的单峰区间。
为了缩小区间,在内按一定规则对称地取2个内部点和,并计算和。
可能有三种情况:图(a)经过一次函数比较,区间缩小一次。
在新的区间内,保留一个好点和,下一次只需再按一定规则,在新区间内找另一个与对称的点,计算,与比较。
如此反复。
图(b)淘汰,另,得新区间。
图(c)可归纳入上面任一种情况处理。
(二)取点规则黄金分割法的关键是如何不断找出区间内的2个对称点,保证极小点不会丢掉,且收敛快。
设初始区间长度为l,第一次区间缩短率为,则缩短后的区间长度为。
第二次区间缩短时,在区间中取点,经比较后又得新区间。
由对称性可知,区间的长度为,则本次区间缩短率为令这两次缩短率相等,即,得方程解方程,得合理的根为由此可知,黄金分割法的均匀缩短率为0.618,即每经过一次函数值比较,都是淘汰本次区间的0.382倍。
根据上式,黄金分割法的取点规则是为了使最终区间收敛到给定收敛精度内,区间的缩短次数N必须满足:即二、收敛准则由于实际问题的需要和函数形态的不同,常常需要不同的收敛准则确定最优点。
对于直接法,有以下几种收敛准则:(1)区间绝对精度;(2)区间相对精度;(3)函数值绝对精度;(4)函数值相对精度三、方法特点(一)黄金分割法特点(1)不必要求可微,只要利用函数值大小的比较,即可很快地找到;(2)除了第一次缩小区间要计算两个点及其函数值以外,其余每次只要计算一个点及其函数值;(3)可靠性好。
(二)应用举例实际一个圆柱螺旋压缩弹簧,不考虑共振,要求重量W最轻。
解:建模前,先列出弹簧的有关设计计算公式:式中-------弹簧的设计载荷;-------弹簧的总变形量;-------弹簧指数;K-------曲度系数;n-------工作有效圈数;n2-------不起作用圈数(总圈数与工作有效圈数之差);-------材料密度。
机械优化设计课程论文院系机械工程系专业机械设计班级一班姓名学号一、优化题目应用所学计算机语言编写一维搜索的优化计算程序,完成计算结果和输出。
二、建立优化数学模型1、目标函数方程式:y=pow(x,4)-1*pow(x,3)-3*pow(x,2)-16*x+102、变量:x3、初始值:初始值x1=5 初始步长tt=0.01三、所选用的优化方法1、采用外推法确定搜索区间2、采用黄金分割法求函数最优3、计算框图:(1)、外推法程序框图(2)、黄金分割法程序框图四、计算输出内容:五、优化的源程序文件:#include<math.h>#include<stdio.h>#define e 0.0001#define tt 0.01float f (double x){float y=pow(x,4)-1*pow(x,3)-3*pow(x,2)-16*x+10;return(y);}void finding(float*p1,float*p2){float x1=10,x2,x3,t,f1,f2,f3,h=tt;int n=0;x2=x1+h;f1=f(x1);f2=f(x2);if(f2>f1){h=-h;x3=x1;f3=f1;x1=x2;f1=f2;}x3=x2+h;f3=f(x3);n=n+1;printf("n=%d,c1=%6.4lf,x2=%6.4lf,x3=%6.4lf,f1=%6.4lf,f2=^6.4lf,f3=%6.4lf\n",n, x1,x2,x3,f1,f2,f3);while(f3<f2){h=2*h;x1=x2;f1=f2;x2=x3;f2=f3;x3=x2+h;f3=f(x3);n=n+1;printf("n=%d,x1=%6.4lf,x2=%6.4lf,x3=%6.4lf,f1=%6.4lf,f2=6.4%lf,f3=%6.4lf\n",n ,x1,x2,x3,f1,f2,f3);}if(h<0){t=x1;x1=x3;x3=t;}*p1=x1;*p2=x3;}main(){float a,b,x1,x2,f1,f2,xmin,ymin,c;int n=0;finding(&a,&b) ;printf("the are is %6.4lf to %6.4lf\n",a,b);x1=b-0.618*(b-a);x2=a+0.618*(b-a);f1=f(x1);f2=f(x2);do{if(f1>f2){a=x1;x1=x2;f1=f2;x2=a+0.618*(b-a);f2=f(x2);}else{b=x2;x2=x1;f2=f1;x1=b-0.618*(b-a);f1=f(x1);}n=n+1;printf("n=%d,a=%6.4lf,b=%6.4lf,x1=%6.4lf,x2=%6.4lf,f1=%6.4lf,f2=%6.4lf\n",n,a ,b,x1,x2,f1,f2);c=fabs(b-a);}while(c>e);xmin=(x1+x2)/2;ymin=f(xmin);printf("The min is %6.4lf and the result is %6.4lf",xmin,ymin);}六、结果分析:通过利用外推法和黄金分割法求解函数的最优解的一维优化问题。
一维搜索——黄金分割法在迭代算法中,需要进行一维搜索。
它的快慢、好坏,直接影响最优化问题的求解速度。
迭代算法的基本公式,可写成()()kkX X S α=+其涵义是从()k X 点出发,沿()k S 方向,寻求最小值点。
当()kαα=时,则找到了最小值点()1k X +,所以X 点的函数值可表示为:()()()()()kk F X F X S αϕα=+=可以看出,当()k X 、()kS 一定,()F X 只是α的函数,这就是一维搜索。
其意义是寻求一最优的α,使函数值最小。
在实际计算中,最常用的一维搜索试探方法是黄金分割法,黄金分割法的计算次数较少。
黄金分割法也称做0.618法。
是在给定的14~αα 区间内,搜索最优步长*α的值。
如图1所示:图1 黄金分割法区间分割 如果14~αα 区间很小,则可令()*1412ααα=+ 如何使14~αα区间缩小,首先在区间内插入两个分割点1α ,2α ,且满足1234αααα<<<,这样就可以根据分割点的函数值,决定割舍区间。
可以证明,对于单峰函数,设*α已在14~αα区间内,且不管*α在哪一点上,只要经过()2ϕα 和()3ϕα函数值比较,将函数值大的邻近部份去掉,*α仍将保留在剩余段的区间内,如图2所示。
图2 缩小分割区间图中阴影部分即为根据函数比较而去掉的部分。
可以看出*α在任何情况下,都将保留在剩余段中。
用这种办法缩小区间,每一步都建立两个分割点,进行两次函数值计算。
如把分割点按对称原则建立,就能利用前次保留的一个分割点,就可使计算工作量减少一半,使计算速度提高一倍。
按这一思路形成的算法,就是黄金分割法。
具体做法如图3所示。
图3确定缩短率第一次区间是14~αα,假定()()32ϕαϕα>,根据缩小规则,去掉34~αα段。
此时区间缩短率λ为:V lλ=式中V 、l 分别对应区段的长度。
第二次区间是14~αα',假定()()32ϕαϕα''>,去掉34~αα''段。
机械优化设计课程论文
院系机械工程系
专业机械设计
班级一班
姓名
学号
一、优化题目
应用所学计算机语言编写一维搜索的优化计算程序,完成计算结果和输出。
二、建立优化数学模型
1、目标函数方程式:
y=pow(x,4)-1*pow(x,3)-3*pow(x,2)-16*x+10
2、变量:x
3、初始值:
初始值x1=5初始步长tt=0.01
三、所选用的优化方法
1、采用外推法确定搜索区间
2、采用黄金分割法求函数最优
3、计算框图:
(1)、外推法程序框图
(2)、黄金分割法程序框图
四、计算输出内容:
五、优化的源程序文件:
#include<math.h>
#include<stdio.h>
#define e0.0001
#define tt0.01
float f(double x)
{
float y=pow(x,4)-1*pow(x,3)-3*pow(x,2)-16*x+10;
return(y);
}
void finding(float*p1,float*p2)
{
float x1=10,x2,x3,t,f1,f2,f3,h=tt;
int n=0;
x2=x1+h;f1=f(x1);f2=f(x2);
if(f2>f1)
{
h=-h;x3=x1;f3=f1;
x1=x2;f1=f2;
}
x3=x2+h;f3=f(x3);
n=n+1;
printf("n=%d,c1=%6.4lf,x2=%6.4lf,x3=%6.4lf,f1=%6.4lf,f2=^6.4lf,f3=%6.4lf\n",n, x1,x2,x3,f1,f2,f3);
while(f3<f2)
{
h=2*h;
x1=x2;f1=f2;
x2=x3;f2=f3;
x3=x2+h;f3=f(x3);
n=n+1;
printf("n=%d,x1=%6.4lf,x2=%6.4lf,x3=%6.4lf,f1=%6.4lf,f2=6.4%lf,f3=%6.4lf\n",n,x 1,x2,x3,f1,f2,f3);
}
if(h<0)
{
t=x1;x1=x3;x3=t;
}
*p1=x1;*p2=x3;
}
main()
{
float a,b,x1,x2,f1,f2,xmin,ymin,c;
int n=0;
finding(&a,&b);
printf("the are is%6.4lf to%6.4lf\n",a,b);
x1=b-0.618*(b-a);x2=a+0.618*(b-a);f1=f(x1);f2=f(x2);
do
{
if(f1>f2)
{a=x1;x1=x2;f1=f2;x2=a+0.618*(b-a);f2=f(x2);}
else
{b=x2;x2=x1;f2=f1;x1=b-0.618*(b-a);f1=f(x1);}
n=n+1;
printf("n=%d,a=%6.4lf,b=%6.4lf,x1=%6.4lf,x2=%6.4lf,f1=%6.4lf,f2=%6.4lf\n",n,a,b ,x1,x2,f1,f2);
c=fabs(b-a);
}
while(c>e);
xmin=(x1+x2)/2;
ymin=f(xmin);
printf("The min is%6.4lf and the result is%6.4lf",xmin,ymin);
}
六、结果分析:
通过利用外推法和黄金分割法求解函数的最优解的一维优化问题。
通过反复对程序的调试以得到所需要的结果,使我对这两个方法的原理有了更深刻的理解。