多项式插值的震荡现象81025

多项式插值的震荡现象81025
多项式插值的震荡现象81025

第二次作业

——多项式插值的振荡现象

实验 多项式插值的振荡现象

问题提出:考虑在一个固定的区间上用插值逼近一个函数。显然Lagrange 插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时,)(x L n 是否也更加靠近被逼进的函数。设区间[-1,1]上函数

22511)(x x f +=

实验内容:考虑区间[-1,1]的一个等距划分,分点为 ,,,2,1,0,21n i n

i x i ???=+

-= 则拉格郎日插值多项式为 )(2511)(02x l x x L i n

i i n ∑=+= 其中,n i x l i ,,2,1,0),(???=是n 次lagrange 插值基函数。

function t_charpt2

%输入插值结点

result=inputdlg({'请输入插值结点数N1:'},'charpt_2',1,{'3'})

N1=str2num(char(result));

result=inputdlg({'请输入插值结点数N2:'},'charpt_2',1,{'5'})

N2=str2num(char(result));

result=inputdlg({'请输入插值结点数N3:'},'charpt_2',1,{'10'})

N3=str2num(char(result));

result=inputdlg({'请输入插值结点数N4:'},'charpt_2',1,{'15'})

N4=str2num(char(result));

if (N1<1|N2<1|N3<1|N4<1) errordlg('结点输入错误!');return ;end

%插值结点小于1时错误

f=inline('1./(1+25*x.^2)');a=-1;b=1;

%标准函数f

x1=linspace(a,b,N1+1);

x2=linspace(a,b,N2+1);

x3=linspace(a,b,N3+1);

x4=linspace(a,b,N4+1);

y1=feval(f,x1);

y2=feval(f,x2);

y3=feval(f,x3);

y4=feval(f,x4);

x=a::b;inter1=Lagrange(x1,y1,x);

inter2=Lagrange(x2,y2,x);inter3=Lagrange(x3,y3,x);

inter4=Lagrange(x4,y4,x);

%inter1为插值结点为3,inter2为插值结点为5,inter3为插值结点为10,inter4为插值结点为15 fplot(f,[a,b],'-');

%画标准函数f的图形

hold on;

plot(x,inter1,'--');

plot(x,inter2,'*');

plot(x,inter3,'-.');

plot(x,inter4,':');

%画插值逼近函数

legend('f','inter1','inter2','inter3','inter4')

xlabel('x');ylabel('y=f(x) o and y=Ln(x)--');

%----------------------------------------------------------------

function y=Lagrange(x0,y0,x)

n=length(x0);m=length(x);

for i=1:m

z=x(i);

s=;

for k=1:n

p=;

for j=1:n

if(j~=k)

p=p*(z-x0(j))/(x0(k)-x0(j));

end

end

s=s+p*y0(k);

end

y(i)=s;

end

图1、函数

22511)(x x f +=的拉格朗日插值多项式

结果分析: 多项式插值逼近结果如图所示,inter1为插值结点为3,inter2为插值结点为5,inter3为插值结点为10,inter4为插值结点为15。当结点数由3个结点增加为5个结点时,函数图形越接近,当插值结点增加到10时,曲线光滑,函数逼近效果在曲线的中间部分(,)比较好,但是由上图在两个端点处x=-1和x=1附近时会出现在与原函数f(x)偏差会很大(龙格现象)。可以看出,适当提高插值多项式次数,可以提高逼近的精度,但是太高反而会产生不良的现象。 由函数4

1)(x x x h +=和x x g arctan )(=的拉格郎日插值多项式的逼近结果可以得出相同的结论。

图2、函数41)(x

x x h +=

的拉格郎日插值多项式

图3、函数x x g arctan )(=拉格郎日插值多项式

由上图函数41)(x

x x h +=的拉格郎日插值多项式和函数x x g arctan )(=拉格郎日插值多式 的拟合图形可以看出,采用插值多项式时,适当增加插值结点可以提高拟合的精度,但是当插值结点过于大时都会出现龙格现象。

数值分析实验2(wangwei)

实验2.1(多项式插值的振荡现象) 问题提出:考虑在一个固定的区间上用插值逼近一个函数。显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时,()n L x 是否也更加靠近被逼近的函数,龙格给出的一个例子是极著名并富有启发性的,设区间[-1,1]上函数 2 1 ()125f x x = + 实验内容:考虑区间[-1,1]的一个等距划分,分点为 21,0,1,2,...,i i x i n n =-+= 则拉格朗日插值多项式为 201 ()()125n n i i i L x l x x == +∑ 其中的(),0,1,2,...,i l x i n =是n 次拉格朗日插值基函数。 实验要求: (1)选择不断增大的分点数目2,3...,n =画出原函数()f x 及插值多项式函数()n L x 在 [-1,1]上的图像,比较并分析实验结果。 (2)选择其他的函数,例如定义在区间[-5,5]上的函数 4 (),()arctan 1x h x g x x x = =+ 重复上述的实验看其结果如何。 (3)区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,...,1222(1)k a b b a k x k n n π?? +--= +=+ ?+?? 以121,,...,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果。 程序清单: 1. 被逼近函数的函数文件func1.m function y=func1(x,c) %直接用被逼近函数计算函数值,c 用来选择函数 if c==1; y=1./(1+25*x.^2); end; if c==2; y=x./(1+x.^4); end; if c==3; y=atan(x);

插值法和拟合实验报告(数值计算)

插值法和拟合实验报告 一、 实验目的 1.通过进行不同类型的插值,比较各种插值的效果,明确各种插值的优越性; 2.通过比较不同次数的多项式拟合效果,了解多项式拟合的原理; 3.利用matlab 编程,学会matlab 命令; 4.掌握拉格朗日插值法; 5.掌握多项式拟合的特点和方法。 二、 实验题目 1.、插值法实验 将区间[-5,5]10等分,对下列函数分别计算插值节点 k x 的值,进行不同类型 的插值,作出插值函数的图形并与)(x f y =的图形进行比较: ;11)(2x x f += ;a r c t a n )(x x f = .1)(42 x x x f += (1) 做拉格朗日插值; (2) 做分段线性插值; (3) 做三次样条插值. 2、拟合实验 给定数据点如下表所示: 分别对上述数据作三次多项式和五次多项式拟合,并求平方误差,作出离散函数 ),(i i y x 和拟合函数的图形。 三、 实验原理 1.、插值法实验

∏∑∏∏∏∑∑≠==≠=≠=≠=+-==--= =-= ==-=-=----==++==j i j j i i i i i n i i n n j i j j n j i j j i i n j i j j n i i i n i i n n n o i n i i n x x x x x y x l x L x x c n i x x c x x x c x x x x x x x x c y x l x L y x l y x l y x l x L ,00 ,0,0,01100 00 )(l )()() (1 ,1,0, 1)()(l ) ()())(()()()()()()()(, 故, 得 再由,设 2、拟合实验

三次样条插值、拉格朗日插值、herminte插值

三次样条插值: function s=spline(x0,y0,y2l,y2n,x) n=length(x0); km=length(x); a(1)=-0.5; b(1)=3*(y0(2)-y0(1))/(2*(x0(2)-x0(1))); for j=1:n-1 h(j)=x0(j+1)-x0(j); end for j=2:n-1 alpha(j)=h(j-1)/(h(j-1)+h(j)); beta(j)=3*((1-alpha(j))*y0(j)-y(j-1)/h(j-1)+alpha(j)*(y0(j+1)-y0(j))/h(j)); a(j)=-alpha(j)/(2+(1-alpha(j))*a(j-1)); b(j)=(beta(j)-(1-alpha(j))*b(j-1))/(2+(1-alpha(j))*a(j-1)); end m(n)=(3*(y0(n)-y0(n-1))/h(n-1)+y2n*h(n-1)/2-b(n-1))/(2+a(n-1)); for j=(n-1):-1:1 m(j)=a(j)*m(j+1)+b(j); end for k=1:km for j=1:(n-1) if ((x(k)>x0(j))&(x(k)

数值分析拉格朗日插值法上机实验报告

课题一:拉格朗日插值法 1.实验目的 1.学习和掌握拉格朗日插值多项式。 2.运用拉格朗日插值多项式进行计算。 2.实验过程 作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)二、算法步骤 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标; 程序如下: #include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉格朗日

插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项*/ a=(float*)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:");

scanf("%d",&n); if(n<=0) { printf("Error! The value of n must in (0,20)."); getch();return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]); } printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); } 举例如下:已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值。

