优化设计黄金分割发以及迭代法
优化设计-黄金分割法+插值法
抛物线插值法
1.8.4.2 抛物线插值法迭代步骤
• 下面具体介绍缩短区间,构成新三点的方法. 由式(4.10)得到的点 t ,在区间[t1 , t 2 ] 内既可能在 点t 0的左侧(即t t 0 ),又可能在t 0 的右侧(即 t t 0 ). • 分别对应这两种情形比较 (t )和 (t 0 ) 的大小,又 有 ( t ) (t0 ), ( t ) (t0 ), ( t ) (t0 ) 等三种情形,故共 有如下六种情况(如图所示):
t1 t t 2
min (t )
抛物线插值法
通过目标函数曲线上的三个点 (t1 , (t1 )), (t 0 , (t 0 )), (t 2 , (t 2 ))
作它的二次拟合曲线(如图所示) P(t ) a0 a1t a2 t 2 .
图4.14
抛物线插值法
由于上述三个点既是目标函数曲线 (t )上的点,又是 二次拟合曲线 P(t ) 上的点,故有方程组
将方程组(4.5)中的 a 0消去,得
2 2 a ( t t ) a ( t t 1 1 0 2 1 0 ) (t1 ) (t0 ), 2 2 a ( t t ) a ( t t 2 0 2 ) (t0 ) (t2 ). 1 0 2
抛物线插值法
将式(4.7)与式(4.8)代入式(4.9)得
2 2 2 2 t2 t12 ) (t0 ) (t12 t0 ) (t1 ) (t2 ) (t2 ) a1 1 (t0 . t 2a2 2 (t0 t2 ) (t1 ) (t2 t1 ) (t0 ) (t1 t0 ) (t2 )
即要求
黄金分割法
机电产品优化设计课程设计姓名:学号:2908003032学院:机械电子工程学院一维搜索黄金分割法一、优化方法阐述1.原理阐述1.1基本原理设一元函数如图1所示,起始搜索区间为[a,b],为所要寻求的函数的极小点。
在搜索区间[a,b]内任取两点与,且,计算函数与。
当将与进行比较时,可能的情况有下列三种:(1):如图1(a)、(b)所示,这种情况下,可丢掉(,b]部分,而最小点必在区间[a,]内。
(2):如图1(c)、(d)所示,这种情况下,可丢掉[a,)部分,而最小点必在区间[,b]内。
(3):如图1(e)所示,这种情况下,不论丢掉[a,)还是丢掉(,b],最小点必在留下的部分内。
图1(a)图1(b)图1(c)图1(d)图1(e)因此,只要在搜索区间内任取两点,计算它们的函数值并加以比较之后,总可以把搜索的区间缩小。
对于第(1)、(2)两种情况,经过缩小的区间内都保存了一个点的函数值,即或,只要再取一个点,计算函数值并加以比较,就可以再次缩短区间进行序列消去。
但对于第(3)种情况,区间中没有已知点的函数值,若再次缩短区间必须计算两个点的函数值。
为了简化迭代程序,可以把第(3)种情况合并到前面(1)、(2)两种情况之一中去,例如可以把上述三种情况合并为下述两种情况:(1)若,取区间[a,]。
(2)若,取区间[,b]。
这样做虽然对于第(3)种情况所取的区间扩大了,但在进一步搜索时每次只要计算一个点,和第(1)、(2)种情况一致,简化了迭代程序。
1.2 “0.618”的由来为了简化迭代计算的过程,希望在每一次缩短搜索区间迭代过程中两计算点、在区间中的位置相对于边界来说应是对称的,而且还要求丢去一段后保留点在新区间中的位置与丢去点在原区间中的位置相当。
如图2所示,设区间[a,b]全长为L,在其内取两个对称计算点和,并令l/L=称为公比,无论如图2(b)所示丢去(,b],还是如图2(c)所示丢去[a,),保留点在新区间中相应线段比值仍为,(1)由此得解此方程的两个根,取其正根为0.6180339887这种分割称为黄金分割,其比例系数为,只要第一个试点取在原始区间长的0.618处,第二个试点在它的对称位置,就能保证无论经过多少次缩小区间,保留的点始终处在新区间的0.618处。
优化方法
一、无约束最优化问题Ⅰ 1、 一维搜索0.618法(黄金分割法)、二次插值法、牛顿法 2、 方向加速法或鲍威尔(Powell )方法该法是一边做一系列的一维最优化,一边调整一维最优化的方向,使之尽快地达到最优解的方法。
基本原理:每一轮迭代产生一个共轭方向,其共轭方向由每轮迭代中的末首两点之差产生。
3、 单纯形法单纯形法是对n 维空间的n+1个点(它们构成一个单纯形的顶点)上的函数值进行比较,去掉其中最坏的点,代之以新的顶点,新的点与前面余下的点又构成一个新的单纯形。
每次把坏的点去掉,把好的留下来,这样逐渐调向最优点。
在此以正规单纯形(即正多面体)为例。
通常选正规单纯形作为初始单纯形,其方法如下:()n a a a X ,...,,210=其余n 个点分别取为()q a q a p a X n +++=,...,,211 ()q a p a q a X n +++=,...,,212…………………………………()p a q a q a X n n +++=,...,,21其中a 为单纯形边长, ()112-++=n n n a p()112-+=n na q4、 复形法复形法实质上是对单纯形法的修正,以便适用于更一般形式的问题,如:()X f X min Ω∈其中(){}n j x x x m i X g X u j j l j i ...,2,1,;...,2,1,0|=≤≤=≥=Ω ()n x x x X ,...,,21=也就是属于约束优化问题。
复形法的基本思路如下:复形法需要用2+≥n l 个顶点,每一个顶点都要满足所有的约束条件,这些顶点可以从满足所有m 个约束条件的点出发,其他1-l 个点可以随机的产生,经过不断调优(既使目标函数减少,又要新点满足约束条件)逐步逼近最优点。
由于这个方法不必保证正规图形,较之单纯形法更为灵活易变。
5、 随机射线法(1)通常所谓的随机射线法就是在整个设计变量空间中,每一个设计被选取的可能性是相同的。
黄金分割法机械优化设计
黄金分割法机械优化设计机械优化设计黄金分割法班级:学硕一班学号:_姓名:______黄金分割法黄金分割法也成为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,并计算其函数值。
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 | 都大于收敛精度£重新开始。
最优化课程设计--黄金分割法及其算法实现(3
最优化课程设计--黄⾦分割法及其算法实现(3机械优化设计报告姓名:刘洋学号:S12080203054院系:机械⼯程学院专业:机械设计及理论2012年 12⽉ 4⽇摘要最优化理论和⽅法⽇益受到重视,已经渗透到⽣产、管理、商业、军事、决策等各个领域,⽽最优化模型与⽅法⼴泛应⽤于⼯业、农业、交通运输、商业、国防、建筑、同学、政府机关等各个部门及各个领域。
伴随着计算机技术的⾼速发展,最优化理论与⽅法的迅速进步为解决实际最优化问题的软件也在飞速发展。
其中,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, and optimization 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.Key words: Optimization、Golden section method、steepest descent method、MATLAB、algorithm⽬录摘要 (2)第⼀章绪论 (5)第⼆章黄⾦分割法的基本思想与原理 (6)2.1 黄⾦分割法的基本思路 (6)2.2 算法流程图 (7)2.3 ⽤matlab编写源程序 (7)2.4 黄⾦分割法应⽤举例 (8)第三章最速下降法的基本思想与原理 (9)3.1 最速下降法的基本思路 (9)3.2 算法流程图 (11)3.3 ⽤matlab编写源程序 (11)3.4 最速下降法应⽤举例 (13)第四章惩罚函数法的基本思想与原理 (13)4.1 惩罚函数法的基本思路 (13)4.2 算法流程图 (14)4.3 ⽤matlab编写源程序 (14)4.4 最速下降法应⽤举例 (16)第五章总结 (17)参考⽂献 (18)第1章绪论在⼈类活动中,要办好⼀件事(指规划、设计等),都期望得到最满意、最好的结果或效果。
机械优化设计-黄金分割法
总结:
• 一维搜索第一步:找初始单谷区间; 1.进退法
第二步:使区间缩小。 2.黄金分割法
二、一维搜索方法分类
根据插入点位置的确定方法,可以把一维搜索法 分成两大类: ⑴试探法:即按照某种规律来确定区间内插入点 的位置,如黄金分割法,斐波那契法等。
斐波那契数列:1、1、2、3、5、8、13、21 、34、55、89、144...... ⑵插值法(函数逼近法):通过构造插值函数来 逼近原函数,用插值函数的极小点作为区间的插 入点,如二次插值法,三次插值法等。
y1=subs(f,a1); y2=subs(f,a2); if y1>y2 a=a1; a1=a2; y1=y2; a2=a+0.618*(b-a); disp(['判定: f1>=f2']); else b=a2; a2=a1; y2=y1; a1=a+0.382*(b-a); disp(['判定: f1<f2']); end
b=input('输入初始单谷区间右端点='); e=input('搜索精度(数值越小所求极小值精度越高) e='); k=0; format long; a1=a+0.382*(b-a); a2=a+0.618*(b-a); fprintf('第0次缩短区间\n'); fprintf('a1='); disp(a1); fprintf('a2='); disp(a2); while b-a>e
k=k+1; disp(['第',num2str(k),'次缩短区间']); fprintf('a1='); disp(a1); fprintf('a2='); disp(a2); end format long; xmin=(a+b)/2; fmin=subs(f,xmin); fprintf('迭代次数k='); disp(k); disp('极小值为'); disp('fmin ='); disp(fmin); fprintf('极小点为'); t=a:e/100:b; T=subs(f,t); plot(t,T);
优化设计方法
3、目标函数
在所有的可行设计中,有些设计比另一些要“好些”,如果确实是这样,则
“较好”的设计比“较差”的设计必定具备某些更好的性质。倘若这种性质可以
表示成设计变量的一个可计算函数,则我们就可以考虑优化这个函数,以得到
xk1 xk kd k (k 0,1,2, )
f ( xk 1) min f ( xk kd k )
d0 x0
d2
x3
x2
d1
x1
xk
x k+1
dk
1、确定搜索区间的外推法
在一维搜索时,我们假设函数 f () 具有如图所示的单谷性。即在所考虑的区 间内部,函数 f () 有唯一的极小点。
=0.618,按照这样的取点原则,为了使最终区间收缩到预定的迭代精度ε以内,区间缩短
的次数N必须满足:
0.618N (b a)
N ln /(b a)
ln 0.618
2)黄金分割法的迭代步骤
(1)给出初始搜索区间[a,b]及收敛精度ε ,将赋以0.618。
(2)按式(2-21)计算 1、2 ,并计算其对应的函数值 f (1)、f (2) 。 (3)根据区间消去法原理缩短搜索区间。 (4)检查区间是否缩短到足够小和函数值收敛到足够近,如果条件不满足则返回 到步骤(2)。 (5)如果条件满足,则取最后两试验点的平均值作为极小点的数值近似解。
具有极大的审美价值和实用价值,故又被称为黄金分割。在自然界和我们的日常生活 中,这个美的数字例子随处可见。
当气温为23°C度时,你的身心会感到最舒服,这时的气温与体温(37°C度)之 比为0.618。
优化设计理论-黄金分割法
xx = 43.8197 43.8197 43.8197 44.7214 44.7214 44.7214 44.9342 44.9342 44.9342 44.9845 44.9845 44.9845 44.9963 44.9963 44.9963 min_x = min =
50.0000 47.6393 46.1803 46.1803 45.6231 45.2786 45.2786 45.1471 45.0658 45.0658 45.0347 45.0155 45.0155 45.0082 45.0037 45.0059 -0.5000
-0.491 -0.492 -0.493 -0.494 -0.495 -0.496 -0.497 -0.498 -0.499 -0.5 40
41
Hale Waihona Puke 42434445
46
47
48
49
50
The second method :Golden Section Search:
clc,clear all ;format compact f=inline('-sin(x/360*2*pi).*cos(x/360*2*pi)','x') xx=[]; r=(sqrt(5)-1)/2; b=50;a=40; h = b-a; n=10; %构造一个空矩阵,方便输出 %r 为黄金分割点值 %n=10,10 次迭代 %区间宽度 第二次取:n=15
优化设计理论黄金分割法黄金分割率理论黄金分割理论黄金分割教案设计黄金分割黄金分割比例黄金分割点黄金分割线黄金分割比最优化理论与算法
机自 1101 班-20110401109-代洪庆 方法一:直接求解目标函数的最小值; 精度: =
优化设计第2章 优化设计
X [d l ]T [ x1 x2 ]T
目标函数的极小化: 约束条件:
1 1 min f ( X ) V d 2l x12 x2 0.785 x12 x2 4 4
g1 ( X ) 8.33l d 3 8.33x2 x13 0 g 2 ( X ) 6.25 d 3 6.25 x13 0
f ( X ( k 1) ) f ( X ( k ) ) 2
(2-8)
3 5 式中, 2 —— 给定的计算精度,一般可取 10 10 。
(3)函数梯度充分小准则 目标函数在迭代点的梯度已达到充分小,即
f ( X ( k 1) ) 3
(2-9)
3 —— 给定的计算精度,一般可取 103 。 式中,
这一迭代过程用数学式子表达,得数值迭代法的基本迭代格式为:
X ( k 1) X ( k ) ( K ) S ( k ) f ( X ( k 1) ) f ( X ( k ) ) gu ( X ( k 1) ) 0 (u 1, 2, , m) (k 0,1, 2, )
(k )
一维搜索方法一般分两步进行:
■ 首先在方向 S ( k ) 上确定一个包含函数极小点的初始区间,即
确定函数的搜索区间,该区间必须是单峰区间;
■ 然后采用缩小区间或插值逼近的方法得到最优步长,即求出
该搜索区间内的最优步长和一维极小点。 一维搜索方法主要有: 分数法 黄金分割法(0.618法) 二次插值 三次插值法等 本节介绍最常用的黄金分割法和二次插值法。
2.迭代计算的终止准则
目前,通常采用的迭代终止准则有以下几种:
● 点距足够小准则 ● 函数下降量足够小准则 ● 函数梯度充分小准则
优化设计
优化设计:就是在规定的设计限制条件下,运用最优化原理和方法将实际工程设计问题转化为最优化问题,然后以计算机为工具进行寻优计算,在全部可行设计方案中,寻求满足预定设计目标的最佳设计方案。
优化设计的方法:首先必须将实际问题加以数学描述,形成一组由数学表达式组成的数学模型;然后选择一种最优化数值计算方法和计算机程序,在计算机上进行寻优运算求解,得到一组最佳的设计参数。
这组设计参数就是设计的最优解。
优化设计的步骤:(1)设计课题分析(2)建立数学模型(3)选择优化设计方法(4)上机计算求优解上述优化设计过程的四步其核心是进行如下两项工作:一是分析设计任务,将实际问题转化为一个最优化问题,即建立优化问题的数学模型;二是选用适用的优化方法在计算机上求解数学模型,寻求最优设计方案。
数学模型三要素:设计变量(独立):目标函数的极小化minf(x):约束条件:g(x)<0等值线有以下几个特点:(1) 不同值的等值线不相交;(2) 除极值点外,在设计空间内,等值线不会中断;(3) 等值线充满整个设计空间;(4) 等值线分布的疏或密,反应出函数值变化的慢或快;(5) 一般来说,在极值点附近,等值线近似是同心椭圆族,极值点就是椭圆的中心点。
在设计空间内,目标函数值相等点的连线:►对于二维问题,构成了等值线;►对于三维问题,构成了等值面;►对于四维以上的问题,则构成了等值超曲面。
约束条件约束条件是设计变量选取的限制条件,或称设计约束。
按照约束条件的形式不同,约束有不等式和等式约束两类,一般表达式为:约束的几何意义是它将设计空间一分为二,形成了可行域和非可行域。
不满足约束条件的设计点构成该优化问题的不可行域。
可行域也可看做满足所有约束条件的设计点的集合,因此,可用集合表示如下:对于优化问题数学模型的求解,目前可采用的求解方法有三种:数学解析法用数学解析法(如微分、变分法等)来求出最优解数学解析法是优化设计的理论基础。
机械优化设计黄金分割法 外推法
郑州大学机械优化设计部分程序1、外推法2、黄金分割法3、二次插值法4、坐标轮换法5、随机方向法6、四杆机构优化设计1、外推法源程序:#include<stdio、h>#include<math、h>#define R 0、01double fun(double x){ double m;m=x*x-10*x+36;return m;}void main(){double h0=R,y1,y2,y3,x1,x2,x3,h; x1=0;h=h0;x2=h;y1=fun(x1);y2=fun(x2);if(y2>y1){h=-h;x3=x1;y3=y1;x1=x2;y1=y2;x2=x3;y2=y3;}x3=x2+h;y3=fun(x3); while(y3<y2){h*=2、0;x1=x2;y1=y2;x2=x3;y2=y3;x3=x2+h;y3=fun(x3);}printf("fun(%f)=%f,fun(%f)=%f,fun(%f)= %f\n",x1,y1,x2,y2,x3,y3);}运行过程及结果:fun(2、560000)=16、953600,fun(5、120000)=11、014400,fun(10、240000)=38、4576002、黄金分割法源程序:#include<stdio、h>#include<math、h>#define f(x) x*x*x*x-5*x*x*x+4*x*x-6*x+60double hj(double *a,double *b,double e,int *n) {double x1,x2,s;if(fabs((*b-*a)/(*b))<=e)s=f((*b+*a)/2);else{x1=*b-0、618*(*b-*a);x2=*a+0、618*(*b-*a);if(f(x1)>f(x2))*a=x1;else*b=x2;*n=*n+1;s=hj(a,b,e,n);}return s;}void main(){double s,a,b,e,m;int n=0;printf("输入a,b值与精度e值\n");scanf("%lf %lf %lf",&a,&b,&e);s=hj(&a,&b,e,&n);m=(a+b)/2;printf("a=%lf,b=%lf,s=%lf,m=%lf,n=%d\n",a,b ,s,m,n);}运行过程及结果:输入a,b值与精度e值-350、0001a=3、279466,b=3、279793,s=22、659008,m=3、279629,n=213、二次插值法源程序:#include<stdio、h>#include<math、h> int main(void){double a1,a2,a3,ap,y1,y2,y3,yp,c1,c2,m; double j[3];int i,h=1;void finding(double a[3]);finding(j);a1=j[0];a2=j[1];a3=j[2];m=0、001;double f(double x);y1=f(a1);y2=f(a2);y3=f(a3);for(i=1;1>=1;i++){c1=(y3-y1)/(a3-a1);c2=((y2-y1)/(a2-a1)-c1)/(a2-a3);ap=0、5*(a1+a3-c1/c2);yp=f(ap);if(fabs((y2-yp)/y2)<m)break;else if((ap-a2)*h>0){if(y2>=yp){a1=a2;y1=y2;a2=ap;y2=yp;}else{a3=ap;y3=yp;}}else if(y2>=yp){a3=a2;y3=y2;a2=ap;y2=yp;}else{a1=ap;y1=yp;}}double x,y;if(y2<=yp){x=a2;y=y2;}else{x=ap;y=yp;}printf("a*=%f\n",x);printf("y*=%f\n",y);return 0;}double f(double x){double y;y=x*x-10*x+36;return y;}void finding(double a[3]){int h,i;double y[3];a[0]=0;h=1;a[1]=h;y[0]=f(a[0]);y[1]=f(a[1]);if(y[1]>y[0]){h=-h;a[2]=a[0];y[2]=y[0];do{a[0]=a[1];a[1]=a[2];y[0]=y[1];y[1]=y[2];a[2]=a[1]+h;y[2]=f(a[2]);h=2*h;}while(y[2]<y[1]);}else{for(i=1;i>=1;i++){a[2]=a[1]+h;y[2]=f(a[2]);if(y[2]>=y[1])break;h=2*h;a[0]=a[1];y[0]=y[1];a[1]=a[2];y[1]=y[2];}}return;}运行过程及结果:a*=5、000000y*=11、0000004、坐标轮换法源程序:#include <stdio、h>#include <math、h>#include <conio、h>float fun1(float x,float a,float b) {float y;y=x+a*b;return y;}float fun2(float x,float y){float z;z=4*(x-5)*(x-5)+(y-6)*(y-6);return z;}main(){float d[100][3],x[100][3],xx[3],ax[100][3]; float a1,a2,a3,h,t,y1,y2,y3,e,a,b,l,fi;int i,k;printf("输入初始点坐标\n");scanf("%f%f",&x[0][1],&x[0][2]);e=0、000001;l=0、618;x[2][1]=x[0][1];x[2][2]=x[0][2];k=0;k--;do{x[0][1]=x[2][1];x[0][2]=x[2][2];k++;for(i=1;i<=2;i++){if(i==1){d[i][1]=1;d[i][2]=0;}else{d[i][1]=0;d[i][2]=1;}h=0、1;a1=0;a2=h;x[i][1]=fun1(x[i-1][1],d[i][1],a1);x[i][2]=fun1(x[i-1][2],d[i][2],a1);y1=fun2(x[i][1],x[i][2]);x[i][1]=fun1(x[i-1][1],d[i][1],a2);x[i][2]=fun1(x[i-1][2],d[i][2],a2);y2=fun2(x[i][1],x[i][2]);if(y2>y1){h=-h;a3=a1;y3=y1;a1=a2;a2=a3;y1=y2;y2=y3;}a3=a2+h;x[i][1]=fun1(x[i-1][1],d[i][1],a3);x[i][2]=fun1(x[i-1][2],d[i][2],a3);y3=fun2(x[i][1],x[i][2]);do{a1=a2;y1=y2;a2=a3;y2=y3;a3=a2+h;x[i][1]=fun1(x[i-1][1],d[i][1],a3);x[i][2]=fun1(x[i-1][2],d[i][2],a3);y3=fun2(x[i][1],x[i][2]);}while(y3<y2);for(;a1>a3;){t=a3;a3=a1;a1=t;t=y1;y3=y1;y1=t;}a=a1;b=a3;a1=b-l*(b-a);a2=a+l*(b-a);x[i][1]=fun1(x[i-1][1],d[i][1],a1);x[i][2]=fun1(x[i-1][2],d[i][2],a1);y1=fun2(x[i][1],x[i][2]);x[i][1]=fun1(x[i-1][1],d[i][1],a2);x[i][2]=fun1(x[i-1][2],d[i][2],a2);y2=fun2(x[i][1],x[i][2]);if(b<1e-3){for(;fabs(b-a)>e;){if(y1>=y2){a=a1;a1=a2;y1=y2;a2=a+l*(b-a);x[i][1]=fun1(x[i-1][1],d[i][1],a2);x[i][2]=fun1(x[i-1][2],d[i][2],a2);y2=fun2(x[i][1],x[i][2]);}else{b=a2;a2=a1;y2=y1;a1=b-l*(b-a);x[i][1]=fun1(x[i-1][1],d[i][1],a1);x[i][2]=fun1(x[i-1][2],d[i][2],a1);y1=fun2(x[i][1],x[i][2]);}}}else{for(;fabs((b-a)/b)>=e||fabs((y2-y1)/y2)>=e; ){if(y1>=y2){a=a1;a1=a2;y1=y2;a2=a+l*(b-a);x[i][1]=fun1(x[i-1][1],d[i][1],a2);x[i][2]=fun1(x[i-1][2],d[i][2],a2);y2=fun2(x[i][1],x[i][2]);}else{b=a2;a2=a1;y2=y1;a1=b-l*(b-a);x[i][1]=fun1(x[i-1][1],d[i][1],a1);x[i][2]=fun1(x[i-1][2],d[i][2],a1);y1=fun2(x[i][1],x[i][2]);}}}ax[k][i]=0、5*(a+b);x[i][1]=fun1(x[i-1][1],d[i][1],ax[k][i]);x[i][2]=fun1(x[i-1][2],d[i][2],ax[k][i]);}}while(sqrt(pow((x[2][1]-x[0][1]),2)+pow((x[2][2]-x[0][2]),2))>=1e-6);xx[1]=x[2][1];xx[2]=x[2][2];fi=fun2(xx[1],xx[2]);printf("最优解为\nx1*=%f\nx2*=%f\nf*=%f\nk=%d\n",xx[1],xx[2],fi,k);}运行过程及结果:输入初始点坐标89最优解为x1*=5、000000x2*=6、000000f*=0、000000k=25、随机方向法源程序:#include<math、h>#include<stdio、h>#include<stdlib、h>float f(float x,float y){float z;z=(x-2)*(x-2)+(y-1)*(y-1);return z;}float g1(float x,float y){float z;z=x*x-y;return z;}float g2(float x,float y){float z;z=x+y-2;return z; }void main(){int i,j;float k=8,c=0、000001,a0=-3,b0=3,a1=-3,b1=3;floatx[10],x0[10],xl[10],e[10],r[10],d[10],h,fl,f0,fx; while(g1(x0[0],x0[1])>0||g2(x0[0],x0[1])>0) {x0[0]=a0+(rand()/32767、00)*(b0-a0);x0[1]=a1+(rand()/32767、00)*(b1-a1);}fl=f(x0[0],x0[1]);f0=f(x0[0],x0[1]);while(1){h=0、01;j=1;r[0]=-1+(rand()/32767、00)*(1-(-1));r[1]=-1+(rand()/32767、00)*(1-(-1));e[0]=r[0]/sqrt(r[0]*r[0]+r[1]*r[1]);e[1]=r[1]/sqrt(r[0]*r[0]+r[1]*r[1]);x[0]=x0[0]+h*e[0];x[1]=x0[1]+h*e[1];if(g1(x[0],x[1])<=0&&g2(x[0],x[1])<=0){fx=f(x[0],x[1]);if(fx<fl){fl=fx;for(i=0;i<2;i++){d[i]=e[i];xl[i]=x[i];}}}while(j<=k){j++;r[0]=-1+(rand()/32767、00)*(1-(-1));r[1]=-1+(rand()/32767、00)*(1-(-1));e[0]=r[0]/sqrt(r[0]*r[0]+r[1]*r[1]);e[1]=r[1]/sqrt(r[0]*r[0]+r[1]*r[1]);x[0]=x0[0]+h*e[0];x[1]=x0[1]+h*e[1];if(g1(x[0],x[1])<=0&&g2(x[0],x[1])<=0){fx=f(x[0],x[1]);if(fx<fl){fl=fx;for(i=0;i<2;i++){d[i]=e[i];xl[i]=x[i];}}}}x[0]=xl[0];x[1]=xl[1];while(1){h=1、3*h;x[0]=x[0]+h*d[0];x[1]=x[1]+h*d[1];if(g1(x[0],x[1])>0||g2(x[0],x[1])>0)break;fx=f(x[0],x[1]);if(fx<fl) fl=fx;else break;}do{x[0]=x[0]-h*d[0];x[1]=x[1]-h*d[1];h=0、7*h;if(h<c)break;x[0]=x[0]+h*d[0];x[1]=x[1]+h*d[1];if(g1(x[0],x[1])>0||g2(x[0],x[1])>0)continue;fx=f(x[0],x[1]);}while(fx>=fl);if(fabs((f0-fx)/f0)>=c){x0[0]=x[0];x0[1]=x[1];fl=fx;f0=fx;}elsebreak;}printf("输出最优解为\nx1*=%f,x2*=%f,y*=%f\n",x[0],x[1],fx);}运行过程及结果:输出最优解为x1*=0、995421,x2*=1、004521,y*=1、009200 6、四杆机构优化设计源程序:#include<math、h>#include<stdio、h>#include<stdlib、h>#define Pai 3、1415926int g(float l1,float l2){if((-l1<=0)&&(-l2<=0)&&(6-l1-l2<=0)&&(1-l2-4<=0)&&(l2-l1-4<=0)&&(l1*l1+l2*l2-1、414*l1*l2-16<=0)&&(36-l1*l1-l2*l2-1、414*l1*l2<=0))return (1);elsereturn (0);}float fun(float x0[2]){floatf,a[31],b[31],r[31],p[31],q[31],w[31],x1[2];int i;p[0]=acos(((1+x0[0])*(1+x0[0])-x0[1]*x0[ 1]+25)/(10+10*x0[0]));q[0]=acos(((1+x0[0])*(1+x0[0])-x0[1]*x0[ 1]-25)/(10*x0[1]));f=0;for(i=1;i<=30;i++){p[i]=p[0]+(Pai/60)*i;r[i]=sqrt(26-10*cos(p[i]));a[i]=acos((r[i]*r[i]+x0[1]*x0[1]-x0[0]*x0[ 0])/(2*r[i]*x0[1]));b[i]=acos((r[i]*r[i]+24)/(10*r[i]));q[i]=Pai-a[i]-b[i];w[i]=q[0]+(2*(p[i]-p[0])*(p[i]-p[0]))/(3*P ai);f=f+(Pai/60)*(q[i]-w[i])*(q[i]-w[i])*(p[i]-p [i-1]);}return f;}void main(){floata,q,f,fl,f0,l[2],z[2],d0[100],d1[100],x[2],xi[2],f x,m0,m1,e;int i,j,n,k;printf("输入精度");scanf("%f",&e);do{z[0]=0+5*(rand()/32767、00);z[1]=0+5*(rand()/32767、00);}while(g(z[0],z[1])==0);for(i=0;i<=99;i++){d0[i]=-1+2*(rand()/32767、00);}for(j=0;j<=99;j++){d1[j]=-1+2*(rand()/32767、00);}f0=fun(z);fl=fun(z);ss:a=0、01;for(i=0,j=0;i<=99&&j<=99;i++,j++) {n=1/sqrt((d0[i])*(d0[i])+d1[j]*d1[j]);d0[i]=n*d0[i];d1[j]=n*d1[j];x[0]=z[0]+a*d0[i];x[1]=z[1]+a*d1[j];if(g(x[0],x[1])==1){f=fun(x);if(f<fl){fl=f;m0=d0[i];m1=d1[j];l[0]=x[0];l[1]=x[1];}}}x[0]=l[0];x[1]=l[1];do{a=1、3*a;x[0]=x[0]+a*m0;x[1]=x[1]+a*m1;if(g(z[0],z[1])==0)break;f=fun(x);if(f<fl)fl=f;else break;}while(g(z[0],z[1])==1);do{x[0]=x[0]-a*m0;x[1]=x[1]-a*m1;a=0、7*a;if(a<0、00001)break;x[0]=x[0]+a*m0;x[1]=x[1]+a*m1;if(g(z[0],z[1])==1)f=fun(x);}while(f>=fl);if(fabs((f0-f)/f0)<e){xi[0]=x[0];xi[1]=x[1];fx=f;printf("最优解为\nx1*=%f\nx2*=%f\n fx=%f\n",xi[0],xi[1],fx);}else{f0=f;fl=f;z[0]=x[0];z[1]=x[1];goto ss;}}运行过程及结果:输入精度0、001最优解为x1*=4、161386x2*=2、311257fx=0、000021。
凸优化之无约束优化(一维搜索方法:黄金分割法、斐波那契数列法)
凸优化之⽆约束优化(⼀维搜索⽅法:黄⾦分割法、斐波那契数列法)⽬标函数为⼀元单值函数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章 优化计算方法
第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-------不起作用圈数(总圈数与工作有效圈数之差);-------材料密度。
机械优化设计黄金分割法
机械优化设计黄金分割法已知:F(x)=x4-4x3-6x2-16x+4,求极小值,极小值点,区间,迭代次数, 用进退法确定区间,用黄金分割法求极值。
#include <stdio.h>#include <math.h>#define e 0.001#define tt 0.01float f(double x){float y=pow(x,4)-4*pow(x,3)-6*pow(x,2)-16*x+4;return(y);}finding(float *p1,float*p2) {float x1=0,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;t=x2;x2=x1;x1=t;} do { x3=x2+h;h=2*h;f3=f(x3);n=n+1;}while(f3<f2);if(x1>x3) {t=x1;x1=x3;x3=t;} *p1=x1;*p2=x3;return(n);}gold(float *p){float a,b,x1,x2,f1,f2; int n=0;finding(&a,&b);do{x1=a+0.382*(b-a);x2=a+0.618*(b-a);f1=f(x1);f2=f(x2);n=n+1;if(f1>f2) a=x1;else b=x2;}while((b-a)>e);*p=(x1+x2)/2;return(n); }main(){float a,b,x,min;int n1,n2; n1=finding(&a,&b);n2=gold(&x);min=f(x);printf("\n The area is %f to %f.",a,b); printf("\n The nunmber 1 is %d.",n1);printf("\n The min is %f and the result is %f.",x,min);printf("\n The nunmber 2 is %d.",n2)二插法已知:F(x1,x2)=4*x1-x2的平方-12;求极小值,极小值点,迭代次数,用复合形法求极值。
优化设计黄金分割发以及迭代法
机械优化设计课程论文院系机械工程系专业机械设计班级一班姓名学号一、优化题目应用所学计算机语言编写一维搜索的优化计算程序,完成计算结果和输出。
二、建立优化数学模型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.熟悉一维找寻的方法——黄金切割法,掌握其基根源理和迭代过程;2.利用计算语言(Matlab语言或C语言)编制优化迭代程序,并用给定实例进行迭代考据.实验设备:计算机、WindowsXP、Matlab软件或C语言(任选一种)实验内容:1.依照黄金切割算法的原理,画出程序计算流程框图;2.应用黄金切割算法,计算:函数F(x)=x2-10x+36,在找寻区间-10≤x≤10,ε时,求解其极小点minF(x).实验原理:黄金切割法适用于[a,b]区间上的任何单谷函数求极小值问题,对函数除要求“单谷”外不做其他要求,甚至可以不连续.因此,这种方法的适应面特别广.黄金切割法也是建立在区间消去法原理基础上的试试方法,即在找寻区间[a,b]内合适插入两点a1,a2,并计算其函数值.a1,a2将区间分成三段,应用函数的单谷性质,经过函数值大小的比较,删去其中一段,是找寻区间得以减小 .然后再在保留下来的区间上作同样的办理,这样迭代下去,是找寻区间无量减小,从而获取极小点的数值近似解 .调用格式—function[x,minf]=minHJ(f,a,b,eps)其中:f目标函数;a为初始缩短区间左端点;b为初始缩短区间右端点;eps 为精度;x为目标函数取最小值时的自变量;minf为目标函数的最小值.实验步骤:黄金切割法是用于一元函数f(x)在给定初始区间[a,b]内找寻极小点A的一种方法.它的优点是算法简单、收敛速度均匀、收效较好等,是好多算法的基础,它只适用于一维区间上的单谷图1原理图-1-/6函数,详尽步骤是:1、a1,a2把[a,b]分为三段;2、判断f(a1)与f(a2)的大小.若是F(a1)=r1>F(a2)=r2,令a=a1,a1=a2,a2=a+r*(b-a);F(a1)=r1<F(a2)=r2,令b=a2,a2=a1,a1=b-r*(b-a);3、查查收敛精度ε.若是(ba)/b和(y1y2)/y2大于ε,返回重新开始,反之则停止,输出结果.思虑题:1、试解析黄金切割法使用条件?附录:function[x,minf]=minHJ(f,a,b,eps)formatlong;ifnargin==3eps=1.0e-6;endl=a+0.382*(b-a);u=a+0.618*(b-a);k=1;tol=b-a;while tol>eps&&k<100000 fl=subs(f,findsym(f),l); fu=subs(f,findsym(f),u); iffl>fua=l;l=u;u=a+0.618*(b-a);elseb=u;u=l;l=a+0.382*(b-a);endk=k+1;tol=abs(b-a);endifk==100000disp('找不到最优点!'); x=NaN;minf=NaN;return;endx=(a+b)/2;minf=subs(f,findsym(f),x); formatshort;-2-/6一维找寻方法——二次插值法实验目的:1.熟悉一维找寻的方法——二次插值法,掌握其基根源理和迭代过程;2.利用计算语言(Matlab语言或C语言)编制优化迭代程序,并用给定实例进行迭代考据.实验设备:WindowsXP,Matlab软件或C语言(任选一种)实验内容:1.依照二次插值法的原理,画出计算框图;2.应用二次插值法算法,计算:函数F(x)=sin(x),在找寻区间4≤x≤5,ε时,求解其极小点minF(x).实验原理:二次插值法是多项式逼近法的一种.所谓多项式逼近,就是在目标函数f(x)的极小点所在的区间[a,b]上,利用若干点处的函数值构成一个低次插值多项式,以近似表达原目标函数,尔后用该多项式的最优解作为原目标函数最优解的一种近似值.其基本思想为:在给定的单峰区间[a,b]中,设定一点c,利用函数上的a、b、c三点来构造一个二元插值函数p(x),以近似表达原目标函数f(x),该插值函数的极小点a p就近似看作原目标函数的极小点.调用格式 function[x,minf]=minPWX(f,a,b,eps)其中:f目标函数;a为初始缩短区间左端点;b为初始缩短区间右端点;eps为精度;x为目标函数取最小值时的自变量;minf为目标函数的最小值.实验步骤:1、设定一个点c,在已知区间[a,b],并给定迭代计算精度ε;(c的采用有等距、非等距取法,即(a+b)/2,(2a+b)/3);2、计算三点函数的值f(a)、f(c)、f(b),并经过公式:C1=[f(b)-f(a)]/(b-a),C2={[f(c)-f(a)]/(c-a)-C1}/(c-b)求出C1、C2;3、由a p=1/2(a+b-C1/C2)计算二次插值多项式的极小点a p以及对应极小值f(a p);-3-/64、精度的检验,a p c ,若为真,输出结果并停止,反之重复步骤 1.思虑题:1、试解析黄金切割法和进退式算法的异同之处?附录:function[x,minf]=minPWX(f,a,b,eps) formatshort;formatlong;ifnargin==3eps=1.0e-6;endt0=(a+b)/2;k=0;tol=1;whiletol>epsfa=subs(f,findsym(f),a);fb=subs(f,findsym(f),b);ft0=subs(f,findsym(f),t0);tu=fa*(b^2-t0^2)+fb*(t0^2-a^2)+ft0*(a^2-b^2);td=fa*(b-t0)+fb*(t0-a)+ft0*(a-b);t1=tu/2/td;ft1=subs(f,findsym(f),t1);tol=abs(t1-t0);if ft1<=ft0ift1<=t0b=t0;t0=t1;elsea=t0;t0=t1;endk=k+1;elseift1<=t0a=t1;elseb=t1;endk=k+1;endendx=t1;minf=subs(f,findsym(f),x);-4-/6实验报告实验目的实验设备(型号及规格)实验内容实验原理实验步骤程序设计绘制程序流程图(如右图或参照课本p40、p46)编写程序(附录)实验结果7.思虑题-5-/6-6-/6。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机械优化设计课程论文
院系机械工程系
专业机械设计
班级一班
姓名
学号
一、优化题目
应用所学计算机语言编写一维搜索的优化计算程序,完成计算结果和输出。
二、建立优化数学模型
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 e 0.0001
#define tt 0.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 ,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);
}
六、结果分析:
通过利用外推法和黄金分割法求解函数的最优解的一维优化问题。
通过反复对程序的调试以得到所需要的结果,使我对这两个方法的原理有了更深刻的理解。