matlab_牛顿插值法_三次样条插值法
MATLAB数值实验一(数据的插值运算及其应用完整版)
佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 插值法与数据拟合 专业班级 机械工程 姓 名 余红杰 学 号 10 指导教师 陈剑 成 绩 日 期 月 日一、实验目的1、学会Lagrange 插值、牛顿插值和三次样条插值等基本插值方法;2、讨论插值的Runge 现象3、学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。
二、实验原理1、拉格朗日插值多项式2、牛顿插值多项式3、三次样条插值 三、实验步骤1、用MATLAB 编写独立的拉格朗日插值多项式函数2、用MATLAB 编写独立的牛顿插值多项式函数3、用MATLAB 编写独立的三次样条函数(边界条件为第一、二种情形)4、已知函数在下列各点的值为:根据步骤1,2,3编好的程序,试分别用4次拉格朗日多项式4()L x 、牛顿插值多项式4()P x 以及三次样条函数()S x (自然边界条件)对数据进行插值,并用图给出 {(,),0.20.08,0,1,2,,10i i i x y x i i =+=},4()L x 、4()P x 和()S x 。
5、在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21(),(11)125f x x x=-≤≤+作多项式插值,对不同n 值,分别画出插值函数及()f x 的图形。
6、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。
(1)用这9个点作8次多项式插值8()L x 。
(2)用三次样条(第一边界条件)程序求()S x 。
7、对于给函数21()125f x x =+在区间[-1,1]上取10.2(0,1,,10)i x i i =-+=,试求3次曲线拟合,试画出拟合曲线并打印出方程,与第5题的结果比较。
四、实验过程与结果:1、Lagrange 插值多项式源代码:function ya=lag(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 ya=0; mu=1; %初始化%循环方式求L 系数,并求和: for i = 1:length(y) for j = 1:length(x) if i ~= jmu = mu * (xa - x(j) ) / ( x(i) - x(j) ); else continue end endya = ya + y(i) * mu ; mu = 1; end2、Newton 源代码:function ya = newton(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 %建立系数零矩阵D 及初始化:D = zeros(length(x)-1);ya = y(1);xi = 1;%求出矩阵D,该矩阵第一行为牛顿插值多项式系数:for i=1:(length(x)-1)D(i,1) = (y(i+1) -y(i))/(x(i+1) -x(i));endfor j=2:(length(x)-1)for i=1:(length(x)-j)D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (x(i+j) - x(i)); endend%xi为单个多项式(x-x(1))(x-x(2))...的值for i=1:(length(x)-1)for j=1:ixi = xi*(xa - x(j));endya = ya + D(1,i)*xi;xi = 1;end3、三次样条插值多项式(1)(第一边界条件)源代码:function y=yt1(x0,y0,f_0,f_n,x) _____________(1)%第一类边界条件下三次样条插值;%xi 所求点;%yi 所求点函数值;%x 已知插值点;%y 已知插值点函数值;%f_0左端点一次导数值;%f_n右端点一次导数值;n = length(x0);z = length(y0);h = zeros(n-1,1);k=zeros(n-2,1);l=zeros(n-2,1);S=2*eye(n);for i=1:n-1h(i)= x0(i+1)-x0(i);endfor i=1:n-2k(i)= h(i+1)/(h(i+1)+h(i));l(i)= 1-k(i);end%对于第一种边界条件:k = [1;k]; _______________________(2)l = [l;1]; _______________________(3)%构建系数矩阵S:for i = 1:n-1S(i,i+1) = k(i);S(i+1,i) = l(i);end%建立均差表:F=zeros(n-1,2);for i = 1:n-1F(i,1) = (y0(i+1)-y0(i))/(x0(i+1)-x0(i));endD = zeros(n-2,1);for i = 1:n-2F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i));D(i,1) = 6 * F(i,2);end%构建函数D:d0 = 6*(F(1,2)-f_0)/h(1); ___________(4)dn = 6*(f_n-F(n-1,2))/h(n-1); ___________(5)D = [d0;D;dn]; ______________(6)m= S\D;%寻找x所在位置,并求出对应插值:for i = 1:length(x)for j = 1:n-1if (x(i)<=x0(j+1))&(x(i)>=x0(j))y(i) =( m(j)*(x0(j+1)-x(i))^3)/(6*h(j))+...(m(j+1)*(x(i)-x0(j))^3)/(6*h(j))+...(y0(j)-(m(j)*h(j)^2)/6)*(x0(j+1)-x(i))/h(j)+... (y0(j+1)-(m(j+1)*h(j)^2)/6)*(x(i)-x0(j))/h(j) ; break;else continue;endendend(2)(自然边界条件)源代码:仅仅需要对上面部分标注的位置做如下修改:__(1):function y=yt2(x0,y0,x)__(2):k=[0;k]__(3):l=[l;0]__(4)+(5):删除—(6):D=[0:D:0]4、——————————————PS:另建了一个f方程文件,后面有一题也有用到。
MAAB牛顿插值法例题与程序
题目一:多项式插值某气象观测站在8:00(AM )开始每隔10分钟对天气作如下观测,用三次多项式插值函数(Newton )逼近如下曲线,插值节点数据如上表,并求出9点30分该地区的温度(x=10)。
二、数学原理假设有n+1个不同的节点及函数在节点上的值(x 0,y 0),……(x n ,y n ),插值多项式有如下形式:)())(()()()(n 10n 102010n x -x )(x -x x -x x P x x x x x x -⋯⋯-+⋯⋯+-++=αααα(1) 其中系数i α(i=0,1,2……n )为特定系数,可由插值样条i i n y x P =)((i=0,1,2……n )确定。
根据均差的定义,把x 看成[a,b]上的一点,可得f(x)=f (0x )+f[10x x ,](0x -x ) f[x,0x ]=f[10x x ,]+f[x,10x x ,](1x -x )……f[x,0x ,…x 1-n ]=f[x,0x ,…x n ]+f[x,0x ,…x n ](x-x n )综合以上式子,把后一式代入前一式,可得到:f(x)=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+…+f[x,0x ,…x n ](0x -x )…(x-x 1-n )+f[x,0x ,…x n ,x ])(x 1n +ω=N n (x )+)(x n R 其中N n (x )=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+ …+f[x,0x ,…x n ](0x -x )…(x-x 1-n )(2))(x n R =f(x)-N n (x )=f[x,0x ,…x n ,x ])(x 1n +ω(3) )(x 1n +ω=(0x -x )…(x-x n ) Newton 插值的系数i α(i=0,1,2……n )可以用差商表示。
MATLAB实习报告-1
--实习报告班级:******姓名:**学号:***********指导老师:***日期:2011/11/24目录一.MATLAB简介 (3)二.上机实习题目 (3)1. 第2章第1题 (3)2. 第3章第2题 (3)3. 第5章第2题 (3)4. 第4章第1题 (4)三.题目实现过程 (4)1. 牛顿插值以及三次样条插值(第一个实验题) (4)a.牛顿插值 (4)b.三次样条插值 (4)c.牛顿插值截图 (5)d.三次样条插值截图 (6)2. 3次,4次多项式的曲线拟合 (7)a.先输入表格中对应的数据, (7)次拟合 (7)c. 3次拟合截图 (8)d. 4次拟合 (9)e. 4次拟合截图 (9)3. 高斯消去法解线性方程组 (10)a. 高斯消去法源代码 (10)b. 第一个小题 (11)c. 第二个小题 (12)4. 雅克比迭代法与SOR方法 (13)a. 雅克比迭代法的计算公式 (13)b. 超松弛迭代法的计算公式 (13)c.得到希尔矩阵 (13)d.得到b矩阵 (13)e.雅克比迭代法实现的函数 (13)迭代法实现的函数 (14)g.对于雅克比迭代法,通过执行以下代码 (15)h. 对于SOR迭代法,执行相对应代码 (15)四.心得与感想 (18)一.M ATLAB简介MATLAB是一个软件,用来进行科学计算。
在实际生活或者在科学研究中,大量的计算有时候是不可避免的,在这个时候,我们可以选择很多种方式来解决我们的问题。
但是选择一个好的软件对于我们来说有时候却是非常困难的,尤其是现在各种软件层出不穷,当然里面有好的,可是有大多数的软件却是鱼目混珠,在里面滥竽充数。
如果我们不避开这些,那么我们可能面临的是用很大的工作量来完成一个极其简单的问题,或者说在付出了时间与精力之后却完不成问题。
所以必须选择一个好的计算软件来解决问题。
MATLAB 就是这样一个软件,在你能够熟悉并且流畅运用它之后,那它将是一把能够解决很多问题的钥匙。
Matlab数据插值与拟合
end
end
end
第16页,共49页。
例4-3 根据下表的数据点求出其拉格朗日 插值多项式,并计算当x=1.6时y的值。
x
1
y 0.8415
1.2
0.9320
1.8
2. 5
0.9738 0.5985
4
-0.7568
解:
>> x=[1 1.2 1.8 2.5 4]; >> y=[0.8415 0.9320 0.9738 0.5985 -0.7568]; >> f=language(x,y)
同‘pchip’,三次Hermite多项式插值
第5页,共49页。
1.Linear(分段线性插值)
它 在的区算间法[xi是,xi在+1]每上个的小子区插间值[多xi,x项i+式1]上为采:用简单的线性插值。
Fi
x xi1 xi xi1
f
(xi )
x xi xi1 xi
f (xi1)
由此整个区间[xi,xi+1]上的插值函数为:
邻近的已知点的线性函数插值计算该区间内插值点上的函数
值。
第11页,共49页。
例4-2 用其他一维插值方法对以下7个离散数据点 (1,3.5)、(2,2.1)、(3,1.3)、(4.0.8)、(5,2.9)、(6,4.2)、(7,5.7
进行一维插值方法。
解:在MATLAB命令窗口中输入以下命令:
>> x=[1 2 3 4 5 6 7];
end;
%计算拉格朗日基函数
f = f + l; simplify(f);
%计算拉格朗日插值函数 %化简
if(i==n)
牛顿插值法matlab程序例题
牛顿插值法是一种常用的数值分析方法,用于构造一个多项式函数,以便在给定的数据点上进行插值。
这个主题在数学和工程领域中有着广泛的应用,特别是在数据拟合和函数逼近方面。
牛顿插值法的核心思想是通过不断地添加新的数据点来构造一个多项式,并利用已知数据点来确定多项式的系数,从而实现对未知数据点的插值预测。
在Matlab中,实现牛顿插值法并不困难,我们可以利用已有的函数和工具来简化计算过程。
下面,我们将通过一个具体的例题来讲解如何使用Matlab编写牛顿插值法的程序,并分析其结果。
我们需要明确牛顿插值法的数学原理。
给定n个互不相同的节点\(x_0, x_1, ... , x_n\),以及在这些节点上的函数值\(f(x_0), f(x_1), ... , f(x_n)\),我们希望构造一个n次插值多项式p(x),满足p(x_i) = f(x_i),i=0,1,...,n。
牛顿插值多项式的一般形式为:\[p(x) = a_0 + a_1(x - x_0) + a_2(x - x_0)(x - x_1) + ... + a_n(x -x_0)(x - x_1)...(x - x_{n-1})\]其中,\[a_i\]表示插值多项式的系数。
通过牛顿插值法的迭代过程,可以逐步求解出这些系数,进而得到插值多项式的表达式。
接下来,我们将以一个具体的例题来演示如何在Matlab中实现牛顿插值法。
假设我们有如下的数据点和函数值:\(x = [1, 2, 3, 4]\)\(f(x) = [1, 4, 9, 16]\)我们希望利用这些数据点来构造一个插值多项式,并在给定的区间上进行插值计算。
在Matlab中,可以通过interp1函数来进行插值计算,该函数支持多种插值方法,包括牛顿插值法。
下面是一个简单的Matlab程序示例:```matlabx = [1, 2, 3, 4];y = [1, 4, 9, 16];xi = 2.5;yi = interp1(x, y, xi, 'spline');disp(['在x=',num2str(xi),'处的插值结果为:',num2str(yi)]);```在这段代码中,我们首先定义了给定的数据点x和对应的函数值y,然后利用interp1函数对x=2.5处的插值结果进行计算。
Matlab插值方法学习Hermite,lagrange,Newton
大家都知道插值在数学建模中很重要,现在介绍几种常用插值下面介绍几种基本的、常用的插值:拉格朗日多项式插值、牛顿插值、分段线性插值、Hermite插值和三次样条插值。
1.拉格朗日多项式插值拉格朗日插值就是给定n个数,让你用不超过n-1次的多项式你逼近它,当然这n个点要能满足多项式。
这是一种最基本的思想,计算很简单,先计算n个基函数,基函数可以自己上网搜一下,因为这里打出公式有点麻烦。
然后就是把每个点的y值乘以他的基函数,把这n个式子相加,最后化简就ok了。
下面我把代码写出来,我这些代码全是自己写的,注释比较详细,这里只以lagrange为例,其余都放在附件里了。
%定义myLagrange函数,参数为向量x,y,由用户调用该函数时输入function L=myLagrange (x,y)%n 插值结点的个数n=length(x);%L myLagrange函数计算的多项式系数行列式L=zeros(1,n);%%使用双重for循环,第一个for循环是fori=1:n%aa=1;%ww=1;%for循环for j=1:n%如果i不等于jif j~=i%累加法计算aa=a*(x(i)-x(j));%用向量乘法函数conv计算ww=conv(w,[1,-x(j)]);%if语句结束符end%第二个for循环结束符end%递归法计算L,其中y(i)/a*w表示第i个元素L=y(i)/a*w+L;%第一个for结束符end没错,就这么几句代码,所以很简单的。
2.牛顿插值牛顿插值其实是为了解决拉格朗日插值不能增加新的点来说的。
拉格朗日插值只能接受给定的那么多点,了然后插值。
如果你想再加一个点,它会重新开始计算,这个很费时间和内存。
因此牛顿插值就诞生了。
了解牛顿插值前要学习下差商和差分两个简单的概念。
Newton 插值的优点是:每增加一个节点,插值多项式只增加一项,即因而便于递推运算。
而且Newton 插值的计算量小于Lagrange 插值。
数值分析实验报告1
p
得到m=(00)T
即M0=0 ;M1=;M2=;M3=;M4=0
则根据三次样条函数定义,可得:
S(x)=
接着,在Command Window里输入画图的程序代码,
下面是画牛顿插值以及三次样条插值图形的程序:
x=[ ];
y=[ ];
plot(x,y)
hold on
for i=1:1:5
y(i)= *(x(i)*(x(i)*(x(i)*(x(i)*(x(i)*(x(i)*(x(i)
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中输入程序代码,计算牛顿插值中多项式系数的程序如下:
【实验原理】
《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值,拉格朗日插值的相应算法和相关性质。
【实验环境】(使用的软硬件)
软件:
MATLAB 2012a
硬件:
电脑型号:联想 Lenovo 昭阳E46A笔记本电脑
操作系统:Windows 8 专业版
处理器:Intel(R)Core(TM)i3 CPU M 350 @
实验内容:
【实验方案设计】
第一步,将书上关于三种插值方法的内容转化成程序语言,用MATLAB实现;第二步,分别用牛顿多项式插值,三次样条插值,拉格朗日插值求解不同的问题。
【实验过程】(实验步骤、记录、数据、分析)
实验的主要步骤是:首先分析问题,根据分析设计MATLAB程序,利用程序算出问题答案,分析所得答案结果,再得出最后结论。
matlab实现牛顿差分及等距节点插值公式
题目:探究matlab中牛顿差分及等距节点插值公式的实现在计算数学问题时,插值是一种常见的数值分析方法,它常常用于估计在已知数据点之间的数值。
而牛顿差分及等距节点插值公式,则是其中的一种重要方法。
本文将从简单到复杂,由浅入深地探讨matlab 中牛顿差分及等距节点插值公式的实现方法,以便读者更深入地理解这一主题。
1. 牛顿插值方法牛顿插值是一种使用多项式进行插值的数值方法,利用了拉格朗日插值多项式的一般形式,其在实际应用中具有良好的稳定性和精确度。
在matlab中,我们可以通过编写函数来实现牛顿插值方法,并根据所给定的数据点计算出插值多项式。
2. 差分及等距节点插值公式差分及等距节点插值公式是牛顿插值的一种具体形式,它通过相邻节点的差分来递推计算插值多项式的系数,从而实现对给定数据点的插值。
在matlab中,我们可以编写代码来实现这一方法,通过对数据点的差分计算来得到插值多项式的系数,并最终得到插值结果。
3. matlab中的实现步骤在matlab中,实现牛顿差分及等距节点插值公式主要包括以下几个步骤:3.1 准备数据点:首先需要准备好给定的数据点,这些数据点将作为插值的依据。
3.2 计算差商:利用给定的数据点,我们可以计算出插值多项式的系数,即差商。
这一步骤可以通过递推计算来实现。
3.3 构建插值多项式:根据得到的插值多项式的系数,我们可以构建出完整的插值多项式。
3.4 计算插值结果:我们可以利用构建好的插值多项式来计算任意点的插值结果。
4. 个人观点和理解在我看来,牛顿差分及等距节点插值公式是一种非常实用和有效的插值方法,在实际工程和科学计算中都有着广泛的应用。
在matlab中,通过编写相应的代码,我们可以很方便地实现这一方法,并得到高质量的插值结果。
掌握牛顿插值及其在matlab中的实现方法对我们来说是非常重要的。
总结回顾本文从简到繁,由浅入深地探讨了matlab中牛顿差分及等距节点插值公式的实现方法。
matlab程序与数值实验
MATLAB程序与数值实验一、插值法(课本第二章)1、拉格朗日插值方法function s=lag(x,y,t)%拉格朗日插值方法,可以同时对多点插值,t可以为向量syms p;n=length(x);%读取x向量的维数s=0;for(k=1:n)la=y(k);%构造基函数for(j=1:k-1)la=la*(p-x(j))/(x(k)-x(j));end;for(j=k+1:n)la=la*(p-x(j))/(x(k)-x(j));end;s=s+la;simplify(s);endif(nargin==2)s=subs(s,'p','x');s=collect(s);%展开多项式s=vpa(s,6);elsem=length(t);for i=1:mtemp(i)=subs(s,'p',t(i));ends=temp;End%for example% x=[pi/4 pi/6 pi/3 pi/2];%y=[cos(pi/4) cos(pi/6) cos(pi/3) cos(pi/2)];%t=[-40*pi/180 40*pi/180 50*pi/180 70*pi/180 170*pi/180]; %yt=lag(x,y,t)2、牛顿插值法function s=niudun(x,y,t)%,可以同时对多点插值,即t可以为向量syms p;s=y(1);xishu=0;dxs=1;n=length(x);%读取x向量的维数%构造牛顿插值方法for (i=1:n-1)for(j=i+1:n)xishu(j)=(y(j)-y(i))/(x(j)-x(i));endtemp1(i)=xishu(i+1);dxs=dxs*(p-x(i));s=s+temp1(i)*dxs;y=xishu;endsimplify(s)if (nargin==2)s=subs(s,'p','x');s=collect(s);s=vpa(s,4);else%读取要插值点的向量长度%可以直接对多点插值机算m=length(t);for i=1:mtemp(i)=subs(s,'p',t(i));end%得到的是系列插值点的插值结果,即得到的是向量,赋值给ss=temp;end%for example%1、已知零阶Bessel函数f(x)在若干点处的函数值为:计算x在1.5处的近似值%x=[1.0 1.3 1.6 1.9 2.2];%y=[0.7651977 0.6200860 0.4554022 0.2818186 0.1103623];%yt=niudun(x,y,1.5)3、插值中的Runge现象syms xf=1/(1+x^2);x=-5:5;y=subs(f,x);chazhi=niudun(x,y);v=[-5,5,-0.5,2];ezplot(chazhi),axis(v),gridhold ont=-5:0.05:5;yt=subs(f,t);plot(t,yt,’:’)4、Hermite插值function f=Hermite(x,y,dy,t)%Hermite插值,x为插值节点,y为插值节点的函数值,dy为插值节点的一阶导数值,t为被插数据,可以为向量n=length(x);m=length(t);for k=1:mg(k)=0.0;for i=1:nla=1;lp=0.0;for j=1:nif(j~=i)la=la*(t(k)-x(j))/(x(i)-x(j));lp=lp+1/(x(i)-x(j));endendtemp1=1-2*(t(k)-x(i))*lp;temp2=y(i)*temp1*la^2;temp3=dy(i)*(t(k)-x(i))*la^2;g(k)=g(k)+temp2+temp3;endendf=g;%for example%syms x%y=x^2;%t=[1 3 -8 6-4];%yt=subs(y,t);%dy=subs('2*x',t)%x0=[-5.3 2.4 -4.2 -1.8 3.4];%z=Hermit(t,yt,dy,x0)5、三次样条插值三次样条插值方法可以选择MATLAB中内置函数spline。
数值分析实验报告-插值、三次样条
实验报告:牛顿差值多项式&三次样条问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数21()25f x x作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。
实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。
应用所编程序解决实际算例。
实验要求:1. 认真分析问题,深刻理解相关理论知识并能熟练应用; 2. 编写相关程序并进行实验; 3. 调试程序,得到最终结果; 4. 分析解释实验结果; 5. 按照要求完成实验报告。
实验原理:详见《数值分析 第5版》第二章相关内容。
实验内容:(1)牛顿插值多项式1.1 当n=10时:在Matlab 下编写代码完成计算和画图。
结果如下:代码:clear allclcx1=-1:0.2:1;y1=1./(1+25.*x1.^2);n=length(x1);f=y1(:);for j=2:nfor i=n:-1:jf(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));endendsyms F x p;F(1)=1;p(1)=y1(1);for i=2:nF(i)=F(i-1)*(x-x1(i-1));p(i)=f(i)*F(i);endsyms PP=sum(p);P10=vpa(expand(P),5);x0=-1:0.001:1;y0=subs(P,x,x0);y2=subs(1/(1+25*x^2),x,x0);plot(x0,y0,x0,y2)grid onxlabel('x')ylabel('y')P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36* x^4+2.0202e-14*x^3-16.855*x^2-6.6594e-16*x+1.0并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。
插值拟合MATLAB实现
3.3 插值与拟合的MATLAB实现简单的插值与拟合可以通过手工计算得出,但复杂的只能求助于计算机了。
3.3.1 线性插值在MATLAB 中,一维的线性插值可以用函数interpl 来实现。
函数interpl 的调用格式如下:yi = interpl ( x , y , xi ) ,其中yi 表示在插值向量xi 处的函数值,x 与y 是数据点。
这个函数还有如下两种形式:yi = interpl(y , xi),省略x,x 此时为l : N,其中N 为向量y 的长度。
yi = interpl(x , y , xi , method ) ,其中method 为指定的插值方法,可取以下凡种:nearest :最近插值。
linear :线性插值。
spline :三次样条插值。
cubic :三次插值。
注意:对于上述的所有的调用格式,都要求向量x 为单调。
例如:对以下数据点:( 2 * pi , 2 ) , ( 4 * pi , 3 ) , ( 6 * pi , 5 ) , ( 8 * pi , 7 ) , ( 10 * pi , 11 ) , ( 12 * pi , 13 ) , ( 14 * pi , 17) 进行插值,求x = pi , 6 的函数值。
>> x=linspace(0, 2 * pi, 8 );>> y=[2, 3, 5, 7, 11, 13, 17, 19 ];>> xl=[pi , 6 ];>> yl=interpl(x, y, xl)yl =90000 1836903.3.2 Lagrange 插值Lagrange 插值比较常用,是MATLAB 中相应的函数,但根据Lagrange 插值函数公式,可以用M 文件实现:Lagrange.mfunctions = Larange(x, y, x0 )% Lagrange 插值,x 与y 为已知的插值点及其函数值,x0 为需要求的插值点的值nx = length( x );ny = length( y );if nx ~=nywaming( ‘向量x 与y 的长度应该相同’)return;endm = length ( x0 ) ;%按照公式,对需要求的插值点向量x0 的元素进行计算for i = l: mt =0.0;for j = l : nxu = 1.0;for k = l : nxif k~=ju=j * ( x0( i )-x ( k ) ) / ( x( j )-( k ) ) ;endendt = t + u * y( j );ends( i ) = t ;endreturn例如:对(l , 2 ) , ( 2 , 4 ) , ( 3 , 6 ) , ( 4 , 8 ) , ( 5 , 10 ) 进行Lagrange 插值,求x = 23 , 3.7 的函数值。
计算方法大作业——三次样条插值
计算方法上机报告
此完成所有数据的输入。继续按 Enter 键会出现提示“选择封闭方程组的边界条件: 第 一类边界条件输入 1,第二类边界条件输入 2,第三类边界条件输入 3。 ”根据已知情况 选择相应的边界条件,若为自然三次样条插值,则选 1,并将插值区间两端点的二阶导 数值设置为 0。输入完成之后按 Enter 开始求解,程序运行结束后命令窗口会显示要求 的三次样条插值函数,同时会出现该插值函数以及插值节点的图像,便于直接观察。 2.3 算例及计算结果 (1) 《数值分析》课本第 137 页的例题 4.6.1,已知函数 y=f(x)的数值如下表,求它 的自然三次样条插值函数。 xi yi -3 7 -1 11 0 26 3 56 4 29
(2) 给定函数 f ( x)
3 x 1 1 x 0 0 x3 3 x 4
1 (1 x 1) 。取等距节点,构造牛顿插值多项式 N5(x) 1 25x 2 和 N10(x)及三次样条插值函数 S10(x)。分别将三种插值多项式与 f(x)的曲线画在同一个
N10 x
22757 10 5444 8 20216 6 17147 4 3725 2 x x x x x 1 103 11 53 139 221
将牛顿插值多项式 N5(x)和 N10(x)及三次样条插值函数 S10(x)分别与 f(x)的曲线画在 同一个坐标系上进行比较,如图 12。可以看出三次样条函数与原函数符合的非常好, 对于低次的牛顿插值多项式,与原函数的大致趋势相同,而高次的牛顿插值多项式由 于龙格现象的出现,与原函数之间相差比较大。
S ( xi ) S ( xi ), ( xi ) S ( xi ), S S ( x ) S ( x ), i i i 1, 2, , n 1
matlab插值法
MATLAB插值法引言MATLAB是一种高级编程语言和环境,特别适用于数值计算和数据可视化。
插值法是一种在给定有限的数据点的情况下,通过构造插值函数来估计其他数据点的方法。
在MATLAB中,有多种插值方法可供选择,例如拉格朗日插值、牛顿插值和样条插值等。
本文将详细介绍MATLAB中常用的插值方法及其应用。
一、拉格朗日插值法拉格朗日插值法是一种多项式插值方法,通过构造一个满足给定数据点要求的多项式函数,来估计其他数据点的函数值。
其基本思想是通过一个多项式函数对已知数据点进行拟合,以实现函数值的估计。
以下是使用MATLAB实现拉格朗日插值法的步骤:1.确定待插值的数据点集合,假设有n个数据点。
2.构造拉格朗日插值多项式。
拉格朗日插值多项式的表达式为:其中,为拉格朗日基函数,其表达式为:3.利用构造的拉格朗日插值多项式求解其他点的函数值。
二、牛顿插值法牛顿插值法是一种基于差商的插值方法,通过构造一个n次多项式函数来拟合已知数据点,并利用差商的性质来求解其他点的函数值。
使用MATLAB实现牛顿插值法的步骤如下:1.确定待插值的数据点集合,假设有n个数据点。
2.计算差商表。
差商表的计算公式为:3.构造牛顿插值多项式。
牛顿插值多项式的表达式为:4.利用构造的牛顿插值多项式求解其他点的函数值。
三、样条插值法样条插值法是一种通过多段低次多项式来逼近原始数据,以实现光滑插值的方法。
它在相邻数据点处保持一定的连续性,并通过边界条件来确定插值函数的特性。
以下是使用MATLAB实现样条插值法的步骤:1.确定待插值的数据点集合,假设有n个数据点。
2.根据数据点的个数确定样条插值的次数。
一般情况下,插值多项式的次数小于或等于n-1。
3.利用边界条件构造样条插值函数。
常用的边界条件有:自然边界、固定边界和周期边界。
4.利用MATLAB中的插值函数csape或interp1等进行样条插值。
5.利用样条插值函数求解其他点的函数值。
数值分析matlab方法插值法
其中,
n
【注】
x [a, b] w(x) (x x j ) j 0
(1)误差估计
Rn (x)
M n1 (n 1)!
w( x)
M n1
max
x( a ,b )
f
(n1) (x)
(2)余项与 x、M n1 节点的位置、个数 n 有关
(3)当 f (x)是 n 的多项式时Ln (x) f (x) n
M2 2!
(x
x0 )(x
x1 )
其中,
M2
max
x( x0 , x1 )
f
(x)
x
[
6
,
4
]
,所以
R1
(
5
24
)
sin
2!
4 (5
24
)( 5
6 24
)
4
0.0061
2)
抛物插值误差估计.因为
R2 (x)
M3 3!
(x
x0 )(x
x1)(x
x2 )
其中,
M3
max
x( x0 ,x2 )
f (x)
yiynewtonbackwardxyxicos035yi09394数值分析插值法55埃尔米特插值2n12n2数值分析插值法551埃尔米特插值多项式的存在唯一性2n1数值分析插值法数值分析插值法552埃尔米特插值余项553三次埃尔米特插值多项式maxsinxsin1数值分析插值法56561高次插值的病态性质0908原函数150706050405分段线性插值0302543214321055数值分析插值法562分段低次插值方法563分段低次插值余项090807060504030201090807060504030201543214321数值分析插值法57三次样条插值571三次样条插值572三弯矩法数值分析插值法573三次样条插值的误差估计与收敛性58插值运算的matlab函数581一维插值函数interp1yiinterp1xyximethod?linear?yiinterp1xyxilinear?1200135019
matlab中的牛顿插值
matlab中的牛顿插值在MATLAB中,你可以使用牛顿插值方法来生成一个多项式,用于逼近一组离散数据点。
牛顿插值多项式通常用于曲线拟合和数据插值的任务。
以下是在MATLAB中执行牛顿插值的步骤:1.准备数据:首先,准备你的离散数据点,包括x值和相应的y值。
这些数据点将用于生成插值多项式。
2.计算差商:使用牛顿插值的关键是计算差商(divided differences)。
差商用于构建插值多项式的系数。
在MATLAB中,你可以使用`divdif`函数来计算差商。
```matlabx=[x1,x2,x3,...];%x值y=[y1,y2,y3,...];%相应的y值coefficients=divdif(x,y);```3.构建插值多项式:一旦你计算出差商,你可以使用这些差商来构建牛顿插值多项式。
可以使用`poly2sym`函数将差商转化为多项式对象。
```matlabp=poly2sym(coefficients,x);```4.绘制插值曲线:你可以使用插值多项式对象`p`来绘制插值曲线,以查看如何逼近原始数据。
```matlabx_interp=linspace(min(x),max(x),100);%用于插值的新x值y_interp=subs(p,x_interp);%计算插值多项式的y值plot(x,y,'o',x_interp,y_interp);```这些步骤将帮助你在MATLAB中执行牛顿插值,以生成一个多项式,用于逼近给定的离散数据点。
这个插值多项式可以用于估算原始数据点之间的值,以获得更平滑的曲线。
MATLAB作业拉格朗日三阶样条插值函数牛顿插值
Lagrange插值M函数syms xx0=[0,1,2];y0=[1,2,3];n=length(x0);for i=1:na=1;for j=1:nif j~=ia=expand(a*(x-x0(j)));endendb=1;for k=1:nif k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:nL=L+y0(p)*A(p);endL>> LanguageL =x + 1三阶样条插值M函数function m=naspline(x,y,dy0,dyn,xx)n=length(x)-1;h=diff(x);lemda=h(2/n)./(h(1:n-1)+h(2:n));mu=1-lemda;g=3*(lemda.*diff(y(1:n))./h(1:n-1)+mu.*diff(y(2:n+1))./h(2:n)); g(1)=g(1)-lemda(1)*dy0;g(n-1)=g(n-1)-mu(n-1)*dyn;dy=nachase(lemda,2*ones(1:n-1),mu,g);m=[dy0;dy;dyn];if nargin>=5s=zeros(size(xx));for i=1:nif i==1,kk=find(xx<=x(2));elseif i==nkk=find(xx>x(n));elsekk=find(xx>x(i)&xx<=x(i+1));endxbar=(xx(kk)-x(i))/h(i);s(kk)=alpha0(xbar)*y(i)+alpha1(xbar)*y(i+1)+...h(i)*beta0(xbar)*m(i)+h(i)*beta1(xbar)*m(i+1);endm=s;endfunction x=nachase(a,b,c,d)n=length(a);for k=2:nb(k)=b(k)-a(k)/b(k-1)*c(k-1);d(k)=d(k)-a(k)/b(k-1)*d(k-1);endx(n)=d(n)/b(n);for k=n-1:-1:1x(k)=(d(k)-c(k)*x(k+1))/b(k);endx=x(:);function y=alpha0(x)y=2*x.^3-3*x.^2+1;function y=alpha1(x)y=-2*x.^3+3*x.^2;function y=beta0(x)y=x.^3-2*x.^2+x;function y=beta1(x)y=x.^3-x.^2;naspline([-1 0 1],[-1 0 1],0,-1)ans =1.7500-1.0000>> naspline([-1 0 1],[-1 0 1],0,-1,-1:0.25:1)ans =-1.0000 -0.9258 -0.7188 -0.4023 0 0.4492 0.8438 1.06641.0000ans =Columns 1 through 5-1.0000 -0.9258 -0.7188 -0.4023 0 Columns 6 through 90.4492 0.8438 1.0664 1.0000牛顿插值多项式function yi=Newton(x,y,xi)n=length(x);m=length(y);if n~=merror;return;end%计算均差表YY=zeros(n);Y(:,1)=y';for k=1:n-1for i=1:n-kif abs(x(i+k)-x(i))<epserror;return;endY(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));endend%计算牛顿插值公式yi=0;for i=1:nz=1;for k=1:i-1z=z*(xi-x(k));endyi=yi+Y(1,i)*z;endEnd>>format compact>> x=pi*[1/6 1/4 1/3];y=[0.5 0.7071 0.866];xi=2*pi/9;0.550.60.650.70.750.450.50.550.60.650.70.75>> yi=Newton(x,y,xi)yi =0.6434>>fplot(‘sin ’,[pi/6 pi/4 pi/3]);hold on;>>plot(x,y,’o ’xi,0.6434,’rv ’);hold off;牛顿迭代M 函数function x=nanewton(fname,dfname,x0,e,N) if nargin<5,N=500;endif nargin<4,e=1e-4;endx=x0;x0=x+2*e;k=0;while abs(x0-x)>e&k<N,k=k+1;x0=x;x=x0-feval(fname,x0)/feval(dfname,x0); disp(x)endif k==N,warning('已达迭代次数上限');end >> fun=inline('x^3-x-1');dfun=inline('3*x^2-1'); >> nanewton(fun,dfun,1.5,0.5e-3)1.34781.32521.3247ans =1.32470.550.60.650.70.750.450.50.550.60.650.70.75。
基于matlab的常见插值法及其应用
基于matlab的常见插值法及其应用郭小乐【摘要】本文就数值分析中几种常见的插值法:拉格朗日插值、牛顿插值、Hermite插值及三次样条插值,讨论其不同形式的表达式及误差,结合matlab给出具体实例,对比分析.此外还就三次样条插值的不同计算方法进行归纳、总结.【期刊名称】《赤峰学院学报(自然科学版)》【年(卷),期】2017(033)007【总页数】3页(P5-7)【关键词】拉格朗日插值;牛顿插值;Hermite插值;三次样条插值;matlab【作者】郭小乐【作者单位】宁夏大学数学统计学院,宁夏银川 750021【正文语种】中文【中图分类】O241.3在许多工程问题中,有时我们只能给出某一函数在一些离散点的值,给不出具体的函数表达式,或者函数的表达式过于复杂不利于计算,这时我们就需要构造这个函数的近似函数,数学上我们把这种方法称为插值[1].插值法作为函数逼近、数值微积分及微分方程数值解的基础,在当今社会被越来越多的学者所关注.尤其随着计算机的普及,很多学者将插值与matlab等软件结合,使得插值法得到了更广泛的应用.常用的插值法包括:拉格朗日 (Lagrange)插值、牛顿(Newton)插值、Hermite 插值、三次样条插值,本文就这四种插值法,结合matlab,从其公式的构造、余项出发,对不同的插值法通过数值实例进行对比研究.此外,还就具有良好收敛性的三次样条函数,归纳出不同的计算方法.由于代数多项式具有简单和一些良好的特性,如多项式是无穷光滑的,容易计算它的导数及积分.故本文选择代数多项式作为插值函数.下面依次就这几种插值法进行讨论.2.1 Lagrange插值所谓n次Lagrange插值即给定平面上的n+1个互不相同的插值点(xi,f(xi)),i=0,1,2,…,n,利用插值基函数构造唯一的一条次数不高于n次的插值多项式.2.1.1 n次Lagrange插值多项式形式及误差拉格朗日插值公式的优点是格式整齐和规范,在理论分析中有重要的价值.它的缺点是没有承袭性质,当需要增加插值节点时,需要重新计算所有的插值基函数,计算繁琐.2.2 Newton插值Newton插值是利用差商计算的,下面我们首先给出差商的概念.定义1[1]设x0,x1,…,xk互不相同,f(x)关于x0,x1,…,xk的k阶差商为2.2.1 n次Newton插值多项式的形式及误差牛顿插值具有拉格朗日插值没有的承袭性,当增加插值节点时,只需再计算一项即可得到相应的插值多项式.由插值多项式的唯一性可知二者是同一插值多项式的不同表达形式.2.3 Hermite插值常用Hermite插值描述如下[1]:对于f(x)具有一阶连续导数,以及插值点xi,i=0,1,…,n,xi互不相同,若有至多为2n+1次的多项式函数H2n+1(x)满足:则称H2n+1(x)为f(x)关于节点{xi}ni=0的Hermite插值多项式.2.3.1 Hermite插值多项式的形式及误差:2.4 三次样条插值在实际计算中,人们很少采用高次插值,其主要原因有两个:其一,由于受到所要通过的插值节点的约束,高次插值描绘的代数曲线是摆动的.即我们常说的Runge(龙格)现象;其二,从计算的舍入误差看,对于等距结点的差分形式,结点上函数值的微小变化可能导致高阶差分的很大变动.故在应用中主要采用的是分段低次插值.实践证明,用分段的低次插值多项式逼近被插函数比在全区间上用高次插值多项式效果好.一般来说,分段插值所描绘的曲线是不光滑的.为了能获得一条足够光滑的插值曲线,近年来人们采用了分段多项式光滑插值法,即著名的样条函数插值法.本文我们主要介绍具有良好的收敛性,具有二阶光滑性的三次样条插值.2.4.1 三次样条函数定义2[5]给定[a,b]上n+1个节点a=x0<x1<…<xn-1<xn=b以及这些点上的函数值f(xi)=yi(i=0,1,…,n).若函数s(x)满足:(1)s(xi)=yi,i=0,1,2,…,n;(2)在每个小区间[xi,xi+1]上是一个次数不超过三次的多项式;(3)s(x)、s'(x)、s"(x)在[a,b]上都连续.则称s(x)为函数f(x)关于节点x0,x1,…,xn的三次样条函数.2.4.2 三次样条插值的几种计算方法2.4.2.1 利用二阶导数为线性函数求解令s"(xj)=Mj,j=0,1,…,n.因为s(x)为分段三次多项式,故s"(x)在[xj,xj+1]上是线性函数.可表示为其中hj=xj+1-xj为了求出s(x)在[xj,xj+1]上的表达式,需要对上式积分两次,并利用s(xj)=yi及s(xj+1)=yj+1可求出积分常数.得三次样条函数表达式:再利用光滑连接条件s'(xj-0)=s'(xj+0),并对s(x)求导得为了确定唯一的Mj(j=0,1,…,N),补充三个边界条件:(1)假定s'(x0)=f'0,s'(xn)=f'n;(2)假定 s"(x0)=f"(x0),s"(xn)=f"(xn)直接得端点方程M0=f"0,Mn=f"n;(3)假定M0=MN=0,即为自然边界条件,可得M0=Mn,λnM1+μnMn-1+2Mn=dn;以上三个边界条件将其写成矩阵形式,得关于Mj(j=0,1,…,n)的三对角线性方程组,利用追赶法[2]求出唯一的Mj(j=0, 1,…,n),将其代入s(x)即可.2.4.2.2 利用特殊形式的埃尔米特插值公式求解若插值节点取为xk,xk+1,插值多项式为H3(x),则采用基函数法,令H3(x)=αk(x)yk+αk+1yk+1+βk(x)mk+βk+1(x)mk+1其中αk(x),αk+1(x),βk(x),βk+1(x)是关于插值节点 xk,xk+1的三次Hermite插值基函数.上式即为由特殊的埃尔米特插值公式推导的三次样条插值的计算方法之一.例设,x3=4.利用不同的插值法构造f(x)在[,4]上的插值多项式,使其满足P(xi)=f(xi) (i=0,1,2,3),P'(x0)=f'(x0).下图是利用matlab(2012b)编程软件绘制的上述条件下四种不同算法在[0.25,4]插值函数曲线图(a)及其相对误差曲线图(b),直观明了地展示不同插值算法的效果.从图a中可看出不同插值方法对原函数的逼近效果相差不大.但从图b中的不同插值法的相对误差大小可知,这四种插值方法中,Lagrange插值和Newton插值的效果是一样的,相对另外两种插值方法来说,这两种方法的逼近效果较差,其次是Hermite插值的逼近效果较好,而具有良好收敛性及二阶光滑性的三次样条插值来说,其误差最小,逼近效果最好.本文根据运用的插值条件的不同,对《数值分析》中常用的四种插值法进行归纳总结.通过具体的数值实例,结合matlab编程软件,通过图像直观明了地展示不同方法的逼近效果,还绘制了不同插值方法的相对误差曲线图,从误差的角度分析不同方法的效果.为不同领域的科研工作者提供理论基础.〔1〕张韵华,奚梅成,陈效群.数值计算方法与算法[M].北京:科学出版社,2006. 〔2〕李庆扬,王超能,易大义.数值分析(第五版)[M].北京:清华大学出版社,2008. 〔3〕徐利治,周蕴时,孙玉柏.逼近论[M].北京:国防工业出版社,1985.〔4〕吕晓亚,张莉.插值法在数值分析中的教学实践[J].唐山师范学院学报,2011,33(2):123-125.〔5〕张希娜,李亚红,郭中凯.关于三次样条插值的教学研究[J].长沙大学学报,2012,26(2):131-132.〔6〕张丽娟.三种插值方法的应用与比较[J].赤峰学院学报(自然科学版),2010,26(3):1-3.〔7〕林昌华,杨岩.拉格朗日插值法在工程设计及CAD中的应用[J].重庆理工大学学报(自然科学版),2013,27(12):34-37.。
matlab 拉格朗日插值法和牛顿插值法 -回复
matlab 拉格朗日插值法和牛顿插值法-回复Matlab 拉格朗日插值法和牛顿插值法引言:在数值分析中,插值法是一种通过已知数据点来估计介于这些数据点之间的未知数值的方法。
拉格朗日插值法和牛顿插值法是两种常用的插值方法,都有各自的优点和适用场景。
本文将详细介绍这两种方法的原理和实现方式,以及在Matlab 中如何使用它们来进行插值计算。
一、拉格朗日插值法1. 原理:拉格朗日插值法是使用一个N次的多项式来逼近未知函数。
给定一组数据点(x0, y0), (x1, y1), …, (xi, yi), …, (xn, yn),通过拉格朗日插值法可以得到一个多项式P(x),使得P(xi) = yi。
该多项式表示了数据点间的曲线关系,从而可以通过插值估算未知点的值。
2. 实现步骤:(1)创建一个N次多项式的拉格朗日插值函数;(2)计算每个插值点的权重系数,即拉格朗日插值函数的系数;(3)根据给定的数据点和权重系数,构建多项式;(4)通过多项式计算未知点的值。
3. Matlab 中的使用:在Matlab 中,可以使用"polyfit" 函数来实现拉格朗日插值法。
该函数可以拟合出一个多项式曲线,将给定的数据点映射到曲线上。
二、牛顿插值法1. 原理:牛顿插值法是通过构造一个差商表来逼近未知函数。
给定一组数据点(x0, y0), (x1, y1), …, (xi, yi), …, (xn, yn),通过牛顿插值法可以得到一个N次多项式P(x),满足P(xi) = yi。
该多项式的系数由差商构成,利用递归的方式逐层求解。
2. 实现步骤:(1)创建一个N次多项式的牛顿插值函数;(2)计算差商表,其中第一列为给定的数据点y值;(3)递归计算差商表中的其他列,直到得到最后的差商值;(4)根据差商表构建多项式;(5)通过多项式计算未知点的值。
3. Matlab 中的使用:在Matlab 中,可以使用"interp1" 函数结合牛顿插值法来进行插值计算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(){}
2
1
()(11),5,10,20:
1252
1()1,(0,1,2,,)()2,(0,1,2,,)()
()2
35,20:1100
(i i i
i n n k k k Newton f x x n x f x x i i n f x n
x
y i n Newton N x S x n x k y f x =
-≤≤=+=-+====-+
= 题目:插值多项式和三次样条插值多项式。
已知对作、计算函数在点处的值;、求插值数据点
的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (1,2,,99)4:()max ()()max
()n k n k n k n k n k n k k
k
N x S x k E N y N x E S y S x ==-=- 和;
、计算,;
解释你所得到的结果。
算法组织:
本题在算法上需要解决的问题主要是:求出第二问中的Newton 插值多项式
)(x N n 和三次样条插值多项式()n S x 。
如此,则第三、四问则迎刃而解。
计算两
种插值多项式的算法如下:
一、求Newton 插值多项式)(x N n ,算法组织如下:
Newton 插值多项式的表达式如下:
)())(()()(110010--⋅⋅⋅--+⋅⋅⋅+-+=n n n x x x x x x c x x c c x N
其中每一项的系数c i 的表达式如下:
1102110)
,,,(),,,(),,,(x x x x x f x x x f x x x f c i i i i i -⋅⋅⋅-⋅⋅⋅=
⋅⋅⋅=-
根据i c 以上公式,计算的步骤如下:
⎪⎪
⎪⎩⎪
⎪⎪
⎨⎧⋅⋅⋅+⋅⋅⋅⋅⋅⋅⋅
⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅----)
,,,,(1)
,,,(),,,,(),(,),,(2)(,),(),(11101111011010n n n n n n n n x x x x f n x x x f x x x f n x x f x x f x f x f x f 、计算、计算、计算、计算 二、求三次样条插值多项式)(x S n ,算法组织如下:
所谓三次样条插值多项式)(x S n 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:
2233
1111111()[()()]()()666[,]1,2,,.
i i i i i i i i i i i i i i i i i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,
,
因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:
11
111111116()6(,,)i i i i i i i i i i i i i i
i i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧
===-⎪++⎪⎨
--⎪=-=⎪+⎩
, 则i M 满足如下n-1个方程:
1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,
方程中有n+1个未知量,则令0M 和n M 分别为零,则由上面的方程组可得到
(11)i M i n ≤≤-的值,可得到整个区间上的三次样条插值多项式)(x S n 。
计算结果与结果分析
本题中各问的相应计算结果如下:
1、在n 取不同值时,x i 和对应的f(x i )(亦即下图中的y1)的值如下:
n =5时
:
n =10时:
n =20时:
2、Newton 插值多项式的表达式如下:
)())(()()(110010--⋅⋅⋅--+⋅⋅⋅+-+=n n n x x x x x x c x x c c x N
n =5时,其各项系数43210,,,,c c c c c 分别为:
n =10时,其各项系数10910,,,,c c c c ⋅⋅⋅⋅⋅⋅分别为:
n =20时,其各项系数20,1910,,,c c c c ⋅⋅⋅⋅⋅⋅分别为:
对于三次样条插值多项式)(x S n ,最重要的是求出其M 矩阵的值,其中M 0和
M n 都为0,M 1~M n-1则存储在矩阵M 中: n =5时的M 矩阵(M 1~M 4)的值为:
n =10时的M 矩阵(M 1~M 9)的值为:
n =20时的M 矩阵(M 1~M 19)的值为:
3、不论n 为多少,)(k x f 是不会改变的,其值存储在矩阵yy 中;当n 取不同值的时候,Newton 插值多项式()n k N x 和三次样条插值多项式()n k S x 的值是不同的,为了使整个结果直观,实验的最终结果还用图形进行的重现(本问中所得函数值
)(k x f 、牛顿插值()n k N x 和三次样条插值()n k S x 的结果分别存在数组变量yy 、Nn
和Sn 中)。
当n =5时,整个区间中的()n k N x 、()n k S x 以及)(k x f 的值如图所示:
图5-1 5n 时()n k N x 、()n k S x 与原始值)(k x f 的对比图
n =20时,整个区间中的()n k N x 和)(k x f 以及()n k S x 和)(k x f 的对比如下面两图所示:
图5-2 20n =时()n k N x 与原始值)(k x f 的对比图
图5-3 20n =时()n k S x 与原始值)(k x f 的对比图
通过对比以上三个图可得到如下结论:
1、随着n 的增大,使用Newton 插值多项式会出现龙格现象(对比图5-1和图5-2中的()n k N x )。
2、随着n 的增大,三次样条插值多项式)(x S n 将越来越接近被插值的函数(对比图5-1和图5-3中的()n k S x )。
4、根据第3问中得到的数据可以很容易的得到()n E N 和()n E S ,它们的值如下表所示:
当n =20时,使用Newton 插值多项式出现龙格现象,其最大误差达到58.2781,而相应的三次样条插值多项式)(x S n 的最大误差仅为0.00309。
可见,n 越大,Newton 插值越可能偏离被插值函数,而相应的三次样条插值则能更接近于被插值函数。
x=a:(b-a)/n:b; %插值节点 y=f(x);
plot(x,y,'b') %用蓝色线作被插函数图象 hold on
z=a:(b-a)/(2*n):b; n=length(x); for j=2:n for i=n:-1:j
y(i)=(y(i)-y(i-1))/(x(i)-x(i-j+1));%计算差商 end end u=y(n); m=length(z); for j=1:m for i=n-1:-1:1
u=y(i)+u*(z(j)-x(i)); %计算牛顿插值多项式的值 v(j)=u; end u=y(n); end
plot(z,v,'r') %用红色线作牛顿插值多项式图象
hold off
x=a:(b-a)/n:b; %插值节点
y=f(x);
plot(x,y,'b') %用蓝色线作被插函数图象
hold on
z=a:(b-a)/(2*n):b;
n=length(x);
for j=2:n
for i=n:-1:j
y(i)=(y(i)-y(i-1))/(x(i)-x(i-j+1));%计算差商
end
end
u=y(n);
m=length(z);
for j=1:m
for i=n-1:-1:1
u=y(i)+u*(z(j)-x(i)); %计算牛顿插值多项式的值
v(j)=u;
end
u=y(n);
end
plot(z,v,'r') %用红色线作牛顿插值多项式图象
hold off。