资源描述:
《西北农林科技大学数值分析数值法实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.数值法实验报告专业班级:信息与计算科学121姓名:金辉学号:20120142801)实验目的本次实验的目的是熟练《数值分析》第二章“插值法”的相关容,掌握三种插值法:牛顿多项式插值,三次样条插值,拉格朗日插值,并比较三种插值法的优劣。本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并在MATLAB软件中去实现。2)实验题目实验一:已知函数在下列各点的值为xi0.20.40.6.0.81.0f(xi)0.980.920.810.640.38试用4次牛顿插值多项式P4(x)及三次样条函数
2、S(x)(自然边界条件)对数据进行插值。用图给出{(xi,yi),xi=0.2+0.08i,i=0,1,11,10},P4(x)及S(x)。实验二:在区间[-1,1]上分别取用两组等距节点对龙格函数作多项式插值及三次样条插值,对每个值,分别画出插值函数即的图形。专业资料.实验三:下列数据点的插值x01491625364964y012345678可以得到平根函数的近似,在区间[0,64]上作图。(1)用这9各点作8次多项式插值L8(x).(2)用三次样条(自然边界条件)程序求S(x)。从结果看在[0,64]上
3、,那个插值更精确;在区间[0,1]上,两种哪个更精确?3)实验原理与理论基础《数值分析》第二章“插值法”的相关容,包括:牛顿多项式插值,三次样条插值,拉格朗日4)实验容实验一:已知函数在下列各点的值为xi0.20.40.6.0.81.0f(xi)0.980.920.810.640.38试用4次牛顿插值多项式P4(x)及三次样条函数S(x)(自然边界条件)对数据进行插值。用图给出{(xi,yi),xi=0.2+0.08i,i=0,1,11,10},P4(x)及S(x)。(1)首先我们先求牛顿插值多项式,此处要
4、用4次牛顿插值多项式处理数据。已知n次牛顿插值多项式如下:Pn=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+···+f[x0,x1,···xn](x-x0)···(x-xn-1)我们要知道牛顿插值多项式的系数,即均差表中得部分均差。在MATLAB的Editor专业资料.中输入程序代码,计算牛顿插值中多项式系数的程序如下:functionvarargout=newtonliu(varargin)clear,clcx=[0.20.40.60.81.0];fx=[0.
5、980.920.810.640.38];newtonchzh(x,fx);functionnewtonchzh(x,fx)%由此函数可得差分表n=length(x);fprintf('*****************差分表*****************************');FF=ones(n,n);FF(:,1)=fx';fori=2:nforj=i:nFF(j,i)=(FF(j,i-1)-FF(j-1,i-1))/(x(j)-x(j-i+1));endendfori=1:nfprintf
6、('%4.2f',x(i));forj=1:ifprintf('%10.5f',FF(i,j));endfprintf('');end由MATLAB计算得:xif(xi)一阶差商二阶差商三阶差商四阶差商0.200.9800.400.920-0.300000.600.810-0.55000-0.625000.800.640-0.85000-0.75000-0.208331.000.380-1.30000-1.12500-0.62500-0.52083所以有四次插值牛顿多项式为:P4(x)=0.98-0.3
7、(x-0.2)-0.62500(x-0.2)(x-0.4)-0.20833(x-0.2)(x-0.4)(x-0.6)-0.52083(x-0.2)(x-0.4)(x-0.6)(x-0.8)专业资料.(2)接下来我们求三次样条插值函数。用三次样条插值函数由上题分析知,要求各点的M值:三次样条插值函数计算的程序如下:functiontgsanci(n,s,t)%n代表元素数,s,t代表端点的一阶导。x=[0.20.40.60.81.0];y=[0.980.920.810.640.38];n=5forj=1:1:
8、n-1h(j)=x(j+1)-x(j);endforj=2:1:n-1r(j)=h(j)/(h(j)+h(j-1));endforj=1:1:n-1u(j)=1-r(j);endforj=1:1:n-1f(j)=(y(j+1)-y(j))/h(j);endforj=2:1:n-1d(j)=6*(f(j)-f(j-1))/(h(j-1)+h(j));endd(1)=0d(n)=0a=zeros(n,n);forj=