实验10 lagrange插值
lagrange插值基函数计算的通项公式

lagrange插值基函数计算的通项公式Lagrange插值基函数是一种常用的数学工具,用于在给定一些离散数据点的情况下,通过插值方法得到一个连续函数。
通项公式是指利用Lagrange插值基函数来计算插值多项式的表达式。
本文将介绍Lagrange插值基函数的概念和计算通项公式的方法。
Lagrange插值基函数的概念很简单,它是一组多项式函数,用于构造插值多项式。
假设我们有n个数据点(x1, y1), (x2, y2), ..., (xn, yn),其中每个数据点都有一个对应的自变量x和因变量y。
Lagrange插值基函数的个数等于数据点的个数n。
每个基函数都是一个多项式,可以通过以下的方式来定义:L_i(x) = \prod_{j=1, j≠i}^n \frac{x-x_j}{x_i-x_j}其中,L_i(x)表示第i个Lagrange插值基函数,x_i表示第i个数据点的自变量,x_j表示第j个数据点的自变量。
这个定义的意义是,当x等于x_i时,L_i(x)等于1,而在其他数据点上,L_i(x)等于0。
这样的定义保证了插值多项式在每个数据点上都能完全通过。
有了Lagrange插值基函数,我们就可以计算插值多项式的通项公式了。
假设我们要通过插值多项式f(x)来拟合数据,那么f(x)可以表示为:f(x) = \sum_{i=1}^n y_i L_i(x)其中,y_i表示第i个数据点的因变量。
这个公式的含义是,插值多项式f(x)是由每个数据点的因变量与对应的Lagrange插值基函数的乘积累加而成的。
通过这个公式,我们可以通过已知的数据点来计算插值多项式在任意点x处的值。
只需要将x代入公式中,根据给定的数据点和Lagrange插值基函数的定义,就可以得到插值多项式在该点的值。
Lagrange插值基函数的优点在于它简单易懂,计算方法也相对简单。
然而,它也有一些缺点。
首先,Lagrange插值基函数的计算量随着数据点的增加而增加,当数据点很多时,计算插值多项式的效率会比较低。
拉格朗日插值法C语言的实现

拉格朗日插值法C语言的实现实验报告:拉格朗日插值法的C语言实现一、引言拉格朗日插值法是一种常见的数值插值方法,用于通过已知数据点的函数值,估计在其他点上的函数值。
其基本思想是依据已知数据点构造一个满足通过这些点的多项式,并使用这个多项式来估计其他点上的函数值。
本实验旨在实现拉格朗日插值法的C语言代码,并通过实例进行验证和分析。
二、原理介绍拉格朗日插值法的基本原理是通过已知数据点的函数值,计算一个多项式,使得该多项式通过这些数据点,从而估计其他点上的函数值。
具体而言,对于给定的n个数据点 (x0, y0), (x1, y1), ..., (xn, yn),其中xi和yi分别表示自变量和因变量在第i个数据点上的取值,我们要计算一个多项式:P(x) = y0 * L0(x) + y1 * L1(x) + ... + yn * Ln(x)其中,Lk(x)是拉格朗日基函数,定义为:Lk(x) = Π(j=0,j≠k,n) (x - xj) / (xk - xj)三、实验设计本实验设计了一个C语言函数lagrange_interpolation,该函数以已知数据点和待插值的点作为输入,输出待插值点的函数值。
1.函数接口设计:```double lagrange_interpolation(double *x, double *y, int n, double xi);```参数说明:x表示已知数据点的自变量数组,y表示对应的因变量数组,n为已知数据点的个数,xi表示待插值点的自变量。
返回值:返回待插值点的函数值。
2.函数实现步骤:(1)定义变量和数组(2)构建拉格朗日插值多项式(3)计算待插值点的函数值(4)返回结果四、实验结果与分析为了验证lagrange_interpolation函数的准确性和稳定性,我们列举了以下测试实例,并对结果进行了分析:实例1:已知数据点:(0,1),(1,2),(2,1),(3,0)待插值点:x=0.5实例2:已知数据点:(0,1),(1,2),(2,1),(3,0)待插值点:x=1.5实例3:已知数据点:(0,1),(1,2),(2,1),(3,0)待插值点:x=2.5实例4:已知数据点:(0,1),(1,2),(2,1),(3,0)待插值点:x=4.5通过对以上测试实例的验证,发现实验结果和预期结果完全一致。
拉格朗日(Lagrange)插值

