插值法(拉格朗日插值)
拉格朗日插值计算

拉格朗日插值计算
拉格朗日插值法是一种用于给定一些点的函数值的方法,通过该
方法可以构建出一个多项式,从而得到一个对于任意自变量值都有良
好表现的函数。
下面是拉格朗日插值计算的步骤:
1. 确定给定数据点中的n个点,其中n为奇数。
2. 根据给定数据点中的自变量x值,构造拉格朗日基函数,并
定义L_i(x)为第i个点在x处的基函数。
3. 定义拉格朗日插值多项式为L(x),它是n个基函数的线性组合,并通过将每个基函数的因子乘以相应的函数值来计算每个基函数。
4. 计算插值多项式L(x)。
具体来说,L(x)的表达式如下:
L(x)=∑(i=0~n-1){y_i×L_i(x)}/∑(i=0~n-
1){L_i(x)×∏(j=0~n-1, j≠i){(x-x_j)/(x_i-x_j)}}
其中x_i为给定数据点中自变量的第i个值,y_i为给定数据点
中因变量的第i个值。
通过以上步骤,可以得到任意自变量值处的插值函数的值,从而
可以用拉格朗日插值法求解各种问题。
拉格朗日插值

数值分析实验报告(拉格朗日插值牛顿插值最小二乘法)(2010-06-02 18:33:33)分类:学习资料分享标签:拉格朗日插值法牛顿插值法最小二乘法求拟合曲线c实验1 拉格朗日插值法一、方法原理n次拉格朗日插值多项式为:Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+ y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0) n=2时,称为二次插值或抛物线插值,精度相对高些L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x 2-x1)二、主要思路使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。
对节点xi(i=0,1,…,n)中任一点xk(0<=k<=n)作一n 次多项式lk(xk),使它在该点上取值为1,而在其余点xi(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)上式表明:n 个点xi(i=0,1,…,k-1,k+1,…,n)都是lk(x)的零点。
可求得lk三.计算方法及过程:1.输入节点的个数n2.输入各个节点的横纵坐标3.输入插值点4.调用函数,返回z函数语句与形参说明程序源代码如下:#include<iostream>#include<math.h>using namespace std;#define N 100double fun(double *x,double *y, int n,double p);void main(){int i,n;cout<<"输入节点的个数n:";cin>>n;double x[N], y[N],p;cout<<"please input xiangliang x= "<<endl;for(i=0;i<n;i++)cin>>x[i];cout<<"please input xiangliang y= "<<endl;for(i=0;i<n;i++)cin>>y[i];cout<<"please input LagelangrichazhiJieDian p= "<<endl;cin>>p;cout<<"The Answer= "<<fun(x,y,n,p)<<endl;system("pause") ;}double fun(double x[],double y[], int n,double p){double z=0,s=1.0;int k=0,i=0;double L[N];while(k<n){ if(k==0){ for(i=1;i<n;i++)s=s*(p-x[i])/(x[0]-x[i]);L[0]=s*y[0];k=k+1;}else{s=1.0;for(i=0;i<=k-1;i++)s=s*((p-x[i])/(x[k]-x[i]));for(i=k+1;i<n;i++) s=s*((p-x[i])/(x[k]-x[i]));L[k]=s*y[k];k++;}}for(i=0;i<n;i++)z=z+L[i];return z;}四.运行结果测试:五.实验分析n=2时,为一次插值,即线性插值n=3时,为二次插值,即抛物线插值n=1,此时只有一个节点,插值点的值就是该节点的函数值n<1时,结果都是返回0的;这里做了n=0和n=-7两种情况3<n<100时,也都有相应的答案常用的是线性插值和抛物线插值,显然,抛物线精度相对高些n次插值多项式Ln(x)通常是次数为n的多项式,特殊情况可能次数小于n.例如:通过三点的二次插值多项式L2(x),如果三点共线,则y=L2(x)就是一条直线,而不是抛物线,这时L2(x)是一次式。
插值法(拉格朗日插值)

