Lagrange插值多项式
- 格式:doc
- 大小:90.16 KB
- 文档页数:3
第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是插值节点对应纵坐标向量。
第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是插值节点对应纵坐标向量。
拉格朗日插值多项式(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)而导致插值结果出现震荡,因此在实际工程中可能会考虑其他插值方法或者对数据进行适当处理来减少这种影响。
专业序号姓名日期实验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现象。
拉格朗⽇插值多项式的原理介绍及其应⽤ 插值,不论在数学中的数值分析中,还是在我们实际⽣产⽣活中,都不难发现它的⾝影,⽐如造船业和飞机制造业中的三次样条曲线。
那么,什么是插值呢?我们可以先看⼀下插值的定义,如下: (定义)如果对于每个1≤i≤n,P(x i)=y i,则称函数y=P(x)插值数据点(x1,y1),...,(x n,y n). 插值的定义⽆疑是清楚明了的,⽽在众多的数学函数中,多项式⽆疑是最简单,最常见的函数,关于它的理论研究也最为透彻。
因此,我们可以不妨先考虑利⽤多项式来进⾏插值。
那么,这样的多项式是否总是存在呢?答案是肯定的,因为我们有如下定理: (多项式插值定理)令(x1,y1),...,(x n,y n)是平⾯中的n个点,各x i互不相同。
则有且仅有⼀个n−1次或者更低的多项式P满⾜P(x i)=y i,i=1,2,...,n. 证明:先⽤归纳法证明存在性,再证明唯⼀性。
当n=1时,常函数(0次)P1(x)=y1即符合要求。
假设当n−1时存在⼀个次数≤n−2的多项式P n−1,使得P n−1(x i)=y i,i=1,2,...,n−1.则令P n(x)=P n−1(x)+c(x−x1)(x−x2)...(x−x n−1)(x−x n),其中c为待定系数,利⽤P n(x n)=y n即可求出待定系数c.此时,P n(x i)=y i,i=1,2,...,n,且P n(x)的次数≤n−1.这样就证明了存在性。
其次证明唯⼀性。
假设存在两个这样的多项式,设为P(x)和Q(x),它们次数≤n−1且都插值经过n个点,即P(x i)=Q(x i)=y i,i=1,2,...,n.令H(x)=P(x)−Q(x),H的次数也≤n−1,且有n个不同的根x1,x2,...,x n.因此,由多项式基本定理可知,H(x)为0多项式,即恒等于0,故有P(x)=Q(x).这样就证明了存在性。
证毕。
拉格朗日多项式插值法浅析摘要拉格朗日插值多项式是一种最常见的多项式插值法,也是一种最常用的逼近工具。
“学以致用 ”是每一门学科都致力追求的境界,数学自然也不例外。
下面,探讨拉格朗日插值法的基本原理、如何构造拉格朗日多项式、拉格朗日多项式的误差界,并用 MATLAB 程序来实现这一数学算法的自动化,为复杂的分析研究提供了一条数学算法的捷径。
【关键词】:拉格朗日多项式 算法实现 MATLAB在科学研究和实际的工程设计中,几乎所有的问题都可以用)(x f y =来表示其某种内在规律的数量关系。
但理想化的函数关系在实际工程应用中是很难寻找 的,对于那些没有明显解析式的函数关系表达式则只能通过实验观察的数据,利用多项式对某一函数的进行逼近,使得这个逼近函数能够反映)(x f 的特性,而且利用多项式就可以简便的计算相应的函数值。
例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。
这样,利用已经测的数据,应用待定系数法便可以求得一个多项式函数f (x )。
应用此函数就可以计算或者说预测其他日期的气温值。
一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越 准确。
当然,构造组合多项式方法比较多,如线性方程求解、拉格朗日系数多项式以及构造牛顿多项式的分段差分和系数表等等,这里只对拉格朗日多项式插值法进行深入探讨。
一、拉格朗日多项式插值算法基本原理函数)(x f y =在区间[a,b]上有定义,在是[ a,b]上取定的 N + 1个互异节点, 且在这些点处的函数值)(0x f , )(1x f ,…,)(n x f 为已知, 即 yi =f (xi ) , (N i ...1,0=),若存在一个和)(x f 近似的函数)(x P N ,满足)()(i i N x f x P = (N i ...1,0=) (1)则称 φ(x) 为 f (x) 的一个插值函数, 点i x 为插值节点,(1)称为插值条件, 区间[a,b]称为插值区间, 而误差函数)()(x P x f E N N -=称为插值余项。
5次拉格朗日插值多项式函数%% 求取五次Lagrange多项式L5(x).clear;clc;X = [0.4 0.55 0.65 0.80 0.95 1.05];Y = [0.41075 0.57815 0.69675 0.90000 1.000000 1.25382]; % 求取插值基函数:L0_(x).syms xla_0 = 1;for ii = 2:length(X)if(ii == 1)continueelseL_0 = (x-X(ii))/(X(1)-X(ii));la_0 = la_0*L_0;endendL0_x = collect(la_0);% 求取插值基函数:L1_(x).la_1 = 1;for ii = 1:length(X)if (ii == 2)continueelseL_1 = (x-X(ii))/(X(2)-X(ii));la_1 = la_1*L_1;endendL1_x = collect(la_1);% 求取插值基函数:L2_(x).la_2 = 1;for ii = 1:length(X)if (ii == 3)continueelseL_2 = (x-X(ii))/(X(3)-X(ii));la_2 = la_2*L_2;endendL2_x = collect(la_2);% 求取插值基函数:L3_(x).la_3 = 1;for ii = 1:length(X)if (ii == 4)continueelseL_3 = (x-X(ii))/(X(4)-X(ii));la_3 = la_3*L_3;endendL3_x = collect(la_3);% 求取插值基函数:L4_(x).la_4 = 1;for ii = 1:length(X)if (ii == 5)continueelseL_4 = (x-X(ii))/(X(5)-X(ii));la_4 = la_4*L_4;endendL4_x = collect(la_4);% 求取插值基函数:L5(x).la_5 = 1;for ii = 1:length(X)if (ii == 6)continueelseL_5 = (x-X(ii))/(X(6)-X(ii));la_5 = la_5*L_5;endendL5_x = collect(la_5);% 求取五次Lagrange多项式函数.Lagrange5_x = eval(collect(L0_x*Y(1)+L1_x*Y(2)+L2_x*Y(3)+L3_x*Y(4)+L4_x*Y(5)+L5_x*Y(6 )))P = sym2poly(Lagrange5_x); % 得到五次Lagrange多项式函数的系数向量.K1 = polyval(P,0.596); % 进行多项式求值.fprintf('f(0.596)的值为:f(1.8) = %f\n',K1);K2 = polyval(P,0.99); % 进行多项式求值.fprintf('f(0.99)的值为:f(1.8) = %f\n',K1);% 绘制五次Lagrange多项式函数L5(x).for jj = 1:length(X)K = polyval(P,X(jj));YY(jj)=K;endplot(X,YY);title('\bf\it5次Lagrange插值函数曲线','FontName','黑体','FontSize',12); grid onxlabel('\itx轴','FontName','黑体','FontSize',12);ylabel('\ity轴','FontName','黑体','FontSize',12);。
宁夏师范学院数学与计算机科学学院
《数值分析》实验报告
实验序号:1实验项目名称:Lagrange插值多项式
end
L(k,:)=V;
end
C=y*L
五、实验结果与数据处理
1.(1)清单:
>> clear
>> clf
>> x=[1,2,2.5];
>> y=x+2./x;
>> [C,L]=lagran(x,y);
C =
0.4000 -1.2000 3.8000
>> xx=[1.5,1.2];
>> yy=polyval(C,xx)
yy =
2.9000 2.9360
(2)清单
>> clear,clf
>> x=[0.5,1,3,5];
>> y=x+2./x;
>> [C,L]=lagran(x,y);
C =
-0.2667 2.5333 -6.3333 7.0667
>> xx=[1.5,1.2];
>> yy=polyval(C,xx)
yy =
2.3667 2.6539
2.
清单:
>> x=0:pi/16:pi/2;
>> y=x.*sin(x);
>> [C,L]=lagran(x,y);
C =
Columns 1 through 8
-0.0001 -0.0003 0.0089 -0.0005 -0.1663 -0.0001 1.0000 -0.0000
Column 9
>> xx=0:pi/16:pi/2;
>> yy=polyval(C,xx);
>> plot(xx,yy,'b',x,y,'.')
>> hold on
>> a=polyfit(x,y,4)
>> grid on
六、分析与讨论
通过本次的实验,我初步掌握了
综合运用专业及基础知识,解决实际数学问题的能力,运行过程中有几处错误,但照提示改过就出结果了。
七、教师评语。