Lagrange插值多项式
- 格式:ppt
- 大小:547.00 KB
- 文档页数:5
第5章 实验四Lagrange 插值多项式实验目的:理解Lagrange 插值多项式的基本概念,熟悉Lagrange 插值多项式的公式及源代码,并能根据所给条件求出Lagrange 插值多项式,理解龙格现象。
5.1 Lagrange 插值多项式 Lagrange 插值多项式的表达式: 1,,2,1,)()()(,)()(1111+=--==∏∑+≠=+=n i x x x x x l x l y x L n ij 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:np1z=ones(size(xi)); for j=1:np1if i~=j,z=z.*(xi-x(j))/(x(i)-x(j));end endfi=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.57.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 clearx=[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.6457xg (x ):-, d a t a p o i n t s :o图5.1 插值多项式曲线图5.3 Lagrange插值多项式源代码II% 输入:x是插值节点横坐标向量;y是插值节点对应纵坐标向量。
拉格朗日插值多项式是一种近似函数,它可以通过给定一组离散数据点,来估算出其他数据点的值。
拉格朗日插值多项式是由18世纪法国数学家Joseph-Louis Lagrange提出的,他是一位杰出的数学家和物理学家。
拉格朗日插值多项式的推导可以从一个简单的例子开始。
假设我们有一组离散的数据点{(x1, y1), (x2, y2), …, (xn, yn)},我们想要通过这些点来拟合一个函数,使得在这些点上的函数值与给定的数据点相等。
首先,我们假设要拟合的函数是一个n-1次多项式:P(x) = a0 + a1x + a2x^2 + … + an-1x^n-1我们的目标是找到多项式中的系数a0, a1, …, an-1,使得在给定的数据点上函数值与数据点的y值相等。
根据插值的思想,我们希望在每个数据点上函数值与给定的数据点相等,即对于每个数据点(xi, yi)都满足:P(xi) = yi我们可以将这个条件用一个方程表示出来。
将插值多项式代入方程中,我们得到:a0 + a1xi + a2xi^2 + … + an-1xi^n-1 = yi现在我们有n个方程,通过解这个方程组,我们可以求解出多项式的系数。
为了方便求解,我们引入拉格朗日基函数。
拉格朗日基函数Li(x)的定义是一个n 次多项式,它可以满足以下条件:1.对于所有的i≠j,Li(xj) = 02.Li(xi) = 1根据拉格朗日基函数,我们可以将插值多项式表示为:P(x) = L0(x)y0 + L1(x)y1 + … + Ln-1(x)yn-1其中Li(x)可以表示为:Li(x) = (x - x0)(x - x1)…(x - xi-1)(x - xi+1)…(x - xn-1) / (xi - x0)(xi - x1)…(xi - xi-1)(xi - xi+1)…(xi - xn-1)现在我们可以使用拉格朗日基函数来表示插值多项式,并求解多项式的系数。
拉格朗日插值多项式(Lagrange Interpolation Polynomial)是一种用于在已知数据点之间进行插值的方法。
它可以用一个简单的公式表示如下:
假设有n+1个互不相同的数据点(x0, y0), (x1, y1), ..., (xn, yn),其中xi和yi分别是已知的数据点的横纵坐标。
那么拉格朗日插值多项式可以表示为:
L(x) = Σ(yi * li(x))
其中,i从0到n,li(x)是拉格朗日基础多项式(Lagrange basis polynomial),其表达式为:
li(x) = Π[(x - xj) / (xi - xj)], j ≠ i
在这个公式中,Σ表示求和运算,Π表示连乘运算。
这样得到的L(x)就是通过拉格朗日插值法得到的插值多项式。
需要注意的是,拉格朗日插值多项式在实际应用中可能会因为龙格现象(Runge's phenomenon)而导致插值结果出现震荡,因此在实际工程中可能会考虑其他插值方法或者对数据进行适当处理来减少这种影响。
数学软件实验任务书实验一 多项式插值1实验原理()y f x =在区间[,]a b 上的1n +个互异点01n a x x x b =<<= 出得值为012,,,,n y y y y ,存在次数不超过n 的多项式:2012()n n n P x a a x a x a x =++++使得满足条件:()()n i i p x f x =2 数据来源X=[1 1.4 1.8 2.0]Y=[-2 -0.8 0.4 1.2]3 实验程序clcclear allX=[1 1.4 1.8 2.0];Y=[-2 -0.8 0.4 1.2]';n=length(X);A=zeros(n,n);for i=1:nfor j=1:n-1A(i,j+1)=X(i)^j;endendB=zeros(n,1);for i=1:nB(i,1)=1;endA(:,1)=B;A1=A;%%%%%%%%范德蒙行列式a=inv(A1)*Ysyms x;f=a(1)+a(2)*x+a(3)*x^2+a(4)*x^3%%%%%检验subs(f,1)4 实验结果%%%%%%%%%%多项式系数a =-9.200012.5333-7.00001.666723()0.9212.537 1.67f x x x x =-+-+%%%%%%%%%%%%%%%代入1x =检验subs(f,1)ans =-2.000000003实验二 Lagrange 插值1 实验原理通过平面上不同两点可以确定一条直线经过这两点,这就是拉格朗日线性插值问题,对于不在同一条直线的三个点得到的插值多项式为抛物线。
这里给出一般的插值公式,拉格朗日插值的基多项式为:10(),0,1,2,,n i j i jj i x x l x i n x x =≠-==-∏ 有了基函数以后就可以直接构造插值多项式,插值多项式为:0()()nn i i i p f x l x ==∑2 数据来源X=[0 1 2 4]Y=[1 9 23 3]3 实验程序function laglange(X,Y,x0)syms xn=length(X);w=1;for i=1:nw=w*(x-X(i));enda=diff(w,x);f=0;for i=1:nb=w/(x-X(i));l=b/(subs(a,x,X(i)));f=f+l*Y(i);endf=expand(f)%subs(f,x,x0)sprintf('f(%f)=%f',x0,subs(f,x,x0))end4 实验结果运行程序在Matlab 窗口显示f =3 2- 11/4 x + 45/4 x - 1/2 x + 1 即:3211451()1442f x x x x =-+-+ 实验三 牛顿插值1 实验原理函数()f x 的差商定义为:[]()k k f x f x =111[][][,]k k k k k kf x f x f x x x x ----=-111[,,][,,][,,,]k j k k j k k k j k k k j f x x f x x f x x x x x -+------=-下面给出牛顿插值多项式为:001001011()[][,]()[,,,]()()()n n n N x f x f x x x x f x x x x x x x x x -=+-++---如果记:011()()(),1,2,,k k w x x x x x x k n -=---=则牛顿插值可以表达为: 001101()[][,][,,,]n n n N x f x f x x w f x x x w =+++2 数据来源X=[1.0 1.3 1.6 1.9 2.2]Y=[0.7651977 0.6200860 0.4554022 0.2818186 0.1103623] 3 实验程序1 计算差商表程序clcclearX=[1.0 1.3 1.6 1.9 2.2];Y=[0.7651977 0.6200860 0.4554022 0.2818186 0.1103623]; f0=Y;n=length(X);f=zeros(n);f(1,:)=Y;for i=1:n-1f(2,i)=(f0(i+1)-f0(i))/(X(i+1)-X(i))endfor k=2:n-1for i=1:n-kf(k+1,i)=(f(k,i+1)-f(k,i))/(X(k+i)-X(i)) endend2 牛顿差值程序function s=niudun(x,y,t)syms p;s=y(1);xishu=0;dxs=1;n=length(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)end4 实验结果差商表:f =0.7652 0.6201 0.4554 0.2818 0.1104-0.4837 -0.5489 -0.5786 -0.5715 0-0.1087 -0.0494 0.0118 0 00.0659 0.0681 0 0 00.0018 0 0 0 0在命令窗口输入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)得到结果yt =[0.5118199945]。
拉格朗⽇(Lagrange)插值算法拉格朗⽇插值(Lagrange interpolation)是⼀种多项式插值⽅法,指插值条件中不出现被插函数导数值,过n+1个样点,满⾜如下图的插值条件的多项式。
也叫做拉格朗⽇公式。
这⾥以拉格朗⽇3次插值为例,利⽤C++进⾏实现:1//利⽤lagrange插值公式2 #include<iostream>3using namespace std;45double Lx(int i,double x,double* Arr)6 {7double fenzi=1,fenmu=1;8for (int k=0;k<4;k++)9 {10if (k==i)11continue;12 fenzi*=x-Arr[k];13 fenmu*=Arr[i]-Arr[k];14 }15return fenzi/fenmu;16 }1718int main()19 {20double xArr[4]={};21double yArr[4]={};22//输⼊4个节点坐标23 cout<<"请依次输⼊4个节点的坐标:"<<endl;24for (int i=0;i<4;i++)25 cin>>xArr[i]>>yArr[i];2627//输⼊要求解的节点的横坐标28 cout<<"请输⼊要求解的节点的横坐标:";29double x;30 cin>>x;31double y=0;32for (int i=0;i<4;i++)33 y+=Lx(i,x,xArr)*yArr[i];34 printf("x=%lf时,y=%lf\n",x,y);3536//分界,下⾯为已知y求x37 cout<<"请输⼊要求解的节点的纵坐标:";38 cin>>y;39 x=0;40for (int i=0;i<4;i++)41 x+=Lx(i,y,yArr)*xArr[i];42 printf("y=%lf时,x=%lf\n",y,x);4344 system("pause");45return0;46 }作者:耑新新,发布于转载请注明出处,欢迎邮件交流:zhuanxinxin@。
专业序号姓名日期实验1Lagrange 插值多项式【实验目的】1.掌握用MATLAB计算拉格朗日插值方法,改变节点的数目,对插值结果进行初步分析;2.掌握用MATLAB的插值方法并通过实例学习用插值解决实际问题。
3. 观察Runge现象的演示。
【实验内容】Lagrange 插值多项式按照 P74 图4-4 的方法编 Lagrange 插值多项式function y = mylagpoly(X,Y,x)X,Y 采样点x 自变量(向量)y 多项式的函数值要特别注意大小写,x,y 和 t 都是向量【程序如下】:% exp4_2.m --- Runge现象的演示(内含 L 和 N 插值多项式)function try_Runge% 见 P84f = inline('1./(1+25*x.^2)'); % 定义函数n = 11;X = linspace(-1,1,n); % n 等分( n+1 个点),插值点横坐标Y = f(X); % 插值点纵坐标x = -1 : 0.01 : 1; % 加细 xy = mylagpoly(X,Y,x)plot(x,f(x),'r',X,Y,'o',x,y,'b')title('Runge现象') % 加标题legend('y=1/(1+25*x^2)','插值点 ','等分的10次插值多项式',0) % 加标签function y = mylagpoly(X,Y,x)n = length(X);y = zeros(size(x));for i = 1:nt=1;for j = 1:nif j ~= it = t.*((x-X(j))/(X(i)-X(j))); % 注意这里是点乘,字母与书上不同,此时t变成向量了endendy=y+ t.*Y(i);end【运行结果如下】:【结果分析】:拉格朗日插值实验通过离散的点来构造一个函数来逼近原来的函数,理论上应该是点越多,构造函数应该会越来越逼近原函数,但是却发生了Range现象,所以在利用拉格朗日插值法来构造函数来逼近原函数时,应该选择适当的点来逼近原函数,但即使如此,依然不能有效的避免Range现象。
lagrange 插值法实验基本原理: lagrange 插值法是用来解决离散点的插值问题。
若给定两个插值点),(),,(1100y x y x 其10x x ≠,在公式中取1=n ,则La g r a n g e 插值多项式为:)()()()()()(001010010110101x x x x y y y x x x x y x x x x y x p ---+=--+--=是经过),(),,(1100y x y x 的一条直线,故此法称为线性插值法。
2、若函数给定三个插值点 2,1,0),,(=i y x i i ,,其中i x 互不相等,在公式中取1=n ,则Lagrange 插值多项式为: ))(())(())(())(())(())(()(1202102210120120102102x x x x x x x x y x x x x x x x x y x x x x x x x x y x p ----+----+----=是一个二次函数,若2,1,0),,(=i y x i i 三点不在一条直线上,则该曲线是一条抛物线,这种插值法称为二次插值或抛物插值。
为了解决这个问题,我们为此构造了这个矩阵⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----+---.........))(())(()())((12010212010212010x x x x x x x x x x x x x x x x 就可以找到相应系数。
实验结果分析:在应用拉格朗日插值法时应注意以下几个问题:1、在能获得原始资料时应尽量获取原始资料, 不能盲目地用组数据代入公式来估计未知数据。
2、在利用拉格朗日多项式进行插值估计时, 要求所研究范围的值的变化不受特殊或偶照因素的影响, 即的值是在正常条件下的。
3、如果有两组值(i x ,iy ),(j x ,j y ) 的i x =j x ;则这两组值只能取一组代入多项式计算, 否则便会出现 i y 与j y 的项分母为零的情况这种情况对于这种情况, 用哪组值代入多项式估计更好, 往往不易确定。
插值法函数逼近一、实验目的:通过上机操作掌握插值法函数逼近的算法实现,掌握Lagrange 插值法和Newton 插值法的思想和区别。
二、实验内容:Lagrange 插值法和Newton 插值法的算法实现。
三、理论基础:(一)、Lagrange 插值法:n 次Lagrange 插值基函数:ni x x x x x l j i j ij j i ...,1,0,)()()(n0=--∏=≠= ,l i ,i=0,1,…,n 是n 次多项式并满足 l i (x j )=⎩⎨⎧≠=.,0,j 1i j i ,n 次Lagrange 插值多项式: ,)()()(0n ∑==ni i i x l x f x L显然,L ,n n P ∈并满足插值条件 L )()(n j j x f x =,j=0,1,…,n. (二)、Newton 插值法均差: f[x k ]=f(x k ), f[x k ,x k+1]=(f[x k+1]-f[x k ])/(x k+1-x k ) f[x k ,x k+1]=(f[x k+1]-f[x k ])/(x k+1-x k )为f 在x k 上的零阶均差,在x 1,+k k x 上的一阶均差和在21,,++k k k x x x 上的二阶均差. n 次Newton 插值多项式:f(x)=f(x 0)+f[x 0,x 1](x-x 0)+f[x 0,x 1,x 2](x-x 0)(x-x 1)+…+f[x 0,x 1,…x n ](x-x 0)(x-x 1)…(x-x n )Lagrange 插值法:代码:function yh= lagrange( x,y,xh ) n=length(x); m=length(xh); x=x(:); y=y(:); xh=xh(:);yh=zeros(m,1);c1 = ones(1,n-1);c2 = ones(m,1);for i=1:n,xp = x([1:i-1 i+1:n]);yh = yh + y(i) * prod((xh*c1-c2*xp')./(c2*(x(i)*c1-xp')),2); end运行结果:x(1)=0.4;x(2)=0.50;x(3)=0.70;x(4)=0.80;y(1)=-0.916281;y(2)=-0.693147;y(3)=-0.356675;y(4)=-0.223144;xh=0.6;lagrange(x,y,xh)ans =-0.5100Newton 插值法:代码:function newtoncz(a,b,n,f)ln=length(n);for k=1:lnm=n(k)-1;y=zeros(1,m+1);A=zeros(m+1);w=zeros(1,m+1);h=(b-a)/m;for i=1:m+1x(i)=a+(i-1)*h;y(i)=subs(f,findsym(f),x(i));endA(:,1)=y';for i=2:m+1for j=i:m+1A(j,i)=(A(j,i-1)-A(j-1,i-1))/(x(j)-x(j-i+1));endendp=A(1,1);w=vpa(w,4);syms X;w(1)=X-x(1);for i=2:m+1w(i)=w(i-1)*(X-x(i));p=A(i,i)*w(i-1)+p;p=simplify(p);endp=vpa(p,4);fprintf('n=%d的newton插值多项式为:',n(k));disp(p);运行结果:>> a=-1;>> b=1;>> n=[5,7,13];>> syms X;>> f=1/(1+25*X.^2);>> newtoncz(a,b,n,f)n=5的newton插值多项式为:3.316*X^4-4.277*X^2+1.n=7的newton插值多项式为:-13.13*X^6+20.96*X^4+.3475e-14*X^3-8.784*X^2-.2420e-15*X+1.n=13的newton插值多项式为:909.9*X^12-.3411e-12*X^11-2336.*X^10+.6632e-12*X^9+2202.*X^8-.1573 e-12*X^7-955.4*X^6+.2341e-12*X^5+198.7*X^4-.3535e-13*X^3-19.58*X^2 +.7881e-15*X+1.000四、比较分析:Lagrange插值多项式结构简单紧凑,在理论分析中甚为方便,在数值分析中经常使用,但在使用过程中也存在不便之处,当插值节点增加(相应的插值多项式的次数增加)、减少(相应的插值多项式的次数减少)时,构造差值多项式的基函数均需重新构造。