MATLAB黄金分割法课程论文--分析
- 格式:doc
- 大小:168.50 KB
- 文档页数:21
基于几种最优化方法的边坡稳定分析及在MATLAB中的实现姜健;余湘娟;毛尚礼【摘要】以国内应用广泛的毕肖普条分法结合MATLAB优化工具箱中具有优良特性的拟牛顿法和单纯形法编程,同时实现用这几种最优化方法求解最小安全系数,并就有关方面予以比较并查看它们的求解差异,以期通过多种方法的比较尽可能地找到真正的危险滑裂面.考虑到初值的选取对优化计算的重要影响,适当地采用了一些合理的方法.【期刊名称】《水运工程》【年(卷),期】2011(000)004【总页数】5页(P9-13)【关键词】最优化方法;边坡稳定性;MATLAB;毕肖普法【作者】姜健;余湘娟;毛尚礼【作者单位】河海大学土木与交通学院,江苏南京210098;河海大学岩土工程研究所,江苏南京210098;河海大学岩土工程研究所,江苏南京210098【正文语种】中文【中图分类】TU476采用条分法分析边坡稳定性已行之已久,目前仍然是该课题主要的分析手段。
利用条分法的首要任务就是确定最危险滑裂面,之后可以用任何一种条分法算得安全系数。
传统的方法是假定许多滑动面,用某种条分法分别计算各滑动面的安全系数,最终通过比较得到最小安全系数,从而确定其对应的滑裂面为最危险滑裂面。
这种方法得到的所谓的“最小安全系数”往往不是真正的最小安全系数。
于是最优化方法被广泛应用于求解最小安全系数。
如果滑裂面的曲线为y(x),那么,求解最小安全系数这个问题具体化为寻找下列泛函的极值:F=F[y(x)][1]。
岩土工程中的边坡的几何形状各异,以及岩土材料的非均质性等复杂条件决定了纯解析的变分原理很难进行极值计算。
用最优化方法进行数值方法求解,是一个现实可行的途径。
1.1 概述这里介绍拟牛顿法,因为它是MATLAB软件关于最优化求解的默认方法,该最优化方法的突出优点是收敛速度快,是一种集中了许多种算法优点的一种方法。
经理论证明和实践检验,拟牛顿法已经成为一种公认的比较有效的方法。
黄金分割法实验报告院系:机电工程学院专业:机制自动化黄金分割法实验报告一.黄金分割法基本思想黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点x1,x2,并计算其函数值。
x1,x2将区间分成三段。
应用函数单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。
然后再在保留下来的区间上作同样的处置,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解。
二.黄金分割法的程序框图针对例题3--1函数f(x)=x*x+2*x,当给定区间[-3,5]用黄金分割法求极小点三.程序#include <stdio.h> #include <math.h> double ff(double x) {double z;z=x*x+2*x;return (z);}int main(){double a,b,e,f1,f2,x1,x2;double n=0.618;int sign=1;int i=1;a=-3.0;b=5.0;e=0.001;x1=b-n*(b-a);f1=ff(x1);x2=a+n*(b-a);f2=ff(x2);printf("a=%5.3f, b=%5.3f, x1=%5.3f, x2=%5.3f, f1=%5.3f, f2=%5.3f\n",a,b,x1,x2,f1,f2);while(sign==1){if(f1>=f2){a=x1;x1=x2;f1=f2;x2=a+n*(b-a);f2=ff(x2);}else{b=x2;x2=x1;f2=f1;x1=b-n*(b-a);f1=ff(x1);}printf("第%d次循环各数值为:\n",i++);printf("a=%5.3f, b=%5.3f, x1=%5.3f, x2=%5.3f, f1=%5.3f, f2=%5.3f\n",a,b,x1,x2,f1,f2);if (fabs((b-a)/b)<e&&fabs((f2-f1)/f2)<e)sign=0;}if(sign==0)printf(" 近似解为%10.3f\n",(a+b)/2);return 0;}四.运行结果。
一维搜索方法的MATLAB 实现姓名: 班级:信息与计算科学 学号: 实验时间: 2014/6/21 一、实验目的:通过上机利用Matlab 数学软件进行一维搜索,并学会对具体问题进行分析。
并且熟悉Matlab 软件的实用方法,并且做到学习与使用并存,增加学习的实际动手性,不再让学习局限于书本和纸上,而是利用计算机学习来增加我们的学习兴趣。
二、实验背景: 黄金分割法它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点包含于搜索区间内,但是具体哪个点,无法得知。
1、算法原理黄金分割法的思想很直接,既然极小点包含于搜索区间内,那么可以不断的缩小搜索区间,就可以使搜索区间的端点逼近到极小点。
2、算法步骤用黄金分割法求无约束问题min (),f x x R ∈的基本步骤如下:(1)选定初始区间11[,]a b 及精度0ε>,计算试探点: 11110.382*()a b a λ=+- 11110.618*()a b a μ=+-。
(2)若k k b a ε-<,则停止计算。
否则当()()k k f f λμ>时转步骤(3)。
当()()k k f f λμ≤转步骤(4)。
(3) 11111110.382*()k k k k k k k k k k a b b a b a λλμμ+++++++=⎧⎪=⎪⎨=⎪⎪=+-⎩转步骤(5)(4)转步骤(5)(5)令1k k =+,转步骤(2)。
算法的MATLAB 实现function xmin=golden(f,a,b,e) k=0;x1=a+0.382*(b-a); x2=a+0.618*(b-a); while b-a>e f1=subs(f,x1); f2=subs(f,x2); if f1>f2 a=x1; x1=x2; f1=f2;x2=a+0.618*(b-a); else b=x2; x2=x1; f2=f1;x1=a+0.382*(b-a); end k=k+1; endxmin=(a+b)/2; fmin=subs(f,xmin)fprintf('k=\n'); disp(k);3、实验结果(总结/方案)黄金分割法求解极值实例。
最优化方法实验报告Numerical Linear Algebra And ItsApplications学生所在学院:理学院学生所在班级:计算数学10-1学生姓名:甘纯指导教师:单锐教务处2013年5月实验三实验名称:无约束最优化方法的MATLAB实现实验时间: 2013年05月10日星期三实验成绩:一、实验目的:通过本次实验的学习,进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。
二、实验背景:(一)最速下降法1、算法原理最速下降法的搜索方向是目标函数的负梯度方向,最速下降法从目标函数的负梯度方向一直前进,直到到达目标函数的最低点。
2、算法步骤用最速下降法求无约束问题n R()min的算法步骤如下:xxf,a )给定初始点)0(x ,精度0>ε,并令k=0;b )计算搜索方向)()()(k k x f v -∇=,其中)()(k x f ∇表示函数)(x f 在点)(k x 处的梯度;c )若ε≤)(k v ,则停止计算;否则,从)(k x 出发,沿)(k v 进行一维搜索,即求k λ,使得)(min )()()(0)()(k k k k v x f v x f λλλ+=+≥; d )令1,)()()1(+=+=+k k v x x k k k k λ,转b )。
(二)牛顿法1、算法原理牛顿法是基于多元函数的泰勒展开而来的,它将)()]([-)(1)(2k k x f x f ∇∇-作为搜索方向,因此它的迭代公式可直接写出来:)()]([)(1)(2)()(k k k k x f x f x x ∇∇-=-2、算法步骤用牛顿法求无约束问题n R x x f ∈),(min 的算法步骤如下:a )给定初始点)0(x ,精度0>ε,并令k=0;b )若ε≤∇)()(k x f ,停止,极小点为)(k x ,否则转c );c )计算)()]([,)]([)(1)(2)(1)(2k k k k x f x f p x f ∇∇-=∇--令;d )令1,)()()1(+=+=+k k p x x k k k ,转b )。
《最优化方法》实验报告实验序号:01 实验项目名称:线性规划及MATLAB应用《最优化方法》实验报告实验序号:02 实验项目名称:0.618黄金分割法的应用结果分析:根据以上结果可知,在区间[0,3]上,函数g(x)=x^3-2*x+1的最小值点在x=0.9271处,此时最小值为0。
第二题:P50 例题3.1程序:function [t,f]=golden3(a,b) %黄金分割函数的m文件t2=a+0.382*(b-a);f2=2*(t2)^2-(t2)-1;t1=a+0.618*(b-a); %按照黄金分割点赋值,更准确可直接算f1=2*(t1)^2-(t1)-1;while abs(t1-t2)>0.16; %判定是否满足精度if f1<f2a=t2;t2=t1;f2=f1;t1=a+0.618*(b-a);f1=2*(t1)^2-(t1)-1;elseb=t1;t1=t2;f1=f2;t2=a+0.382*(b-a);f2=2*(t2)^2-(t2)-1;endendt=(t1+t2)/2; %满足条件取区间中间值输出第四题:P64 T3程序:function [t,d]=newtow2(t0)t0=2.5;t=t0-(4*(t0)^3-12*(t0)^2-12*(t0)-16)/(12*(t0)^2-24*(t0)-12);k=1;T(1)=t;while abs(t-t0)>0.000005t0=t;t=t0-(4*(t0)^3-12*(t0)^2-12*(t0)-16)/(12*(t0)^2-24*(t0)-12); k=k+1;T(k)=t;endt1=t0;d=(t1)^4-4*(t1)^3-6*(t1)^2-16*(t1)+4;kTend运行结果:当x(0)=2.5当x(0)=3四.实验小结:1.通过这次实验,加深了对0.618法的理解。
2.在学习0.618法的过程中,又巩固了倒数、求解函数值等相关知识。
数字图像的多分辨率分析处理方法研究—基于小波变换的医学图像分割的研究电信学院电子信息工程专业摘要图像分割是一种重要的图像分析技术.对图像分割的研究一直是图像技术研究中的热点和焦点。
医学图像分割是图像分割的一个重要应用领域,也是一个经典难题,至今已有上千种分割方法,既有经典的方法也有结合新兴理论的方法.本论文首先介绍了双峰法以及最大类方差自动阈值法,然后重点介绍一种基于小波变换的图像分割方法,该方法先对图像的灰度直方图进行小波多尺度变换,然后从较大的尺度系数到较小的尺度系数逐步定位出灰度阈值.最后,对这几种算法的分割效果进行了比较。
实验结果表明,本设计能够实时稳定的对目标分割提取,分割效果良好。
医学图像分割是医学图像处理中的一个经典难题.图像分割能够自动或半自动描绘出医学图像中的解剖结构和其它感兴趣的区域,从而有助于医学诊断。
关键词:小波变换;图像分割;阈值The image segmentation is an important technology of image processing. It is still a hot point and focus of image processing。
Medical image segmentation is an important application in the field of image segmentation, and it is also a classical difficult problem for researchers。
Thousands of methods have been put forward to medical image segmentation. Some use classical methods and others use new methods.In this paper , first introduced the petronas method and maximum between class variance 。
matlab实验黄金分割法黄金分割法(Golden Section Method)是一种用于解决最优化问题的数值计算方法。
在数学上,最优化问题可以表述为寻找某个函数的最小值或最大值。
而黄金分割法是一种无约束优化算法,常被用于一维函数的最优化问题。
在本文中,我们将介绍黄金分割法的原理,并通过Matlab实验来演示其应用。
黄金分割法的原理基于黄金分割比,即1:0.618。
黄金分割法通过将搜索区间不断缩小,直到满足指定的精度要求,最终找到函数的极值点。
下面我们将逐步介绍黄金分割法的步骤:1. 初始化:给定初始搜索区间[a, b],以及所需的精度要求ε。
2. 计算区间长度:计算区间长度L = b - a。
3. 计算划分点:计算第一个划分点x1 = a + 0.382L,以及第二个划分点x2 = a + 0.618L。
4. 计算函数值:计算在划分点x1和x2处的函数值f(x1)和f(x2)。
5. 更新搜索区间:比较f(x1)和f(x2)的大小关系,若f(x1) < f(x2),则新的搜索区间为[a, x2],否则为[x1, b]。
6. 判断收敛:如果L < ε,算法收敛,停止迭代;否则,返回步骤2。
接下来,我们将通过一个实例来演示黄金分割法在Matlab中的应用。
假设我们要优化以下函数:```matlabf(x) = x^2 + 5*sin(x)```首先,我们需要在Matlab中定义这个函数。
在命令窗口中输入以下代码:```matlabf = @(x) x^2 + 5*sin(x);```接下来,我们可以采用黄金分割法来最小化这个函数。
以下是Matlab代码的大致框架:```matlaba = 0;b = 10;epsilon = 0.001;L = b - a;x1 = a + 0.382*L;x2 = a + 0.618*L;while L >= epsilonf1 = f(x1);f2 = f(x2);if f1 < f2b = x2;elsea = x1;endL = b - a;x1 = a + 0.382*L;x2 = a + 0.618*L;end```以上代码中,我们使用了一个while循环来不断更新搜索区间和划分点,直到满足指定的精度要求。
黄金分割法是一种用于求解函数最大值的数值优化算法。
它利用黄金比例的特性,在搜索过程中逐步减小搜索范围,找到函数的最大值。
本文将介绍黄金分割法的原理和实现方法,并给出利用Matlab编写的程序示例。
一、黄金分割法的原理黄金分割法基于黄金比例的性质,即将一段线段分割成两部分,使整段线段与较短部分的比值等于较短部分与较长部分的比值。
利用这一特性,在搜索过程中逐步减小搜索范围,最终找到函数的最大值。
二、黄金分割法的实现1. 确定初始搜索范围:根据实际问题确定函数的定义域,确定搜索范围[a, b]。
2. 计算黄金分割点:根据搜索范围[a, b]计算黄金分割点x1和x2,使得搜索范围按照黄金比例减小。
3. 计算函数值:计算函数在x1和x2处的取值f(x1)和f(x2)。
4. 更新搜索范围:比较f(x1)和f(x2)的大小,确定新的搜索范围[a, b]。
5. 重复步骤2-4,直到满足收敛条件或达到迭代次数上限。
三、Matlab程序示例以下是利用Matlab编写的黄金分割法程序示例:```matlabfunction [x_opt, f_opt] = golden_section_method(f, a, b, tol, max_iter)phi = (1 + sqrt(5)) / 2; 黄金比例x1 = b - (b - a) / phi;x2 = a + (b - a) / phi;f1 = feval(f, x1);f2 = feval(f, x2);iter = 0;while (b - a) > tol iter < max_iterif f1 < f2a = x1;x1 = x2;f1 = f2;x2 = a + (b - a) / phi;f2 = feval(f, x2);elseb = x2;x2 = x1;f2 = f1;x1 = b - (b - a) / phi;f1 = feval(f, x1);enditer = iter + 1;endx_opt = (a + b) / 2;f_opt = feval(f, x_opt);end```四、结语黄金分割法是一种简单而有效的数值优化算法,可以用于求解函数的最大值。
1、阐述黄金分割的基本思路及原理基本思路:黄金分割法适用于[a,b]区间上的任何单股函数求极小值问题,对函数除要求”单峰”外不做其他要求,甚至可以不连续.因此,这种方法的适应面非常广,黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b 内适当插入两点a1,a2,并计算其函数值。
a1,a2将区间分成三段,应用函数的单峰性质,通过函数值大小的比较,删除其中一段,是搜索区间得以缩小。
然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小值的数值近似解。
基本原理:在单谷区间],[b a 内适当插入两点21,t t ,由此把区间],[b a 分为三段,然后再通过比较这两点函数值的大小,就可以确定是删去最左端还是最右端,或者同时删去左右两端保留中间段.如此继续下去可将单谷区间无缩小. 基本原理:所谓黄金分割就是将一线段分为两段时,要求整段长L 与较长段x 的比值正好等于较长段x 与较短段x L -的比值(如图所示),即xL xx L -= 于是有022=-+L Lx x ,解出其正根L L x 618.0215≈-=. 由此可见长段的长度应为全长的618.0倍,而短段的长度应为全长的382.0倍.因为古代的人们认为按618.0的比率来分割线段时最协调,胜似黄金,故称之为黄金分割. 2、黄金分割的算法步骤.(1)给定初始区间],[11b a ,精度要求0>ε。
令)(382.01111a b a -+=λ,)(618.01111a b a -+=μ,并计算)(1λf 与)(1μf 。
令1:=k 。
(2)若ε<-k k a b ,停止,且2kk a b x +=。
否则,当)()(k k f f μλ>时,转3;当)()(k k f f μλ≤时,转4。
(3)令k k k k k k b b a μλλ===+++111,,,)(618.01111++++-+=k k k k a b a μ,计算)(1+k f μ,令1:+=k k ,转2。
最优化⽅法三分法+黄⾦分割法+⽜顿法最优化_三等分法+黄⾦分割法+⽜顿法⼀、实验⽬的1. 掌握⼀维优化⽅法的集中算法;2. 编写三分法算法3. 编写黄⾦分割法算法4. 编写⽜顿法算法⼆、系统设计三分法1.编程思路:三分法⽤于求解单峰函数的最值。
对于单峰函数,在区间内⽤两个mid将区间分成三份,这样的查找算法称为三分查找,也就是三分法。
在区间[a,b]内部取n=2个内等分点,区间被分为n+1=3等分,区间长度缩短率=1 3 .各分点的坐标为x k=a+b−an+1⋅k (k=1,2) ,然后计算出x1,x2,⋯;y1,y2,⋯;找出y min=min{y k,k=1,2} ,新区间(a,b)⇐(x m−1,x m+1) .coding中,建⽴left,mid1,mid2,right四个变量⽤于计算,⽤新的结果赋值给旧区间即可。
2.算法描述function [left]=gridpoint(left,right,f)epsilon=1e-5; %给定误差范围while((left+epsilon)<right) %检查left,right区间精度margin=(right-left)/3; %将区间三等分,每⼩段长度=marginm1=left+margin; %left-m1-m2-right,三等分需要两个点m2=m1+margin; %m2=left+margin+marginif(f(m1)<=f(m2))right=m2; %离极值点越近,函数值越⼩(也有可能越⼤,视函数⽽定)。
else %当f(m1)>f(m2),m2离极值点更近。
缩⼩区间范围,逼近极值点left=m1; %所以令left=m1.endend %这是matlab的.m⽂件,不⽤写return.黄⾦分割法1.编程思路三分法进化版,区间长度缩短率≈0.618.在区间[a,b]上取两个内试探点,p i,q i要求满⾜下⾯两个条件:1.[a i,q i]与[p i,b i]的长度相同,即b i−p i=q i−a i;2.区间长度的缩短率相同,即b i+1−a i+1=t(b i−a i)]2.算法描述⾃⼰编写的:function [s,func_s,E]=my_golds(func,left,right,delta)tic%输⼊: func:⽬标函数,left,right:初始区间两个端点% delta:⾃变量的容许误差%输出: s,func_s:近似极⼩点和函数极⼩值% E=[ds,dfunc] ds,dfunc分别为s和dfunc的误差限%0.618法的改进形式:每次缩⼩区间时,同时⽐较两内点和两端点处的函数值。
中南林业科技大学本科课程论文学院:理学院专业年级:14级信息与计算科学2班学生姓名:邱文林学号:********课程:MATLAB程序设计教程设计题目:基于MATLAB的黄金分割法与抛物线插值法指导教师:***2016年4月中文摘要为了求解最优化模型的最优解,可使用基于MATLAB算法编程的黄金分割法与抛物线插值法,来实现求解的过程。
黄金分割法是通过所选试点的函数值而逐步缩短单谷区间来搜索最优点,利用迭代进而得出结论。
抛物线插值法亦称二次插值法,是一种多项式插值法,逐次以拟合的二次曲线的极小点,逼近原寻求函数极小点的一种方法。
通过将MATLAB与最优化问题相结合,不仅可以加深对黄金分割法、抛物线插值法的基本理解和算法框图及其步骤的全面理解,也有利于帮助我们掌握MATLAB的使用方法。
关键词:MATLAB,黄金分割法,抛物线插值法,最优解,迭代英文摘要In order to solve the optimization model of the optimal solution, using MATLAB algorithm based on the golden section method and the parabola interpolation method, to realize the process of solving. The golden section method is used to search the most advantage through the function value of the selected pilot, which can be used to search for the most advantage. Parabolic interpolation method, also known as the two interpolation method, is a polynomial interpolation method, successive to fit the two curve of the minimum point, the original search function to find a very small point of the method. By combining MATLAB and optimization problems can not only deepen the comprehensive understanding of the golden section method, the parabola interpolation basic understanding and block diagram of the algorithm and steps, but also conducive to help us to grasp the method of using MATLAB.Key words: MATLAB, golden section method, parabolic interpolation method, optimal solution, iteration目录1. 黄金分割法▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪21.1 算法原理▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪21.2 算法步骤▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪21.3黄金分割法算法框图▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪32. 抛物线插值法▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪42.1 算法原理▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪42.2 算法步骤▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪42.3 抛物线插值法算法框图▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪53. 算法的MATLAB实现▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪63.1黄金分割法程序代码▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪63.2 实例验证▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪63.3 误差分析▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪93.4 抛物线插值法程序代码▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪103.5 实例验证▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪113.6 误差分析▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪123.7黄金分割法与抛物线插值法的对比▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪13 参考文献▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪15引言为了对最优化问题进行求解,为了更好的掌握MATLAB的运用,本文主要介绍一维最优化问题的一维搜索法黄金分割法与抛物线插值法,利用MATLAB算法将其实现。
黄金分割法也叫0.618法,它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点包含于搜索区间内,但是具体是哪个点,无法得知。
黄金分割法的思想很直接,既然极小点包含于搜索区间内,那么可以不断的缩小搜索区间,就可以使搜索区间的端点逼近到极小点。
抛物线插值法(parabolic interpolation met-hod)亦称二次插值法一种多项式插值法.逐次以拟合的二次曲线的极小点,逼近原寻求函数极小点的一种方法,能求得精度较高的解,但速度会比较慢。
时至今日,经过Math Works公司的不断完善,MATLAB已经发展成为适合多学科、多种工作平台的功能强劲的大型软件。
在国外,MATLAB已经经受了多年考验。
在欧美等高校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能。
在设计研究单位和工业部门,MATLAB 被广泛用于科学研究和解决各种具体问题。
1. 黄金分割法1.1 算法原理黄金分割法的基本原理:黄金分割法又称0.618法,它是通过不断缩短搜索区间的长度来寻求一维函数的极小点。
这种方法的原理是:在搜索区间[a, b]内按如下规则对称地取两点:计算它们的函数值f1=f(a1), f2=f(a2) ,比较它们的大小,结果有两种可能:1.2 算法步骤(1)f1>f2,如图1所示,极小点必在[a1, b]内,消去区间[a, a1), 令a=a1,产生新区间[a, b],到此区间缩短了一次。
值得注意的是新区间的a1点与原区间的a2点重合,可令a1=a2,这样可少找一个新点和节省一次函数值计算。
(2)f1<=f2,极小点必在[a, a2]内,消去区间 (a2,b],令b=a2,产生新区间[a ,b],到此区间缩短了一次。
同样新区间a2点与原区间的a1点重合,可令a2=a1,f2<=f1。
(3)当缩短的新区间长度小于等于某一精度ε,即b-a<=ε时,取a* =(a1+a2)/2。
1.3黄金分割法算法框图2. 抛物线插值法 2.1 算法原理:抛物线也叫二次插值法,其理论依据为二次多项式可以在最优点附近较好的逼近函数的形状,做法是在函数f(x)的最优点附近取三个构造点,然后用这三个点构造一条抛物线,把这条抛物线的极值点作为函数f(x)的极值点的近似。
每次构造一条抛物线后,抛物线的极值点就可作为一个新的构造点,新的构造点与原来的三个构造点经过某种算法,得到下一步抛物线逼近的三个构造点,这就是抛物线法的算法过程。
2.2 算法步骤:用抛物线求无约束问题minf(x),x ∈R 的算法步骤如下:① 确定初始区间[a,b],选定初始插值内点t 0∈(a,b)及精度e>0,令a 0=a,b 0=b,k=0; ② 求二次插值多项式的极小点:t k+1=))(())(())(())(())(())((21222222k k k k k k k k k k k k k k k k k k b a t f a t b f t b a f b a t f a t b f t b a f -+-+--+-+-. (2.10)③ 若f(t k+1) ≤f(t k ),则当|t k+1 -t k |≤e 时,停止迭代输出t k+1;否则转④; ④ 若f(t k+1) >f(t k ),则当|t k+1 -t k |≤e 时,停止迭代输出t k ;否则转⑤; ⑤ 若t k+1 ≤ t k ,令a k+1=a k ,b k+1=t k ,t k+1=t k+1; 置k=k+1转②,否则令a k+1=t k ,b k+1=b k ,t k+1=t k+1;置k=k+1转②。
⑥ 若t k+1 ≤ t k ,令a k+1=t k+1,b k+1=t k ,t k+1=t k ;置k=k+1转②,否则令a k+1=a k ,b k+1=t k+1,t k+1=t k ;置k=k+1转②。
初始插值内点可以取搜索区间[a, b]的中点。
2.3抛物线插值法算法框图3. 算法的MATLAB实现3.1 黄金分割法程序代码在MATLAB中编程实现的黄金分割法函数为: golden。
功能:用黄金分割法求解一维函数的极值。
调用格式:tmin=golden(f,a,b,e)其中, f=目标函数;a=极值区间左端点;b=极值区间右端点;e=精度;tmin=目标取最小值时的自变量值;黄金分割法的MATLAB程序代码如下:主程序:syms t a b e ;a=input('搜索区间第一点 \a=');b=input('搜索区间第二点 \b=');e=input('搜索精度\ne=');disp('需求的最优化函数 f=f(t),tmin=golden(f,a,b,e)');m文件:function tmin=golden(f,a,b,e)format long;k=0;a1=b-0.618*(b-a);a2=a+0.618*(b-a);while b-a>ey1=subs(f,a1);y2=subs(f,a2);if y1>y2a=a1;a1=a2;y1=y2;a2=a+0.618*(b-a);elseb=a2;a2=a1;y2=y1;a1=b-0.618*(b-a);endk=k+1;endtmin=(a+b)/2;fmin=subs(f,tmin)fprintf('k=\n');disp(k);x=-3:0.001:5;y=x.*(x+2);plot(x,y,'k-',tmin,fmin,'bp');3.2 实例验证minf(t)=t*(t+2), 已知初始单谷区间[a,b]=[-3,5],按精度e=0.001计算。