=
x x1 y + x 0 x1 0
x x0 y x1 x 0 1
l ( x) y
i 0 i
1
i
l0(x)
l1(x)
线性插值
直线方程的两点式:
1 i
L 1( x )
x x1 x 0 x1
y0
x x0 x1 x 0
y1
L1(x) 0 l i ( x ) y i
p(x) f(x)
x0
x1
x2
x
x3
x4
§1.1Taylor插值
函数y = f(x)在点x0处展开有Taylor 多项式:
p n ( x ) f ( x 0 ) f ( x 0 )( x x 0 )
'
f ' ' ( x0 ) 2!
( x x0 )
2
...
f
(n)
( x0 )
n!
( x x0 )
n
可见:
Pn(k)(x0)= f (k)(x0) k=0,1,…,n
因此, Pn(x)在点x0邻近会很好的逼近f(x).
Taylor展开方法就是一种插值方法.
泰勒插值要求提供 f(x) 在点x0处的各阶导数,这仅 仅适用于 f(x) 相当简单的情况.
§1.2 Lagrange插值 • 设函数y = f(x)在区间[a,b]上有定义,且给
l (x)
l (x)
抛物插值
L 2( x ) ( x x 1 )( x x 2 ) ( x 0 x 1 )( x 0 x 2 ) y0 ( x x 0 )( x x 2 ) ( x 1 x 0 )( x 1 x 2 ) y1 ( x x 0 )( x x 1 ) ( x 2 x 0 )( x 2 x 1 ) y2
插值法的简便计算

插值法的简便计算插值法是一种常见的数值分析方法,用于在给定的数据点之间估计未知函数的值。
在实际应用中,插值法的计算可能会比较复杂,但是有一些简便的计算方法可以帮助我们更快地完成插值计算。
一、拉格朗日插值法拉格朗日插值法是一种常用的插值方法,它可以通过已知的数据点来估计未知函数的值。
其基本思想是:假设已知n个数据点(x1,y1),(x2,y2),...,(xn,yn),并且这些点两两不同,那么可以构造一个n次多项式P(x),使得P(xi)=yi(i=1,2,...,n)。
然后,通过这个多项式来估计未知函数在某个点x0处的值f(x0)。
拉格朗日插值法的计算比较繁琐,但是可以通过一些简便的计算来减少计算量。
具体来说,可以使用以下公式来计算多项式P(x):P(x)=Σ(yi*li(x))其中,li(x)是拉格朗日基函数,定义为:li(x)=Π((x-xj)/(xi-xj))(i≠j)这个公式中,Π表示连乘积,xi和xj是已知的数据点,i≠j。
通过这个公式,我们可以快速计算出多项式P(x)的值。
二、牛顿插值法牛顿插值法是另一种常用的插值方法,它也可以通过已知的数据点来估计未知函数的值。
其基本思想是:假设已知n个数据点(x1,y1),(x2,y2),...,(xn,yn),并且这些点两两不同,那么可以构造一个n次插值多项式N(x),使得N(xi)=yi(i=1,2,...,n)。
然后,通过这个多项式来估计未知函数在某个点x0处的值f(x0)。
牛顿插值法的计算也比较繁琐,但是可以通过一些简便的计算来减少计算量。
具体来说,可以使用以下公式来计算插值多项式N(x):N(x)=b0+b1(x-x1)+b2(x-x1)(x-x2)+...+bn(x-x1)(x-x2)...(x-xn)其中,bi是牛顿插值系数,可以通过以下公式来计算:bi=Δyi/Δxi(i=1,2,...,n)其中,Δyi和Δxi分别表示相邻数据点的函数值和自变量之差。
数值分析中常用的插值方法