Hermite插值方法

数值分析实验报告五 一、实验目的 理解Hermite插值方法,掌握Hermite插值算法设计 二、实验内容 使用vc++编程,实现该方法,即Hermite插值法 三、实验步骤 #include double herm(double x0,double x1,double y0,double y1,double h0,double g0,double g1,double x) { d oubl e alp0,alp1,bta0,bta1,t;double s; t=h0*h0; a lp0=(x-x1)*(x-x1)*(h0+2*(x-x0))/t/h0; a lp1=(x-x0)*(x-x0)*(h0-2*(x-x1))/t/h0; b ta0=(x-x0)*(x-x1)*(x-x1)/t; b ta1=(x-x1)*(x-x0)*(x-x0)/t; s=y0*alp0+y1*alp1+g0*bta0+g1*bta1; r eturn(s); } void main() { int n=7;double p0;double pn; double aa[8],bb[8],s=0; double xx[8]={0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9}; double yy[8]={0.4794,0.6442,0.7833,0.8912,0.9636,0.9975,0.9917,0.9463}; double g[8]; int i; double a[8],c[8],h[8]; cout<<"Please input p0 and pn"<>p0;cin>>pn; for(i=0;i<=n-1;i++) { h[i]=xx[i+1]-xx[i]; c out<<"h["<

