中南林业科技大学本科课程论文学院:理学院专业年级: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计算。