数值分析中常用的插值方法在数值计算中,许多问题都可以用插值方法来近似求解,比如曲线拟合、函数逼近和图像重建等。
插值方法是指在已知数据点的情况下,通过一些数值计算技巧,在每个数据点处构造一个多项式函数,使得该函数在每个数据点处都能通过数据点。
在数据点之间计算函数值时,就可以使用这个多项式函数进行估算。
接下来,我们就来详细介绍一些常见的插值方法。
一、拉格朗日插值法拉格朗日插值法是一个经典的插值方法,它的思想是通过给定的数据点,构造一个经过这些点的多项式函数进行逼近。
具体来讲,拉格朗日插值法会首先构造一个基函数,该函数满足只在其对应的数据点处等于1,其余的数据点处等于0。
然后,根据基函数和数据点,构造一个多项式函数,使得该函数在每个数据点处都能通过数据点。
最终得到的多项式函数就是插值函数。
优点:简单易懂,使用较为广泛。
缺点:多项式次数较高时造成的误差会较大,且在数据点密集的区域可以出现龙格现象,使得插值函数在某些区间内呈现大幅度振荡。
二、牛顿插值法牛顿插值法是一种递推式的插值方法,它通过利用已知的数据点和前面已经计算出来的差商,得到一个逐步逼近的插值函数。
具体来讲,牛顿插值法会先将已知的数据点连成一条曲线,然后逐个向这条曲线添加新的数据点,每次添加一个新的数据点后,将差商计算出来并加入到之前的差商序列中,最终得到一个多项式函数,它在每个数据点处都能通过数据点。
牛顿插值法的优缺点与拉格朗日插值法相似,但是由于牛顿插值法是递推式的,可以方便的添加新的数据点,因此在数据点多变的情况下,牛顿插值法具有很大的优势。
三、分段插值法分段插值法是一种将插值区间划分为多个子区间的插值方法,在每个子区间内使用插值方法进行插值,然后将所有子区间内的插值函数拼接起来,得到最终的插值函数。
分段插值法主要分为两种:线性分段插值和三次样条插值。
1.线性分段插值线性分段插值的思路很简单,即在每个数据点处构造两条直线,在数据点之间的区间内使用一条直线作为插值函数。
拉格朗日插值法估测

拉格朗日插值法估测拉格朗日插值法是一种用于估测或插值未知数据点的数值分析技术,通常用于构建多项式函数,以逼近已知数据点之间的未知数据点。
这种方法以法国数学家约瑟夫·拉格朗日的名字命名,用于创建插值多项式。
拉格朗日插值法可以用于估测中间数据点,以便在缺少实际数据时预测或近似函数值。
以下是拉格朗日插值法的基本步骤:1. 收集已知数据点:首先,收集已知数据点(x1, y1),(x2, y2),…,(xn, yn),其中xi是自变量,yi是因变量。
2. 创建拉格朗日多项式:为了估测在两个已知数据点之间的值,使用拉格朗日插值多项式,该多项式的形式如下:L(x) = L1(x) * y1 + L2(x) * y2 + ... + Ln(x) * yn其中L1(x)、L2(x)、…、Ln(x)是拉格朗日基函数,它们的表达式为:L1(x) = (x - x2)(x - x3) * … * (x - xn) / (x1 - x2)(x1 - x3) * … * (x1 - xn)L2(x) = (x - x1)(x - x3) * … * (x - xn) / (x2 - x1)(x2 - x3) * … * (x2 - xn)以此类推,Ln(x)的表达式与前面的类似。
3. 计算估测值:将待估测的x值代入拉格朗日多项式L(x)中,计算对应的y值。
这个y值就是估测的结果。
4. 确定插值误差:插值误差是估测值与实际值之间的差异,可以通过比较估测值和已知数据点的实际值来确定插值的准确性。
拉格朗日插值法在实际应用中有广泛的用途,特别是在数据插值、数据平滑和函数逼近方面。
然而,需要注意的是,当数据点数量较大时,拉格朗日插值多项式的次数可能会很高,导致振荡和过拟合问题。
因此,在实际应用中,需要谨慎选择插值方法,并考虑使用更高级的插值技术或拟合方法来处理数据。
2.2拉格朗日插值