数值分析实验题

实验2.1 多项式插值的振荡现象 问题提出:考虑在一个固定的区间上用插值逼近一个函数。显然Lagrange 插值中的使用节点越多,插值多项式的次数就越高.我们自然就关心插值多项式的次数增加时,()n L x 是否也更加靠近被逼近的函数.Runge 给出的一个例子就是极著名并富有启发性的.设区间[-1,1]上的函数 ()2 1 125f x x = +. 实验内容:考虑区间[-1,1]的一个等距划分,分点为 21,0,1,2,,,i i x i n n =-+ = 则拉格朗日插值多项式为 ()()201 125n n i i i L x l x x ==+∑ . 其中,(),0,1,2,,i l x i n =是n 次Lagrange 插值基函数. 实验要求: (1) 选择不断增大的分点数目2,3, n =,画出原函数()f x 及插值多项式()n L x 在 [-1,1]上的图像,并比较分析实验结果. (2) 选择其他的函数,例如定义在区间[-5,5]上的函数 ()()4 ,arctan ,1x h x g x x x = =+ 重复上面的实验看结果如何. 解:matlab 程序代码

实验结果: f(x)结果如下

h(x)结果如下 g(x)结果如下

结果分析:适当提高插值多项式的次数,可以提高逼近的精度,但次数太高反而会产生不良效果。主要是次数越高,计算工作量大,积累的误差也大;在整个区间上做高次多项式,但局部插值节点处的值有微笑偏差时,可能会影响整个区间上函数值的很大变化,使计算很不稳定。从上图可以看出,高次插值不准确。 实验3.1 编制以函数{} n k k x =为基的多项式最小拟合程序,并对表3.11中的数据作3次多项式最小二 乘拟合. 表3.11 取权数1i w ≡,求拟合曲线0 n k k k x ?α * *== ∑中的参数{}k α、平方误差2δ,并作离散数据 {},i i x y 的拟合函数()y x ?*=的图形. 解:matlab 程序代码 实验结果:

插值法实验报告

实验二插值法 1、实验目的: 1、掌握直接利用拉格郎日插值多项式计算函数在已知点的函数值;观察拉格郎日插值的龙格现象。 2、了解Hermite插值法、三次样条插值法原理,结合计算公式,确定函数值。 2、实验要求: 1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法; 2)编写上机实验程序,作好上机前的准备工作; 3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果); 4)分析和解释计算结果; 5)按照要求书写实验报告; 3、实验内容: 1) 用拉格郎日插值公式确定函数值;对函数f(x)进行拉格郎日插值,并对f(x)与插值多项式的曲线作比较。 已知函数表:(0.56160,0.82741)、(0.56280,0.82659)、(0.56401,0.82577)、(0.56521,0.82495)用三次拉格朗日插值多项式求x=0.5635时函数近似值。 2) 求满足插值条件的插值多项式及余项 1) 4、题目:插值法 5、原理: 拉格郎日插值原理: n次拉格朗日插值多项式为:L n (x)=y l (x)+y 1 l 1 (x)+y 2 l 2 (x)+…+y n l n (x)

n=1时,称为线性插值, L 1(x)=y (x-x 1 )/(x -x 1 )+y 1 (x-x )/(x 1 -x )=y +(y 1 -x )(x-x )/(x 1 -x ) n=2时,称为二次插值或抛物线插值, L 2(x)=y (x-x 1 )(x-x 2 )/(x -x 1 )/(x -x 2 )+y 1 (x-x )(x-x 2 )/(x 1 -x )/(x 1 -x 2 )+y 2 (x -x 0)(x-x 1 )/(x 2 -x )/(x 2 -x 1 ) n=i时, Li= (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n) (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n) 6、设计思想: 拉格朗日插值法是根据n + 1个点x0, x1, ... x n(x0 < x1 < ... x n)的函数值f (x0), f (x1) , ... , f (x n)推出n次多項式p(x),然后n次多項式p (x)求出任意的点x对应的函数值f (x)的算法。 7、对应程序: 1 ) 三次拉格朗日插值多项式求x=0.5635时函数近似值 #include"stdio.h" #define n 5 void main() { int i,j; float x[n],y[n]; float x1; float a=1; float b=1; float lx=0; printf("\n请输入想要求解的X:\n x="); scanf("%f",&x1); printf("请输入所有点的横纵坐标:\n"); for(i=1;i

数值分析实验报告-插值、三次样条Word版

