MATLAB黄金分割法课程论文.docx
- 文档编号:17225135
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:15
- 大小:82.89KB
MATLAB黄金分割法课程论文.docx
《MATLAB黄金分割法课程论文.docx》由会员分享,可在线阅读,更多相关《MATLAB黄金分割法课程论文.docx(15页珍藏版)》请在冰点文库上搜索。
MATLAB黄金分割法课程论文
IMBstandardizationoffice【IMB5AB-IMBK08-IMB2C】
MATLAB黄金分割法课程论文
中南林业科技大学
本科课程论文
学 院:
理学院
专业年级:
14级信息与计算科学2班
学生姓名:
邱文林学号:
课程:
MATLAB程序设计教程
设计题目:
基于MATLAB的黄金分割法与抛物线插值法
指导教师:
龚志伟
2016年4月
中文摘要
为了求解最优化模型的最优解,可使用基于MATLAB算法编程的黄金分割法与抛物线插值法,来实现求解的过程。
黄金分割法是通过所选试点的函数值而逐步缩短单谷区间来搜索最优点,利用迭代进而得出结论。
抛物线插值法亦称二次插值法,是一种多项式插值法,逐次以拟合的二次曲线的极小点,逼近原寻求函数极小点的一种方法。
通过将MATLAB与最优化问题相结合,不仅可以加深对黄金分割法、抛物线插值法的基本理解和算法框图及其步骤的全面理解,也有利于帮助我们掌握MATLAB的使用方法。
关键词:
MATLAB,黄金分割法,抛物线插值法,最优解,迭代
英文摘要
Inordertosolvetheoptimizationmodeloftheoptimalsolution,usingMATLABalgorithmbasedonthegoldensectionmethodandtheparabolainterpolationmethod,,,alsoknownasthetwointerpolationmethod,isapolynomialinterpolationmethod,successivetofitthetwocurveoftheminimumpoint,,theparabolainterpolationbasicunderstandingandblockdiagramofthealgorithmandsteps,butalsoconducivetohelpustograspthemethodofusingMATLAB.
Keywords:
MATLAB,goldensectionmethod,parabolicinterpolationmethod,optimalsolution,iteration
1.黄金分割法2
算法原理2
算法步骤2
黄金分割法算法框图3
2.抛物线插值法4
算法原理4
算法步骤4
抛物线插值法算法框图5
3.算法的MATLAB实现6
黄金分割法程序代码6
实例验证6
误差分析9
抛物线插值法程序代码10
实例验证11
误差分析12
黄金分割法与抛物线插值法的对比13
参考文献15
引言
为了对最优化问题进行求解,为了更好的掌握MATLAB的运用,本文主要介绍一维最优化问题的一维搜索法黄金分割法与抛物线插值法,利用MATLAB算法将其实现。
黄金分割法也叫法,它是一种基于区间收缩的极小点搜索算法,当用进退法确定搜索区间后,我们只知道极小点包含于搜索区间内,但是具体是哪个点,无法得知。
黄金分割法的思想很直接,既然极小点包含于搜索区间内,那么可以不断的缩小搜索区间,就可以使搜索区间的端点逼近到极小点。
抛物线插值法(parabolicinterpolationmet-hod)亦称二次插值法一种多项式插值法.逐次以拟合的二次曲线的极小点,逼近原寻求函数极小点的一种方法,能求得精度较高的解,但速度会比较慢。
时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科、多种工作平台的功能强劲的大型软件。
在国外,MATLAB已经经受了多年考验。
在欧美等高校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生、硕士生、博士生必须掌握的基本技能。
在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。
1.黄金分割法
算法原理
黄金分割法的基本原理:
黄金分割法又称法,它是通过不断缩短搜索区间的长度来寻求一维函数的极小点。
这种方法的原理是:
在搜索区间[a,b]内按如下规则对称地取两点:
计算它们的函数值f1=f(a1),f2=f(a2),比较它们的大小,结果有两种可能:
算法步骤
(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。
黄金分割法算法框图
2.抛物线插值法
算法原理:
抛物线也叫二次插值法,其理论依据为二次多项式可以在最优点附近较好的逼近函数的形状,做法是在函数f(x)的最优点附近取三个构造点,然后用这三个点构造一条抛物线,把这条抛物线的极值点作为函数f(x)的极值点的近似。
每次构造一条抛物线后,抛物线的极值点就可作为一个新的构造点,新的构造点与原来的三个构造点经过某种算法,得到下一步抛物线逼近的三个构造点,这就是抛物线法的算法过程。
算法步骤:
用抛物线求无约束问题minf(x),x∈R的算法步骤如下:
①确定初始区间[a,b],选定初始插值内点t0∈(a,b)及精度e>0,令a0=a,b0=b,k=0;
②求二次插值多项式的极小点:
tk+1=
.
③若f(tk+1)≤f(tk),则当|tk+1-tk|≤e时,停止迭代输出tk+1;否则转④;
④若f(tk+1)>f(tk),则当|tk+1-tk|≤e时,停止迭代输出tk;否则转⑤;
⑤若tk+1≤tk,令
ak+1=ak,bk+1=tk,tk+1=tk+1;
置k=k+1转②,否则令
ak+1=tk,bk+1=bk,tk+1=tk+1;
置k=k+1转②。
⑥若tk+1≤tk,令
ak+1=tk+1,bk+1=tk,tk+1=tk;
置k=k+1转②,否则令
ak+1=ak,bk+1=tk+1,tk+1=tk;
置k=k+1转②。
初始插值内点可以取搜索区间[a,b]的中点。
抛物线插值法算法框图
3.算法的MATLAB实现
黄金分割法程序代码
在MATLAB中编程实现的黄金分割法函数为:
golden。
功能:
用黄金分割法求解一维函数的极值。
调用格式:
tmin=golden(f,a,b,e)
其中,f=目标函数;
a=极值区间左端点;
b=极值区间右端点;
e=精度;
tmin=目标取最小值时的自变量值;
黄金分割法的MATLAB程序代码如下:
主程序:
symstabe;
a=input('搜索区间第一点\a=');
b=input('搜索区间第二点\b=');
e=input('搜索精度\ne=');
disp('需求的最优化函数f=f(t),tmin=golden(f,a,b,e)');
m文件:
functiontmin=golden(f,a,b,e)
formatlong;
k=0;
a1=*(b-a);
a2=a+*(b-a);
whileb-a>e
y1=subs(f,a1);
y2=subs(f,a2);
ify1>y2
a=a1;
a1=a2;
y1=y2;
a2=a+*(b-a);
else
b=a2;
a2=a1;
y2=y1;
a1=*(b-a);
end
k=k+1;
end
tmin=(a+b)/2;
fmin=subs(f,tmin)
fprintf('k=\n');
disp(k);
x=-3:
:
5;
y=x.*(x+2);
plot(x,y,'k-',tmin,fmin,'bp');
实例验证
minf(t)=t*(t+2),已知初始单谷区间[a,b]=[-3,5],按精度e=计算。
代入到主程序代码:
搜索区间的第一点a=-3
搜索区间的第二点b=5
搜索精度
e=
需求的最优化函数f=f(t),tmin=golden(f,a,b,e)
>>f=t*(t+2)
f=
t*(t+2)
>>tmin=golden(f,a,b,e)
k=
19
tmin=
>>fmin=tmin*(tmin+2)
fmin=
目标函数的曲线图如图1-1所示:
注:
图中☆所标识的点为黄金分割法所求的极小点。
图1-1函数f(t)=t(t+2)的曲线图
误差分析:
(t)=t*(t+2)的精确解如下:
f=[1,2,0];
p=polyder(f);
t1=roots(p)
f1=polyval(f,t1)
t1=
-1
f1=
-1
极小点误差:
e1=(tmin-t1)/t1=(--(-1))/(-1)≈1e-4
极小值误差:
e2=(f1-fmin)/f1=(-1+)/(-1)≈1e-8
结论:
在精度e=的情况下,通过黄金分割法经过19次迭代,求得:
tmin=,与精确值的误差e1=1e-4 抛物线插值法程序代码 在MATLAB中编程实现的抛物线法函数为: minPWX。 功能: 用抛物线插值法求解一维函数的极值。 调用格式: [x,minf]=minPWX(f,a,b,e) 其中,f: 目标函数; A: 初始搜索区间左端点; b: 初始搜索区间右端点; e: 精度; x: 目标取最小值时的自变量值; minf: 目标函数的最小值。 抛物线法的MATLAB程序代码如下: function[x,minf]=minPWX(f,a,b,e) %目标函数: f; %初始搜索区间左端点: a; %初始搜索区间右端点: b; %精度: e; %目标函数取最小值时的自变量值: x; %目标函数的最小值: minf formatlong; ifnargin==3 e=; end t0=(a+b)/2; k=0; tol=1; whiletol>e fa=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); ifft1<=ft0 ift1<=t0 b=t0; t0=t1; else a=t0; t0=t1; end k=k+1; else ift1<=t0 a=t1; else b=t1; end k=k+1; end end x=t1; minf=subs(f,findsym(f),x); formatshort; 实例验证 用抛物线法求函数f(t)=t*(t+2),已知初始单谷区间[a,b]=[-3,5],按精度e=计算。 解: 在MATLAb命令窗口中输入: >>symst; >>f=t*(t+2); >>[tmin,fmin]=minPWX(f,-3,5) tmin= -1 fmin= -1 目标函数的曲线图如图1-2所示: 注: 图中O所标识的点为抛物线插值法所求的极小点。 图1-2函数f(t)=t(t+2)的曲线图 误差分析: (t)=t*(t+2)的精确解如下: f=[1,2,0]; p=polyder(f); t1=roots(p) f1=polyval(f,t1) t1= -1 f1= -1 极小点误差: e3=(tmin-t1)/t1=(-1-(-1))/(-1)=0 极小值误差: e4=(fmin-f1)/f1=0 黄金分割法与抛物线插值法的对比 注: 下图中红色☆是黄金分割法的极小点标识位置, 蓝色O是抛物线插值法的极小点标识位置。 图1-3函数f(t)=t(t+2)的曲线图 对比结论: 由图分析: 精度e=的情况下,如上图1-3所示,黄金分割法与抛物线插值法求出的极小点都极为接近精确值。 由误差分析: 黄金分割法极小点误差: e1=(tmin-t1)/t1=(--(-1))/(-1)≈1e-4 抛物线插值法极小点误差: e3=(tmin-t1)/t1=(-1-(-1))/(-1)=0 可见,在满足同精度的情况下,抛物线插值法能求出精度更高的解,但是速度会比较慢。 黄金分割法的优点是可以用来迅速缩小极值区间,而抛物线法可以提高解的精度。 若将两者综合,用黄金分割法求一个比较小的极值区间,再用抛物线插值法提高精度,这样既满足了精度,又提高了效率,这样的方法会更好。 参考文献: [1]郭科,陈聆,魏友华.最优化方法及其运用. [2]刘卫国,MATLAB程序设计教程(第二版). [3]龚纯,王正林,精通MATLAB最优化计算(第2版). 指导老师评语: 签字: 日期: 年月日 成 绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 黄金分割 课程 论文
![提示](https://static.bingdoc.com/images/bang_tan.gif)