=
x − x1 y + x 0 − x1 0
x − x0 y = x1 − x 0 1
Σ l ( x) y
i =0 i
1
i
l0(x)
l1(x)
§1 Lagrange Polynomial The mathematician S. had to move to a new place. His wife didn't trust him very much, so when they stood down on the street with all their things, she asked him to watch their ten trunks, while she got a taxi. Some minutes later she returned. Said the husband: "I thought you said there were ten trunks, but I've only counted to nine!" The wife said: "No, they're TEN!" "But I have counted them: 0, 1, 2, ..."
§2 插值法
一、插值问题
对函数f (x ), 其函数形式可能很复杂 , 且不利于在计算机上
运算, 假如可以通过实验或测量 , 可以获得f ( x )在区间[ a , b ] 上的一组n + 1个不同的点
a ≤ x0 < x1 < x2 < L < xn ≤ b
上的函数值 yi = f ( xi ),
g(x) ≈ f(x)
拉格朗日插值(线性、二次、n次多项式插值)

1 x0 x V ( x 0 , x 1 , , x n ) 1 x1 x 1 xn x
2 0 2 1
x x x
n 0 n 1
2 n
n n
0 j i n
(x x )
i j
因为x0, x1,…,xn的互不相同,故系数行 列式不等于0,因此方程组有唯一解, 即Pn(x)存在并唯一。
j 0 ji n
x xj xi x j
是n次插值基函数
思考1 设f(x)=x2,求f(x)的次数不超 过1、2、3、…的插值多项式各是什 么?在哪些点处会有误差? 思考2 设f(x)=sinx,求f(x)的次数不超 过1、2、3、…的插值多项式各是什 么?在哪些点处会有误差?
思考 1 答案:当 f(x) 是次数不超过 n 的 多项式时,其 ≥ n 次的插值多项式就 是f(x)本身。此时误差为0!
定义: 设插值基点 x0,x1,…,xn 中最小者为 a 、 最大者为b,当插值点x∈(a, b)时我们 称为内插,否则称为外插
例1 给定数据表
x 2 3 4 5 6 7 f(x) 10 15 18 22 20 16 要用插值方法计算 f(4.8) 的近似值。 问线性插值、二次插值和三次插值应 选哪些基点?
2. 线性插值的几何意义
用通过两点 (x0, y0) 、 (x1, y1) 的直线 y=L1(x) 近似代替曲线 y=f(x) ,如下图 所示。
y y=f(x)
y0 o x0
y=L1(x) y1
x1 x
3. 线性插值公式的推导
根据直线的点斜式,有
y1 y 0 L1 ( x ) y 0 ( x x0 ) x1 x 0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
f (n+1) (ξ ) n Rn ( x) = ∏(x xi ) (n +1) ! i=0
f ( n+1) (ξ ) 即Rn ( x) = ( x x0 )( x x1 )( x x2 )( x xn ) (n + 1)!
其中ξ ∈ [a, b]
——拉格朗日余项定理 拉格朗日余项定理
注:
例:已知
sin π = 1 , sin π = 1 , sin π = 3 6 2 4 3 2 2
分别利用 sin x 的1次,2次 Lagrange 插值计算 sin 50° 次 次 ° 5π 并估计误差. 并估计误差. 50 0 = 解: n = 1 分别利用x 分别利用 0, x1 以及 x1, x2 计算
f(xk) 2.302 6
试用二次插值计算f(11.75)(计算过程保留4位小 数). 解:因为11.75更接近12,故应取11,12,13三点作二次 插值.先作插值基函数. 已知x0=11,y0=2.397 9,x1=12,y0=2.484 9 ,x2=13,y2=2.564 9
l0 ( x) =
x
y=f(x)
x0 y0
x1 y1
x2 y2
…… xn …… yn
问题:无法求出不在表中的点的函数值,也不能 进一步研究函数的其他性质,如函数的积分和导 数等.因此需寻找y = f(x)的近似函数p(x),但要求 p(xi) = f(xi) .——插值问题 插值问题
已知精确函数 y = f(x) 在一系列节点 x0 … xn 处测得函数值 y0 = f(x0), … yn = f(xn),由此构 , 造一个简单易算的近似函数 p(x) ≈ f(x),满足 , 条件p(x 条件 i) = f(xi) (i = 0, … n).这里的 p(x) 称 . 插值函数. 为f(x) 的插值函数.最常用的插值函数是 …? 多项式
l0(x)
l1(x)
l2(x)
n次多项式 次多项式 n≥1 希望找到l , 希望找到 i(x),i = 0, …, n 使得
Pn ( x ) =
1 i = j li(xj)= 0 i ≠ j
;然后令
∑
n
i=0
l i ( x ) yi ,则显然有 (x ) = y . 则显然有Pn i i
li(x) 每个 li 有 n 个根 x0 … xi … xn n 有关, 与 节点 有关,而与 f 无关 N次拉格朗日 次拉格朗日 li ( x) = Ci ( x x0 )...(x xi )...(x xn ) = Ci ∏ ( x x j ) j≠i 插值多项式 j =0 1 li ( xi ) = 1 Ci = ∏ j ≠ i ( xi xj )
通常不能确定 ξ, 而是估计
f ( n + 1 ) ( x ) ≤ M n + 1 x∈(a,b) , ∈
M n +1 n 作为误差估计上限. 将 ( n + 1)! ∏ | x x i | 作为误差估计上限. i =0
为任一个次数≤ 多项式时 当 f(x) 为任一个次数≤ n 的多项式时, f ( n+1) ( x ) ≡ 0 , 即插值多项式对于次数≤ 可知 Rn ( x ) ≡ 0 ,即插值多项式对于次数≤ n 的多项 式是精确 精确的 式是精确的.
利用 x1 = π , x2 = π 4 3
~ 0.00538 < R1 5π < 0.00660 sin 50° ≈ 0.76008, ° 18
内插 /* interpolation */ 的实际误差 ≈ 0.00596
n=2
( x π )( x π ) 1 ( x π )( x π ) 1 ( x π )( x π ) 4 6 6 L2 ( x ) = π π π π3 × + π π π π3 × + π π π π4 × 3 ( 6 4 )( 6 3 ) 2 ( 4 6 )( 4 3 ) 2 ( 3 6 )( 3 4 ) 2
π sin 50 0 ≈ L2 ( 5 ) ≈ 0.76543 18
R2 ( x ) = cos ξ x ( x π )( x π )( x π ) ; 3! 6 4 3 1 < cos ξ < 3 x 2 2
0.00044 < R2 5π < 0.00077 18
sin 50° = 0.7660444…
) yi
如果发现当前的插值方法不够精确,就要增 如果发现当前的插值方法不够精确, 加插值点的个数, 加插值点的个数,则拉格朗日插值基函数 li(x) 都将重新计算. 都将重新计算. 牛顿插值法将讨论该问题. 牛顿插值法将讨论该问题.
例:已知数据表
xk
10
11 2.397 9
12 2.484 9
13 2.564 9
l 2 ( x) =
( x x1 )(x x2 ) ( x 12)(x 13) = ( x0 x1 )(x0 x2 ) 2
l1 (x) =
(x x0 )(x x2 ) (x 11 x 13) )( = (x1 x0 )(x1 x2 ) 1
( x 11)( x 12) ( x 12)( x 13) ( x 11)( x 13) + × 2.564 9 × 2.397 9 × 2.484 9 L2(x)= 2 2 1
2次插值的实际误差 ≈ 0.00061 次插值的实际误差 高次插值通常优于 低次插值 但绝对不是次数越 高就越好, 高就越好,嘿 嘿……
拉格朗日插值多项式编程容易, 拉格朗日插值多项式编程容易,只需双重循环
L n ( x ) = ∑ (∏
i =0 j ≠i j =0 n n
(x x j ) ( xi x j )
i
l0(x)
l1(x)
抛物插值
L 2( x ) = ( x x 1 )( x x 2 ) ( x x 0 )( x x 2 ) ( x x 0 )( x x 1 ) y0 + y1 + y2 ( x 0 x 1 )( x 0 x 2 ) ( x 1 x 0 )( x 1 x 2 ) ( x 2 x 0 )( x 2 x 1 )
p(x) ≈ f(x)
x0
x1
x2
x
x3
x4
§1.1Taylor插值
函数y = f(x)在点x0处展开有Taylor 多项式:
f ' ' ( x0 ) pn ( x) = f ( x0 ) + f ( x0 )(x x0 ) + ( x x0 )2 + 2! f ( n ) ( x0 ) ... + ( x x0 ) n n!
x0
18
x1 x2 利用 x0 = π , x1 = π L1 ( x ) = x π / 4 × 1 + x π / 6 × 1 6 4 π / 6 π / 4 2 π / 4 π / 6 2 π sin 50 0 ≈ L1 ( 5 ) ≈ 0.77614 这里 f ( x) = sin x , f (2) (ξ x ) = sinξ x , ξ x ∈(π , π ) 内插通常优于外推. ) 18 内插通常优于外推.2选择 6 3 ( f (ξ x ) 而 1要计算的3x 所在的区间的x π )( x π ) , R1 ( x) = ( < sinξ x < 2 2 2! 6 4 端点,插值效果较好. 端点,插值效果较好. sin 50° = 0.7660444… 0.01319 < R1 ( 5π ) < 0.00762 18 外推 /* extrapolation */ 的实际误差 ≈ 0.01001
'
可见:
Pn(k)(x0)= f (k)(x0) k=0,1,…,n Taylor展开方法就是一种插值方法.
因此, Pn(x)在点x0邻近会很好的逼近f(x).
泰勒插值要求提供 f(x) 在点x0处的各阶导数,这仅 仅适用于 f(x) 相当简单的情况.
§1.2 Lagrange插值 设函数y = f(x)在区间[a,b]上有定义,且给
(11.75 11)(11.75 12) × 2.564 9 = 2.463 8 2
Pn ( x i ) = y i ,
i = 0 , ... , n
条件:无重合节点, 条件:无重合节点,即 i ≠ j n=1
P1 ( x 0 ) = y 0 , P1 ( x1 ) = y1
xi ≠ x j
已知 x0 , x1 ; y0 , y1 ,求 P1 ( x ) = a 0 + a 1 x 使得 两点的直线. 可见 P1(x) 是过 ( x0 , y0 ) 和 ( x1, y1 ) 两点的直线. 称为拉氏基函数 称为 y0 y 拉氏基函数 P1 ( x ) = y0 + 1 ( x x0 ) x1 x 0
出一系列点上的函数值yi=f(xi) (i=0,1,2,…,n), 求作n次多项式pn(x) 使得
pn (xi)= yi (i=0,1,2,…,n) 函数pn (x)为f(x)的插值函数;称x0,x1,… xn称为 插值节点或简称节点.插值节点所界的区间[a,b] 称为插值区间.pn (xi)= yi 称为插值条件. 构造的n次多项式可表示为: Pn(x)= a0 + a1x + a2x2+…+ anxn
y i , i = 0 , ... , n
a0 + a1 x1 + ... + an x1n = y1 ...
n a0 + a1 xn + ... + an xn = yn
这是一个关于a 元线性方程组,其系 这是一个关于 0 , a1 ,… an 的n+1元线性方程组 其系 元线性方程组 数行列式: 数行列式 n i 1