实验报告:牛顿差值多项式&三次样条 问题:在区间[-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 all clc x1=-1:0.2:1; y1=1./(1+25.*x1.^2); n=length(x1); f=y1(:); for j=2:n for i=n:-1:j f(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1)); end end syms F x p ; F(1)=1;p(1)=y1(1); for i=2:n F(i)=F(i-1)*(x-x1(i-1)); p(i)=f(i)*F(i); end

syms P P=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 on xlabel('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.0 202e-14*x^3-16.855*x^2-6.6594e-16*x+1.0 并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。 Fig.1 牛顿插值多项式(n=10)函数和原函数图形 从图形中我们可以明显的观察出插值函数在两端点处发生了剧烈的波动,产生了极大的误差,即龙格现象,当n=20时,这一现象将更加明显。 1.2 当n=20时: 对n=10的代码进行修改就可以得到n=20时的代码。将“x1=-1:0.2:1;”改为“x1=-1:0.1:1;”即可。运行程序,我们得到n=20时的牛顿插值多项式,结果为:P20(x)= 260188.0*x^20 - 1.0121e6*x^18 + 2.6193e-12*x^17 + 1.6392e6*x^16 + 2.248e-11*x^15 - 1.4429e6*x^14 - 4.6331e-11*x^13 + 757299.0*x^12 + 1.7687e-11*x^11 - 245255.0*x^10 + 2.1019e-11*x^9 + 49318.0*x^8 + 3.5903e-12*x^7 - 6119.2*x^6 - 1.5935e-12*x^5 + 470.85*x^4 + 1.3597e-14*x^3 - 24.143*x^2 - 1.738e-14*x + 1.0 同样的,这里得到了该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.2)。

插值法数值上机实验报告

插值法数值上机实验报告 实验题目: 利用下列条件做插值逼近,并与R (x) 的图像比较 考虑函数:R x y=1 1+x2 (1)用等距节点X i=?5+i,i=0,1,...,10.给出它的10次Newton插值多项式的图像; π),i=0,1,...,20.给出它的20次Lagrange插值多项式(2)用节点X i=5cos(2i+1 42 的图像; (3)用等距节点X i=?5+i,i=0,1,...,10.给出它的分段线性插值函数的图像;(4)用等距节点X i=?5+i,i=0,1,...,10.给出它的三次自然样条插值函数的图像; (5)用等距节点X i=?5+i,i=0,1,...,10.给出它的分段三次Hermite插值函数的图像; 实验图像结果:

实验结果分析: 1.为了验证Range现象,我还特意做了10次牛顿插值多项式和20次牛顿插值多项式的对比图像,结果如下图(图对称,只截取一半) 可以看出,Range现象在高次时变得更加明显。这也是由于高次多项式在端点处的最值随次数的变大很明显。可以料定高次多项式在两侧端点处剧烈震荡,在更小的间距内急剧上升然后下降,Range现象非常明显。

2.分析实验(2)的结果,我们会惊讶地发现,由于取21个点逼近,原本预料的Range现象会很明显,但这里却和f(x)拟合的很好。(即下图中Lagrange p(x)的图像)。可是上图中取均匀节点的20次牛顿多项式逼近的效果在端点处却很差。料想是由于节点X i=5cos2i+1 42 π ,i=0,1,...,20 取得很好。由书上第五章的 知识,对于函数y=1 1+x ,y 1 2对应的cherbyshev多项式的根恰好为X i= 5cos2i+1 42 π ,i=0,1,...,20 。由于所学限制,未能深入分析。 (3)比较三次样条插值图像和Hermit插值图像对原函数图像的逼近情形。见下图:

多项式插值的震荡现象

数值分析课程设计多项式插值的震荡现象 指导教师 学院名称 专业名称 提交日期

一、问题的提出 在一个固定区间上用插值逼近一个函数。显然,拉格朗日插值中使用的节点越多,插值多项式的次数就越高。而插值多项式增加时,L n (x)是否也更加靠近被逼近的函数。下面就这个问题展开实验。 二、实验内容 1.设区间[-1,1]上的函数f x=1 1+25x ,对其等距划分,写出其拉格朗日插值 多项式为L n x=1 1+25x i2a i(x) n i=0 。通过不断增加分点数n=2,3,…。 并:I.画出原函数f(x)及插值多项式函数L n (x)在[-1,1]上的图像; II.给出每一次逼近的最大误差; III.比较并分析实验结果。 2.选择其他函数,如定义在区间[-5,5]上的函数 x=x 1+x 和g x=arctan x,重复上述I、II、III三个步骤看其结果如何。 3.区间[a,b]上切比雪夫点的定义为x k=a+b 2 + b?a 2cos?(2k?1π 2n+1 ),k=1,2,…,n+1。以x1,x2,…,x n+1为插值节点构造上述各函 数的Lagrange插值多项式,比较其结果。 三、实验结果及分析 1.I.画出函数f(x)及其插值多项式函数L n (x)在[-1,1]上的图像,如下图,

(程序代码1.1.1) II.由于fminbnd函数的不可靠性,先通过编程绘出每次逼近在定义区间上的误差如下图,(程序代码1.1.2) 观察图像可知每次逼近的最大误差在哪个区间,再通过编程缩小区间,得到

III.比较并分析实验结果: (1)在同一个坐标系中绘制f(x)及5次、7次等多次插值后的图像。从图中可以很清楚的看出,在[-0.4,0.4]的区间内,随着插值次数的增加插值图像越来越逼近f(x),然而当|x|>0.8以后,插值曲线围绕原函数曲线发生剧烈震荡现象,尤其是插值次数越多时震荡越强烈。 (2)在同一个坐标系中绘制每次插值后的误差图像。从图中可以看出较大误差主要出现在中心及两段,而就每次逼近的最大误差分析。可以观察到: 1.当插值次数在一定区间上增多时,其最大误差变小,即吻合度增高(5次 插值最大误差是0.437,7次插值最大误差是0.2474);2.而超过一定区间,随着插值次数增加其最大误差越大,而且其最大误差x的取值越趋向于两端,于是发生了震荡现象。 2.h(x): (x)在[-1,1]上的图像,如下图(程 I.画出函数h(x)及其插值多项式函数L n 序代码2.1.1):

数值分析第二章复习与思考题

第二章复习与思考题 1.什么是拉格朗日插值基函数?它们是如何构造的?有何重要性质? 答:若n 次多项式()),,1,0(n j x l j =在1+n 个节点n x x x <<< 10上满足条件 (),,,1,0,, ,0, ,1n k j j k j k x l k j =?? ?≠== 则称这1+n 个n 次多项式()()()x l x l x l n ,,,10 为节点n x x x ,,,10 上的n 次拉格朗日插值基函数. 以()x l k 为例,由()x l k 所满足的条件以及()x l k 为n 次多项式,可设 ()()()()()n k k k x x x x x x x x A x l ----=+- 110, 其中A 为常数,利用()1=k k x l 得 ()()()()n k k k k k k x x x x x x x x A ----=+- 1101, 故 ()()()() n k k k k k k x x x x x x x x A ----= +- 1101 , 即 ()()()()()()()()∏ ≠=+-+---=--------=n k j j j k j n k k k k k k n k k k x x x x x x x x x x x x x x x x x x x x x l 0110110)( . 对于()),,1,0(n i x l i =,有 ()n k x x l x n i k i k i ,,1,00 ==∑=,特别当0=k 时,有 ()∑==n i i x l 0 1. 2.什么是牛顿基函数?它与单项式基{ }n x x ,,,1 有何不同? 答:称()()()(){ }10100,,,,1------n x x x x x x x x x x 为节点n x x x ,,,10 上的牛顿基函数,利用牛顿基函数,节点n x x x ,,,10 上的n 次牛顿插值多项式()x P n 可以表示为 ()()()()10010---++-+=n n n x x x x a x x a a x P 其中[]n k x x x f a k k ,,1,0,,,,10 ==.与拉格朗日插值多项式不同,牛顿插值基函数在增加节点时可以通过递推逐步得到高次的插值多项式,例如 ()()()()k k k k x x x x a x P x P --+=++ 011,

用多项式模型进行数据拟合实验报告(附代码)

实验题目: 用多项式模型进行数据拟合实验 1 实验目的 本实验使用多项式模型对数据进行拟合,目的在于: (1)掌握数据拟合的基本原理,学会使用数学的方法来判定数据拟合的情况; (2)掌握最小二乘法的基本原理及计算方法; (3)熟悉使用matlab 进行算法的实现。 2 实验步骤 2.1 算法原理 所谓拟合是指寻找一条平滑的曲线,最不失真地去表现测量数据。反过来说,对测量 的实验数据,要对其进行公式化处理,用计算方法构造函数来近似表达数据的函数关系。由于函数构造方法的不同,有许多的逼近方法,工程中常用最小平方逼近(最小二乘法理论)来实现曲线的拟合。 最小二乘拟合利用已知的数据得出一条直线或曲线,使之在坐标系上与已知数据之间的距离的平方和最小。模型主要有:1.直线型2.多项式型3.分数函数型4.指数函数型5.对数线性型6.高斯函数型等,根据应用情况,选用不同的拟合模型。其中多项式型拟合模型应用比较广泛。 给定一组测量数据()i i y x ,,其中m i ,,3,2,1,0Λ=,共m+1个数据点,取多项式P (x ),使得 min )]([020 2=-=∑∑==m i i i m i i y x p r ,则称函数P (x )为拟合函数或最小二乘解,此时,令 ∑==n k k k n x a x p 0 )(,使得min ])([02 002=??? ? ??-=-=∑∑∑===m i n k i k i k m i i i n y x a y x p I ,其中 n a a a a ,,,,210Λ为待求的未知数,n 为多项式的最高次幂,由此该问题化为求),,,(210n a a a a I I Λ=的极值问题。 由多元函数求极值的必要条件:0)(200 =-=??∑∑==m i j i n k i k i k i x y x a a I ,其中n j ,,2,1,0Λ= 得到: ∑∑∑===+=n k m i i j i k m i k j i y x a x )(,其中n j ,,2,1,0Λ=,这是一个关于n a a a a ,,,,210Λ的线 性方程组,用矩阵表示如下所示:

数值分析实验(2.3.5章)

试验2.1 多项式插值的振荡现象 实验目的: 观察多项式插值的振荡现象,了解多项式的次数与逼近效果的关系。 实验内容: 问题提出:考虑在一个固定的区间上用插值逼近一个函数。显然Lagrange 插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时,Ln(x)是否也更加靠近被逼近的函数。Runge 给出的一个例子是极著名并富有启发性的。设区间[-1,1]上的函数 2 25x 11)x (+= f , 考虑区间[-1,1]上的一个等距划分,分点为 n 2i 1x i + -=,i=0,1,2,…,n 则拉格朗日插值多项式为: )x (l 25x 11 )x (Ln i n i 2 i ∑=+= , 其中的)x (l i ,i=0,1,2,…,n 是n 次拉格朗日插值基函数。 实验要求: 1、选择不断增大的分点数目n=2,3,………,画出原函数)x (f 及插值多项式函数)x (Ln 在[-1,1]上的图像,比较并分析试验结果。 2、选择其他的函数,例如定义在区间[-5,5]上的函数 4 ()1x h x x = +,()arctan g x x =, 重复上述的实验看其结果如何。 实验步骤及结果分析: 1、选择不断增大的分点数目n=2,3,4,5,6,7,8,9,10做)x (f 的拉格朗日插值多项式)x (Ln ,并与原函数值做比较,如下图所示。

观察图像可知: n=2,3时插值函数和原函数差别很大,n=4,5,6时插值函数与原函数的逼近程度相对较好,继续增加插值次数n ,插值函数在插值区域的中间部分收敛,而在

这区间外是发散的,此外,n=7,9时在插值中间区域逼近效果不好。 因此,适当提高插值多项式次数,可以提高逼近的精度,但是次数太高反而产生相反的效果。 2、选择其他的函数进行插值。 原函数4 ()1x h x x = +,区间[-5,5],插值结果如下图: 观察图像可知: 低次插值时,插值效果不好。 n=7,8,9,10时,在区间[-2,2],插值函数与原函数逼近程度好,但在区间外插值

实验报告五 插值

浙江大学城市学院实验报告 课程名称 科学计算 实验项目名称 函数的数值逼近-插值 实验成绩 指导老师(签名 ) 日期 一. 实验目的和要求 1. 掌握用Matlab 计算Lagrange 、分段线性、三次样条三种插值的方法,改变节点的数目, 对三种插值结果进行初步分析。 2. 通过实例学习如何用插值方法解决实际问题。 二. 实验内容和原理 1) 编程题2-1要求写出Matlab 源程序(m 文件),并对每一行语句加上适当的注释语句; 2) 分析应用题2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab 源程序、运行结果和结 果的解释、算法的分析等写在实验报告上。 2-1 编程 编写Lagrange 插值函数的Matlab 程序,其中n 个插值节点以数组0x ,0y 输入,m 个待求点的自变量以数组x 输入。输出数组y 为m 个待求点的函数值。 Lagrange 插值:=lagr(0,0,)y x y x Step 1 输入插值节点数组0x ,0y 和待求节点x ; Step 2 数组0x 的长度为n ,x 的长度为m ; Step 3 对1,2, ,i n =,构造第i 个插值基函数 111111(0)(0)(0)(0) ()(00)(00)(00)(00) i i n i i i i i i i n x x x x x x x x l x x x x x x x x x -+-+----= ---- 并计算在m 个待求点上的基函数值。 Step 4 根据公式1 0()n i i i y y l x == ∑分别计算m 个待求点上的函数值。 并对程序的每一行语句加上适当的注释语句。

