数值分析课程设计多项式插值的振荡现象matlabWord文档下载推荐.docx
《数值分析课程设计多项式插值的振荡现象matlabWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计多项式插值的振荡现象matlabWord文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
考虑区间[-1,1]的一个等距划分,节点为
则拉格朗日插值多项式为
其中的ai(x),i=0,1,2,…,n是n次Lagrange插值基函数。
二、实验内容
研究以下三个函数在各自区间上运用不同的划分
1、
2、
3、
运用在区间[-p,p]上等距划分(p>
0),节点为
以x0,x1,…,xn为插值节点构造上述各函数的Lagrange插值多项式。
运用区间[a,b]上切比雪夫(Chebychev)点的定义为
以x1,x2,…,xn+1为插值节点构造上述各函数的Lagrange插值多项式,比较其结果。
并分别比较两种划分方法,增加节点数,最大误差的变化。
三、实验结果及分析
(一)等距划分
对于函数来说,使用等距划分
其中绿色点线代表误差,红色划线代表Lagrange插值多项式,蓝色实线代表原函数。
可见对于等距划分来说节点数越多,最大误差越大,可是越靠近中间的误差越少。
越接近两个端点的误差越大。
当节点数很大时,最大误差的来源只与靠近两个端点的误差有关。
例如:
n=20时
对于,使用等距划分
当n=25时
当n=30时,
从以上三个函数图像来看,可见节点越多,靠近端点处取得最大误差,并且最大误差越大。
这就是龙格现象。
(二)切比雪夫(Chebychev)点
首先研究
当n=20时
可是当n=30
同样的n=40,50也出现了两端误差增大现象。
然后研究
当n=25时
同样的n=30,50也会出现龙格现象。
最后研究
此函数也不例外。
由以上三个函数,通过不断改变n的值,可得运用切比雪夫点来划分,要使最大误差小于0.1,n一般取12到20间的数。
(三)综述
对于Lagrange插值多项式,运用等距划分取节点时,n要不能取得太大,一般n=8或8左右。
若要使n取得更大,那么需要使代入到函数的点尽量在区间的中间,这样才能使真值与计算出来的值的误差尽可能的小。
运用切比雪夫点来划分取节点时,n一般取12到20间的数。
无论要代入到函数的点在区间的那个位置,都能使误差尽可能的小。
若n取的较小,同样误差也是很大的。
对于以上两种取节点的方法,都不能避免龙格现象的出现。
对于不同的选取节点的方法,只要n取得合适,同时代人函数的点适合,那么就可以使误差尽可能的减少。
四、关于本设计的体会
为了完成本设计,接触了一个数学软件matlab,并能初步运用本软件,编写程序,方便了以后对数学的研究。
并且对于编写过程中遇到的错误,显示不正确等,通过网络搜索查询,能解决这些问题。
例如运用fminbnd函数时,显示的并不是正确的答案,后来XX了一下,明白了此函数的运作原理,并最终能显示我想得到的结果。
当然对于我所编写的程序,我也就只能做到这一步,也是碍于时间关系,和对matlab不熟悉,并不能更好的完善下去。
有时取值很大时,运行起来,运行得很慢,这是一大缺陷。
主要是循环次数太多,和找不到更好的函数代替所造成的。
其他的缺点也就不一一的列举了。
学习一个软件需要耐心,细心。
多寻找,多发现,多创作才能深入了解一个软件。
同样的道理,这也是做任何事所需要的素质。
五、参考文献
数值分析(第三版)——北京理工大学出版社
六、附录
所的运用软件及编号MATLAB7.0
(图略)
所用电脑的版本、型号与系统
用户界面设计
文件名:
kcsjx.fig
用户界面程序,运行kcsjx.m来调用主要程序
kcsjx.m
functionvarargout=kcsjx(varargin)
%KCSJXM-fileforkcsjx.fig
%KCSJX,byitself,createsanewKCSJXorraisestheexisting
%singleton*.
%
%H=KCSJXreturnsthehandletoanewKCSJXorthehandleto
%theexistingsingleton*.
%KCSJX('
CALLBACK'
hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinKCSJX.Mwiththegiveninputarguments.
Property'
'
Value'
...)createsanewKCSJXorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforekcsjx_OpeningFunctiongetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtokcsjx_OpeningFcnviavarargin.
%*SeeGUIOptionsonGUIDE'
sToolsmenu.Choose"
GUIallowsonlyone
%instancetorun(singleton)"
.
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Copyright2002-2003TheMathWorks,Inc.
%Edittheabovetexttomodifytheresponsetohelpkcsjx
%LastModifiedbyGUIDEv2.504-Jun-201216:
03:
46
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
'
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@kcsjx_OpeningFcn,...
gui_OutputFcn'
@kcsjx_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforekcsjxismadevisible.
functionkcsjx_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstokcsjx(seeVARARGIN)
%Choosedefaultcommandlineoutputforkcsjx
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakeskcsjxwaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=kcsjx_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
functionedit1_Callback(hObject,eventdata,handles)
%hObjecthandletoedit1(seeGCBO)
%Hints:
get(hObject,'
String'
)returnscontentsofedit1astext
%str2double(get(hObject,'
))returnscontentsofedit1asadouble
input=str2num(get(hObject,'
));
if(isempty(input))
set(hObject,'
0'
)
guidat