p2(7) =
(1–4)(1–9)
*1 + (4–1)(4–9)
*2
(7–1)(7–4)
+ (9–1)(9–4) * 3
= 2.7
例5.4 已知函数y=f(x)在节点上满足
x x0 x1 x2
y y0 y1 y2
求二次多项式 p(x) = a0 + a1x + a2x2
使之满足 p(xi) = yi
li (x的) 插值
lk (x0 ) 0,,lk (xk1) 0,lk (xk ) 1,lk (xk1 ) 0,,lk (xn ) 0
即
lk
(xi )
ki
1 0
(i k) (i k)
由条件 lk (xi ) 0 ( i k)知, x0 , x1,, xk1, xk1,, xn
都是n次 lk (x) 的零点,故可设
l0 (x)
再由另一条件 l0 (x0
c(x
) 1
x1 )( x x2
确定系数
)
c
(x0
1 x1)( x0
x2
)
从而导出
l0 (x)
(x (x0
x1)( x x2 ) x1 )( x0 x2 )
类似地可以构造出满足条件: l1(x1) 1, l1(x0 ) 0,
的插值多项式
l1 ( x)
lk (x)
j0 jk
n
x xj
n
(xk x j )
j0 xk x j
jk
j0 jk
称 lk (x) 为关于基点 xi 的n次插值基函数(i=0,1,…,n)
以n+1个n次基本插值多项式 lk (x)(k 0,1,, n) 为基础,就能直接写出满足插值条件
多项式插值,Lagrange插值,Lagrange反插值,牛顿插值

数学软件实验任务书实验一 多项式插值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多项式插值(Python代码)

数值计算⽅法实验之Lagrange多项式插值(Python代码)⼀、实验⽬的在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]⽽⼜需要给出其在[a,b]上的值时,按插值原则f(x i)= y i(i= 0,1…….,n)求出简单函数P(x)(常是多项式),使其在插值基点x i,处成⽴P(x i)=y i(i=0,1,……,n),⽽在[a,b]上的其它点处成⽴f(x)≈P(x).⼆、实验原理三、实验内容求之f(x)=x4在[0,2]上按5个等距节点确定的Lagrange插值多项式.四、实验程序1import matplotlib.pyplot as plt2from pylab import mpl34#计算插值多项式的系数。
5 x = [0, 0.5, 1, 1.5, 2]6 y = [0, 0.0625, 1, 5.0625, 16]78def ParametersOfLagrangeInterpolation(data_x,data_y,size):9 parameters=[]1011 i=0;#i⽤来控制参数的个数12while i < size:13 j = 0;#j⽤来控制循环的变量做累乘14 temp = 1;15while j < size:16if(i != j):17 temp*=data_x[i]-data_x[j]18 j+=1;19 parameters.append(data_y[i]/temp)20 i += 1;21return parameters2223#计算拉格朗⽇插值公式的值。
2425def CalculateTheValueOfLarangeInterpolation(data_x,parameters,x):26 returnValue=027 i = 0;28while i < len(parameters):29 temp = 130 j = 0;31while j< len(parameters):32if(i!=j):33 temp *=x-data_x[j]34 j+=135 returnValue += temp * parameters[i]36 i += 137return returnValue3839#将函数绘制成图像40def Draw(data_x,data_y,new_data_x,new_data_y):41 plt.plot(new_data_x, new_data_y, label="拟合曲线", color="red")42 plt.scatter(data_x,data_y, label="离散数据",color="yellow")43 plt.scatter(1.75, 9.37890625, label="真实数据", color="orange")44 plt.scatter(1.25, 2.44140625, color="green")45 mpl.rcParams['font.sans-serif'] = ['SimHei']46 mpl.rcParams['axes.unicode_minus'] = False47 plt.title("Lagrange插值拟合数据")48 plt.legend(loc="upper left")49 plt.show()5051 parameters=ParametersOfLagrangeInterpolation(x,y,5)52 datax=[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2]53 datay=[]54for temp in datax:55 datay.append(CalculateTheValueOfLarangeInterpolation(x,parameters,temp))56 x.append(1.75)57 y.append(CalculateTheValueOfLarangeInterpolation(x,parameters,1.75))58 Draw(x,y,datax,datay)59print("得到的四次Lagrange插值多项式为:L(x) = %f(x-0)(x-1)(x-1.5)(x-2) + %f(x-0)(x-0.5)(x-1.5)(x-2) + %f(x-0)(x-0.5)(x-1)(x-2) + %f(x-0)(x-0.5)(x-1)(x-1.5)"%(parameters[1],parameters[2],parameters[3],parameters[4]))五、运算结果(1)图像得到的四次Lagrange插值多项式为:L(x) = -0.166667(x-0)(x-1)(x-1.5)(x-2) + 4.000000(x-0)(x-0.5)(x-1.5)(x-2) + -13.500000(x-0)(x-0.5)(x-1)(x-2) + 10.666667(x-0)(x-0.5)(x-1)(x-1.5)。
数值分析实验报告Lagrange插值法