三次样条插值方法的应用

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

三次样条插值方法的应用 一、问题背景 分段低次插值函数往往具有很好的收敛性,计算过程简单,稳定性好,并且易于在在电子计算机上实现,但其光滑性较差,对于像高速飞机的机翼形线船体放样等型值线往往要求具有二阶光滑度,即有二阶连续导数,早期工程师制图时,把富有弹性的细长木条(即所谓的样条)用压铁固定在样点上,在其他地方让他自由弯曲,然后沿木条画下曲线,称为样条曲线。样条曲线实际上是由分段三次曲线并接而成,在连接点即样点上要求二阶导数连续,从数学上加以概括就得到数学样条这一概念。下面我们讨论最常用的三次样条函数及其应用。 二、数学模型 样条函数可以给出光滑的插值曲线(面),因此在数值逼近、常微分方程和偏微分方程的数值解及科学和工程的计算中起着重要的作用。 设区间[]b ,a 上给定有关划分b x x n =<<<= 10x a ,S 为[]b ,a 上满足下面条件的函数。 ● )(b a C S ,2∈; ● S 在每个子区间[]1,+i i x x 上是三次多项式。 则称S 为关于划分的三次样条函数。常用的三次样条函数的边界条件有三种类型: ● Ⅰ型 ()()n n n f x S f x S ''0'',==。 ● Ⅱ型 ()()n n n f x S f x S ''''0'''',==,其特殊情况为()()0''''==n n x S x S 。 ● Ⅲ型 ()() 3,2,1,0,0==j x S x S n j j ,此条件称为周期样条函数。 鉴于Ⅱ型三次样条插值函数在实际应用中的重要地位,在此主要对它进行详细介绍。 三、算法及流程 按照传统的编程方法,可将公式直接转换为MATLAB 可是别的语言即可;另一种是运用矩阵运算,发挥MATLAB 在矩阵运算上的优势。两种方法都可以方便地得到结果。方法二更直观,但计算系数时要特别注意。这里计算的是方法一的程序,采用的是Ⅱ型边界条件,取名为spline2.m 。 Matlab 代码如下: function s=spline2(x0,y0,y21,y2n,x) %s=spline2(x0,y0,y21,y2n,x) %x0,y0 are existed points,x are insert points,y21,y2n are the second

数值分析实验报告-插值、三次样条(教育教学)

实验报告:牛顿差值多项式&三次样条 问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数2 1()25f x x 作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。 实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。应用所编程序解决实际算例。 实验要求: 1. 认真分析问题,深刻理解相关理论知识并能熟练应用; 2. 编写相关程序并进行实验; 3. 调试程序,得到最终结果; 4. 分析解释实验结果; 5. 按照要求完成实验报告。 实验原理: 详见《数值分析 第5版》第二章相关内容。 实验内容: (1)牛顿插值多项式 1.1 当n=10时: 在Matlab 下编写代码完成计算和画图。结果如下: 代码: clear all clc x1=-1:0.2:1; y1=1./(1+25.*x1.^2); n=length(x1); f=y1(:); for j=2:n for i=n:-1:j f(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1)); end end syms F x p ; F(1)=1;p(1)=y1(1); for i=2:n F(i)=F(i-1)*(x-x1(i-1)); p(i)=f(i)*F(i);

end syms P P=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 on xlabel('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-1 4*x^3-16.855*x^2-6.6594e-16*x+1.0 并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。 Fig.1 牛顿插值多项式(n=10)函数和原函数图形 从图形中我们可以明显的观察出插值函数在两端点处发生了剧烈的波动,产生了极大的误差,即龙格现象,当n=20时,这一现象将更加明显。 1.2 当n=20时: 对n=10的代码进行修改就可以得到n=20时的代码。将“x1=-1:0.2:1;”改为“x1=-1:0.1:1;”即可。运行程序,我们得到n=20时的牛顿插值多项式,结果为:P20(x)= 260188.0*x^20 - 1.0121e6*x^18 + 2.6193e-12*x^17 + 1.6392e6*x^16 + 2.248e-11*x^15 - 1.4429e6*x^14 - 4.6331e-11*x^13 + 757299.0*x^12 + 1.7687e-11*x^11 - 245255.0*x^10 + 2.1019e-11*x^9 + 49318.0*x^8 + 3.5903e-12*x^7 - 6119.2*x^6 - 1.5935e-12*x^5 + 470.85*x^4 + 1.3597e-14*x^3 - 24.143*x^2 - 1.738e-14*x + 1.0 同样的,这里得到了该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.2)。

实习:Matlab作业hermite插值

题目:利用Matlab实现数据的Hermite插值和分段三次Hermite插值 小组成员:王晓波(38) 蔡明宇(20) 一、程序实现意义: 一般的,从各种试验得来的数据总有一定的数量,而利用插值技术能够从有限的数据中获取整体的状态。而Hermite插值不仅保证了插值函数与原函数在给定数据点处得拟合,同时保证了在相应点处导数的相同,从而在很大程度上保证了曲线的“光滑性”。因此,通过Matlab实现Hermite插值具有很普遍的意义。 二、实现过程: 1、Hermite插值 由于并不是所有的Matlab版本都提供现有的Hermite插值函数包,故我们首先编写了实现给定五个观测点的Hermite插值的M程序,代码如下: function [f,f0] = Hermite1(x,y,y_1) syms t; f = ; ! if(length(x) == length(y)) if(length(y) == length(y_1)) n = length(x); else disp('y和y的导数的维数不相等'); return; end else disp('x和y的维数不相等! '); return; end * for i=1:n h = ; a = ; for j=1:n if( j ~= i) h = h*(t-x(j))^2/((x(i)-x(j))^2); a = a + 1/(x(i)-x(j)); end end

f = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i)); < end f0 = subs(f,'t'); 其中x为给定点横坐标数组,y为给定点纵坐标数组,y_1为原函数在给定点处的导数数组。测试证明该程序可以实现,例如输入如下数组: x=1::; y_1=[ ]; y=[1 ]; >> [f,f0] = Hermite1(x,y,y_1); 运行结果如下: f = $ (390625*((3972231*t)/35 - 28321/0000)*(t - 1)^2*(t - 7/5)^2*(t - 8/5)^2*(t - 9/5)^2)/36 - (390625*(t - 1)^2*(t - 6/5)^2*(t - 7/5)^2*(t - 9/5)^2*((28557*t)/28 - 23/2000))/36 + (390625*((64*t)/3 - 61/3)*(t - 6/5)^2*(t - 7/5)^2*(t - 8/5)^2*(t - 9/5)^2)/576 + (390625*((763*t)/1984 + 043/6240000)*(t - 1)^2*(t - 6/5)^2*(t - 8/5)^2*(t - 9/5)^2)/16 - (390625*((77623*t)/28 - 931/60000)*(t - 1)^2*(t - 6/5)^2*(t - 7/5)^2*(t - 8/5)^2)/576 f0 = . 利用matlab绘制图像:

第5章 实验四Lagrange插值多项式

第5章 实验四Lagrange 插值多项式 实验目的:理解Lagrange 插值多项式的基本概念,熟悉Lagrange 插值多项 式的公式及源代码,并能根据所给条件求出Lagrange 插值多项式,理解龙格现象。 5.1 Lagrange 插值多项式 Lagrange 插值多项式的表达式: 1,,2,1,) ()()(, )()(1 11 1+=--==∏ ∑+≠=+=n i x x x x x l x l y x L n i j j j i j i n i i i 。 其中)(x l i 被称为插值基函数,实际上是一个n 次多项式。)(x l i 的这种表示具有较好的对称性。公式具有两大优点:(1)求插值多项式,不需要求解线性方程组,当已知数据点较多时,此公式更能显示出优越性。(2)函数值可以用符号形式表示,数据点未确定的纵坐标可用多项式表示。 5.2 Lagrange 插值多项式源代码I % 功能: 对一组数据做Lagrange 插值 % 调用格式:yi=Lagran_(x,y,xi) % x,y 数组形式的数据表 % xi:待计算y 值的横坐标数组 % yi 用Lagrange 插值算出的y 值数组 function fi=Lagran_(x,f,xi) fi=zeros(size(xi)); np1=length(f); for i=1:np1 z=ones(size(xi)); for j=1:np1 if i~=j,z=z.*(xi-x(j))/(x(i)-x(j));end end fi=fi+z*f(i); end return

例5.1 已知4对数据(1.6,3.3),(2.7,1.22),(3.9,5.61),(5.6,2.94)。写出这4个数据点的Lagrange 插值公式,并计算出横坐标xi=[2.101,4.234]时对应的纵坐标。 解:4个数据点的Lagrange 插值公式为: ) 9.36.1(*)7.26.5(*)6.16.5() 9.3(*)7.2)(6.1(* 94.2) 6.59.3(*) 7.29.3(*)6.19.3() 6.5(*) 7.2(*)6.1(*9.3) 6.5 7.2(*)9.37.2(*)6.17.2() 6.5(*)9.3(*)6.1(*22.4) 6.56.1(*)9.36.1(*) 7.26.1() 6.5(*)9.3(*) 7.2(* 3.3)(3------+ ------+ ------+ ------=x x x x x x x x x x x x x L 清单5.1 clear x=[1.6, 2.7, 3.9, 5.6]; y=[3.3, 1.22, 5.61, 2.94]; xi=[2.101,4.234]; yi=Lagran_(x,y,xi); xx=1.5:0.05:6.5; yy=Lagran_(x,y,xx); plot(xx,yy,x,y,'o') 其结果为: yi = 1.0596 6.6457 x g (x ):-, d a t a p o i n t s :o 图5.1 插值多项式曲线图

相关文档
最新文档