2) 选取插值节点为 x1 0.50,x 2 0.70, x 3 0.80 作抛物线插值
运行结果和总结 运行结果 例一: 设 y ln x 且给出函数表 x lnx 0.40 -0.916291 0.50 -0.693147 0.70 -0.356675 0.80 -0.223144
试计算 f(0.6)=ln0.6 近似值。 1)选取插值节点为 x1 0.50,x 2 0.70 作线性插值
>> X=[0.50 0.70 0.80;-0.693147 -0.356675 -0.223144]; >> x=0.60; >> format long >> f=Lagrange(X,x) f= -0.513342666666667
总结 ( 1 )线性插值与抛物线插值都是 Lagrange 插值的特殊形式,两者可以用 Lagrange 插值算法进行计算; (2)并不是给出的插值节点越多越精确,要看步长的大小。 指导教师意见
山东师范大学数学科学学院实验报告
实验课程: 数值分析引论 实验项目: 拉格朗日插值多项式
姓名: XXX 学号: 2015XXXXXX2 班级: XXX 班 专业: 数学与应用数学 指导教师: 实验目的 1、Lagrange 插值法的 matlab 实现; 2、用 Lagrange 插值程序进行插值计算。 实验内容: 问题分析和算法设计 Lagrange 插值 已知 y f(x )函数表(xi ,y i ) ,(a x 0 xi x n b ),给定 xx [a,b ] 及 表示选取 x i , ,x i n 作为插值节点作 n0 次插值多项式 Ln (xx ), 计算 f(xx )近 i0、n0 ,
数值分析拉格朗日插值法上机实验报告
课题一:拉格朗日插值法1.实验目的1.学习和掌握拉格朗日插值多项式。
2.运用拉格朗日插值多项式进行计算。
2.实验过程作出插值点(,),(,),(,)二、算法步骤已知:某些点的坐标以及点数。
输入:条件点数以及这些点的坐标。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值。
3.程序流程:(1)输入已知点的个数;(2)分别输入已知点的X坐标;(3)分别输入已知点的Y坐标;程序如下:#include <iostream>#include <>#include <>拉格朗日float lagrange(float *x,float *y,float xx,int n) /*插值算法*/{int i,j;float *a,yy=; /*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++){牰湩晴尨學搥???※scanf(%f,&x[i]);}printf(\);for(i=0;i<=n-1;i++) {printf(y[%d]:,i);scanf(%f,&y[i]); } printf(\);printf(Input xx:);scanf(%f,&xx);yy=lagrange(x,y,xx,n);牰湩晴尨?春礬┽屦湜?硸礬? getch();}运的值。
数值分析报告Lagrange差值和牛顿插值
、实验名称Lagra nge 插值多项式和牛顿插值多项式、实验目的与要求:实验目的:掌握Lagrange 插值多项式和牛顿插值多项式的算法。
实验要求:1.给出Lagrange 插值和牛顿插值算法思路,2. 用C 语言实现算法,运行环境为Microsoft VisualC++,3. 计算误差(这里只要求给出(-5,5 )内101个点的误差)。
三、实验内容:1. 对Lagrange 插值多项式算法作编程练习和上机运算,2. 对牛顿插值多项式算法作编程练习和上机运算,3. 比较两种方法。
算法思路:1. Lagrange 算法是把多项式p 写成如下形式:x x j j o x X j 称为Lagrange 基函数。
j i计算Lagrange 基函数的方法:fx=0.0;for(i=0;i< 二n ;i++){实验P(x) y °l °(x) y 」1(x)+y 」n (x),其中 l i (x)tmp=1.0;for(j=0;j<i;j++)tmp二tmp*(x-x[j])/(x[i]-x[j]);for(j=i+1;j <n ;j++)tmp=tmp*(x-x[j])/(x[i]-x[j]);fx=fx+tmp*y[i];}return(fx);2.牛顿算法是把多项式p写成如下形式:p(x) C o q(x X o)…+Cm(x x o)(x N)…(x x^) 其中x0, x l, , xn是插值点,C0,C l,, C i 1是待定系数。
可以通过插值点X o, X i,…,X n和插值点处的函数值y o, y i,…,y n算出待定系数C0,C1,…,Cn 1,方法如下:(1)P k(xQ C q(X k x0)…+C k1(X k x°)…区X k-J⑵ P k1(X k) C0 q(X k X0)…+C k2(X k X。
)…(X k X k-2) 将(1)-⑵并利用y k P k(xQ,得- F k(X<) F k 1(人)(人X))(兀N)••化人1)y k鮎(人)(X k X))(人X i)-<X k X ki)算法:c[0]=y1[0];for( k=1; k <= N; k++){ d=x1[k]-x1[k -1];u=c[k-1];for( i =k-2 ; i >= 0 ; i --){ u=u*(x1[k 卜x1[i])+c[i];d=d*(x1[k] -x1[i]);}c[k]=(y1[k]-u)/d;}3.这里,我们先编写两个函数px1和px2,分别用来计算插值10. 2i 1节点取X 5 二~1 和Chebyshev point K 5cos( ),N J2N 2i=0,1,…,N时的Lagrange多项式函数或牛顿多项式函数,然后在main 函数中,主要目的是计算误差|f(x) - p(x)|在(-5,5)内101个点处的最大值,其中当然要引用前面编写的两个函数px1和px2,最后将N=5,10,20,40时两种情况下的最大误差输出,并分析结果。
Lagrange插值及Newton插值
实验报告实验内容: 编写Lagrange插值法及Newton插值法通用子程序,依据数据表x0.32 0.34 0.36i xsin0.3522740.3145670.333487i构造一个抛物插值多项式及,计算的近似值)N(x)(Px3367.sin02并估计实验步骤及程序:1、Lagra nge插值公式算法流程图开始x 输入xi,yi,i=0,1,?,ny?0 0?kt?1t x-xjxk-xj?t? j=0,?,k1,k+1,?, n-y+t?yk?y工k+1?k k=0?y输岀结束Newt on插值公式算法流程图调用函数ChaShang ()f=0;temp=0;i=0f=f+temp< i<n+1i=i+1> f阶差商返回i调用函数Newt on ()return=0外层循环因子i=0I 阶差商f=ChaShang ( i,X,Y)temp=1temp=tremp*x_Xjj:0?iresult=result+f*temp< i<X.Sie()i=i+1 > result返回结果for (i nt i = 0; i < m; i++) {X[i] = sea n.n extDouble();}System.out.println(Input the elements of Y:);〃已知插值点的函数值for (i nt i = 0; i < m; i++) {Y[i] = sea n.n extDouble();}System.out.println(Input the elements of X0:);〃需要求的插值点的横坐标标值for (i nt i = 0; i < n; i++) {X0[i] = sea n.n extDouble();}double Y0[] = Lag_method(X, Y , X0);〃使用拉格朗日插值法求解得到需求插值点的纵坐标值祓瑳浥漮瑵瀮楲瑮湬尨拉格朗日插值法求解得:);for (i nt i = 0; i < n; i++) {System.out.pri ntl n(Y0[i] + );}System.out.pr in tl n();}},double X0[]){} System.out.pr intln();}结果分析与讨论:拉格朗日插值法求解得:0.3303743620375牛顿法解得0.33037436203751、Lagrange插值法和Newton插值法解决实际问题中关于只提供复杂的离散数据的函数求值问题,通过将所考察的函数简单化,构造关于离散数据实际函数 f (x)的近似函数P(x),从而可以计算未知点出的函数值,是插值法的基本思路。
第4章 Lagrange插值
x xi i 0 x j xi
i j
⑤
l j (x j ) 1 l j ( xi ) 0 i j
显然 l j ( x ) 满足{
Lagrange插值函数Ln(x)
定理 4.2 在[a、b]上有
2 n
span 1, x, x , , x span l0 ( x), l1 ( x), l2 ( x), , ln ( x)
这只是一张函数表;有的函数虽然有解析表达式,但由于计 算复杂,使用不方便,通常也构造一个函数表。如三角函数表、 对数表、平方根表、立方根表等等。
引言
科学实验得到数据: i , yi ) (x yi f ( xi ) (i 0,1,2,..., n), 它反映客观存在的函数y f ( x)在这些点的情况: (i 0,1,..., n) (i 0,1,2,..., n)。 但f ( x)时未知的。因此就想寻找函数 ( x ) f ( x ) 且保持 ( xi ) f ( xi ) yi 的插值函数。 称xi为节点, ( x)为f ( x)关于节点xi (i 0,1,2,..., n)
o i 0 i j n
2o v v l j y j ; 4) 输出 : u, v。
4.3 误差估计
定理 4.3 设函数 f ( x) C n [a, b] , f ( n1) ( x) 在开区间 (a,b)内存在,则 Lagrange 插值多项式 Ln( x) 的余式有如下估 计式
第4章 函数逼近的插值法 与曲线拟和法
引言
许多实际问题都用函数y f (x)来表示某种内在规律的数量
关系,其中相当一部分函数是通过实验或观测得到的.虽然 f (x)
在某个区间[a,b]上是存在的,有的还是连续的,但却只能 给出[a,b]上一系列点 xi的函数值yi f ( xi )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值分析》实验10
一.实验名称:Lagrange插值
二、实验目的:
(1) 学会Lagrange插值。
三、实验要求
(1) 按照题目要求完成实验内容
(2) 写出相应的实验原理与程序代码
(3) 给出实验结果(有相应的图像,对比真实函数与插值函数)
(4) 写出相应的实验报告。
四、实验题目
1、用六点Lagrange插值计算sin(1)的近似值.
x 0.7 0.9 1.1 1.3 1.5 1.7
sinx 0.6442 0.7833 0.8912 0.9636 0.9975 0.9917
2、考虑函数21()1fxx,[5,5]x, 在[-5,5]上取1n个等距节点105kkxn
(nk,,2,1,0)作为插值节点构造n次Lagrange插值多项式。
(1) 做5次Lagrange插值,计算()kfxi的近似值(其中,105kkxim,
0,1,2,,,20kmm
)。
(2) 做10次Lagrange插值,计算()kfxi的近似值,并将结果与其真实值相比较。
1.程序:#include
#include
int main(){
int n = 6,m=20, start_n=0,end_n=n+start_n,i,kk, k; //n:对应插值选用的节点
double x[]={0.7,0.9,1.1,1.3,1.5,1.7} ,
y[]={0.6442,0.7833,0.8912,0.9636,0.9975,0.9917} ;
double xx=1;
double sum=0;
for(k=start_n;k
for(i=start_n;i
p*=(xx-x[i])/(x[k]-x[i]);
sum+=p;
}
printf("sin(%.0f)=%.4f,\n",xx,sum);
}
结果:sin(1)=0.8414,
2.(1)程序:#include
#include
int main(){
int n=5,m=20,start=0,end=n+start+1,i,k1,k;//n:对应n次插值
double x[n+1],y[n+1],z;
for(k=0;k<=n;k++){
x[k]=-5+10*k/n;
y[k]=1/(1+pow(x[k],2));
}
printf("%d次插值,\n");
for(k1=0;k1<=m;k1++){
z=double(-5+0.5*k1);
printf("f(%0.1f)=",z);
double sum=0;
for(k=start;k
for(i=start;i
p*=(z-x[i])/(x[k]-x[i]);
sum+=p;
}
printf("%f,\n",sum);
}
}
结果:5次插值,
f(-5.0)=0.038462,f(-4.5)=-0.046034,f(-4.0)=-0.048077,f(-3.5)=0.007813,f(-3.0)=0.100000,f(-2.5)=
0.209736,f(-2.0)=0.321154,f(-1.5)=0.421274,f(-1.0)=0.500000,f(-0.5)=0.550120,f(0.0)=0.567308,
f(0.5)=0.550120,f(1.0)=0.500000,f(1.5)=0.421274,f(2.0)=0.321154,f(2.5)=0.209736,f(3.0)=0.100
000,f(3.5)=0.007813,f(4.0)=-0.048077,f(4.5)=-0.046034,f(5.0)=0.038462,
(2)程序:#include
#include
int main(){
int n=10,m=20,start=0,end=n+start+1,i,k1,k;//n:对应n次插值
double x[n+1],y[n+1],z;
for(k=0;k<=n;k++){
x[k]=-5+10*k/n;
y[k]=1/(1+pow(x[k],2));
}
printf("%d次插值,\n",n);
for(k1=0;k1<=m;k1++){
z=double(-5+0.5*k1);
double y_x=1/(1+pow(z,2));
printf("f(%0.1f)=",z);
double sum=0;
for(k=start;k
for(i=start;i
p*=(z-x[i])/(x[k]-x[i]);
sum+=p;
}
printf("%f,f(%.1f)-f*(%.1f)=%f\n",sum,z,z,sum-y_x);}
}
结果:10次插值,
f(-5.0)=0.038462,f(-5.0)-f*(-5.0)=0.000000,f(-4.5)=1.578721,f(-4.5)-f*(-4.5)=1.531662
f(-4.0)=0.058824,f(-4.0)-f*(-4.0)=0.000000,f(-3.5)=-0.226196,f(-3.5)-f*(-3.5)=-0.301668
f(-3.0)=0.100000,f(-3.0)-f*(-3.0)=0.000000,f(-2.5)=0.253755,f(-2.5)-f*(-2.5)=0.115824
f(-2.0)=0.200000,f(-2.0)-f*(-2.0)=0.000000,f(-1.5)=0.235347,f(-1.5)-f*(-1.5)=-0.072346
f(-1.0)=0.500000,f(-1.0)-f*(-1.0)=0.000000,f(-0.5)=0.843407,f(-0.5)-f*(-0.5)=0.043407
f(0.0)=1.000000,f(0.0)-f*(0.0)=0.000000,f(0.5)=0.843407,f(0.5)-f*(0.5)=0.043407
f(1.0)=0.500000,f(1.0)-f*(1.0)=0.000000,f(1.5)=0.235347,f(1.5)-f*(1.5)=-0.072346
f(2.0)=0.200000,f(2.0)-f*(2.0)=0.000000,f(2.5)=0.253755,f(2.5)-f*(2.5)=0.115824
f(3.0)=0.100000,f(3.0)-f*(3.0)=0.000000,f(3.5)=-0.226196,f(3.5)-f*(3.5)=-0.301668
f(4.0)=0.058824,f(4.0)-f*(4.0)=0.000000,f(4.5)=1.578721,f(4.5)-f*(4.5)=1.531662
f(5.0)=0.038462,f(5.0)-f*(5.0)=0.000000