数值分析Lagrange插值法计算实验
插值法实验报告

插值法实验报告插值法实验报告一、引言插值法是一种常用的数值分析方法,用于通过已知数据点的函数值来估计在其他位置的函数值。
它在科学计算、图像处理、工程设计等领域有广泛的应用。
本实验旨在通过实际操作,深入理解插值法的原理和应用。
二、实验目的1. 掌握拉格朗日插值法和牛顿插值法的原理和计算方法;2. 通过实验比较不同插值方法的精度和效率;3. 分析插值法在实际问题中的应用。
三、实验步骤1. 收集实验数据:在实验室内设置几个测量点,记录它们的坐标和对应的函数值;2. 使用拉格朗日插值法计算其他位置的函数值:根据已知数据点,利用拉格朗日插值公式计算其他位置的函数值;3. 使用牛顿插值法计算其他位置的函数值:根据已知数据点,利用牛顿插值公式计算其他位置的函数值;4. 比较不同插值方法的精度和效率:通过计算误差和运行时间,比较拉格朗日插值法和牛顿插值法的性能差异;5. 分析插值法在实际问题中的应用:结合实验结果,探讨插值法在实际问题中的优势和局限性。
四、实验结果与分析1. 拉格朗日插值法的计算结果:根据已知数据点,利用拉格朗日插值公式计算其他位置的函数值;2. 牛顿插值法的计算结果:根据已知数据点,利用牛顿插值公式计算其他位置的函数值;3. 误差分析:比较插值结果与真实函数值之间的误差,分析误差的来源和影响因素;4. 运行时间分析:比较不同插值方法的运行时间,分析其效率和适用场景。
五、实验结论1. 拉格朗日插值法和牛顿插值法都是常用的插值方法,它们在不同场景下有各自的优势;2. 插值法在实际问题中的应用需要考虑数据的分布、函数的性质和计算效率等因素;3. 本实验结果表明,拉格朗日插值法和牛顿插值法在精度和效率上存在差异,具体选择哪种方法应根据实际需求进行权衡。
六、实验总结通过本次实验,我们深入了解了插值法的原理和应用。
实验结果表明,插值法在科学计算和工程设计中具有重要的作用。
在实际应用中,我们需要根据具体问题的要求和数据的特点选择合适的插值方法,以达到更好的效果。
数值分析实验报告--实验2--插值法

1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。
龙格(Runge )给出一个例子是极著名并富有启发性的。
设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。
(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。
(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。
1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。
1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。
Matlab 脚本文件为Experiment2_1_1fx.m 。
可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。
数值分析课程设计

摘要实验一 拉格朗日插及数值求解1.1 实验目的了解 Lagranger 差值的基本原理和方法 通过实例掌握用 MATLAB 求插值的方法 根据实际计算理论,利用 Lagranger 插值多项式计算1.2 实验原理设已知 x0, x1, x2 ,..., xn及 yi=f( xi)(i=0,1, ,n), Ln (x)为不超过 n 次多项式且满足Ln(xi) yi(i=0,1,...n ).易知L n (x) l 0(x)y 0 ... l n (x)y n其中, li(x)均为 n 次多项式,再由 xj(j i )为 n 次多项式 li(x)的 n 个根知 nl i (x) c x x jj0i i. 最后,由nl i (x j ) c (x i x j ) 1j0 ji1 n(x i x j )j0 ji,i=0,1,...,n.n总之,L n (x)=i 0li(x)yinx x jj.j 0 x i x jli (x)= j i式为 n 阶 Lagrange 插值公式,其 中, li (x)(i=0,1,...n )称为 n 阶 Lagrange 插值的基函数l i (x )(x x 0)...(x x i 1)(x x i 1 )...( x x n )(x i x 0 )...(x i x i 1)(x i x i 1)...(x i x n )0,1,2...,n1.3 实验内容 function y = lagranger(x0,y0,x);%UNTITLED Summary of this function goes here% Detailed explanation goes here n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:nli=1.0;for j=1:nif j~=kli=li*(z-x0(j))/(x0(k)-x0(j));endends=li*y0(k)+s;endy(i)=s;end1.4实验案例及结果分析(1)输入:x0=[4,5,6];y0=[10,5.25,1];x=5;y=lagranger(x0,y0,x)2)输入:X0=[1,4,8];y0=[6,3.2,4];x=4;y=lagranger(x0,y0,x)实验二LU 分解法解线性方程组2.1实验目的1.了解LU 分解法解线性方程组的基本原理;2.熟悉计算方法的技巧和过程,能用LU 分解法解实际问题;3.用matlab 实现LU 分解。
lagrange插值法上机实践报告

五、计算结果的分析
三次Lagrange插值多项式为:
;
2.125000000000000; 0.375000000000000; 3.625000000000000.
六、计算中出现的问题,解决方法及体会
从上面的试验结果中我们可以看出拉格朗日插值法在实际中的巨大作用,它能使因试验得到的复杂数据处理更简单化,对于一些没有明确函数关系的数据处理,通过插值法构造的近似函数能有效的反映原数据的特性,又在插值法中,拉格朗日插值是一种多节点选取的插值法,其构造结果更加渐进真实结果,则在实际中用的更多,所以在今后的操作中,如何得到更加近似于原试验数据的构造函数,即如何减小拉格朗日插值多项式误差计算问题是我们以后做研究时要重点关注和去解决的难点。
四、数值结果五、计算结果的分析 六、计算中出现的问题,解决方法及体会
一、实验目的、内容
实验目的:
1.了解lagrange插值法的基本原理和方法;
2.掌握拉格郎日插值多项式的用法,适用范围及精确度;
3.学习掌握MATLAB软件有关的命令。
内容:
已知数据点 ,求三次Lagrange插值多项式 , 并求
二、相关背景知识介绍
令
其中 为以 为节点的n次插值基函数,则 是一次数不超过n的多项式,且满足
, j=0,1,…,n
再由插值多项式的唯一性,得
上式表示的插值多项式称为拉格朗日(Lagrange)插值多项式。
三、代码(Matlab)
functiony = lagrange(x0,y0,x)
n = length(x0);
m = length(x);
(3)拉格朗日插值法的概述
拉格朗日插值用来求n个节点的(n-1)次插值多项式,它就是线性插值和抛物线插值的推广和延伸。我们设有n个节点,则拉格朗日插值的表达式表示为:
插值数值实验报告(3篇)

第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
数值积分上机报告拉格朗日差值法

图一:线性插值图解
Lagrange 抛物线插值法算法:
假定插值节点为 x0 , x1 , x2 ,要求二次插值多项式 L2 ( x) ,使它满足 L2 ( xi ) yi , (i 0,1,2) , 几何上 y L2 ( x) 就是通过三点 ( x0 , y0 ), ( x1 , y1 ), ( x2 , y2 ) 的抛物线。为了求出 L2 ( x) 的表达式, 可 采用基函数方法。 l0 ( x) 可 表 示 为 l0 ( x) A( x x1 )( x x2 ) , 由 l0 ( x0 ) 1 可 得 A
1 ,于是 ( x0 x1 )( x0 x2 )
l0 ( x )
( x x0 )( x x2 ) 。 ( x0 x1 )( x0 x2 ) ( x x0 )( x x2 ) ( x x0 )( x x1 ) , l2 ( x ) 。 ( x1 x0 )( x1 x2 ) ( x2 x0 )( x2 x1 )
k
式为: L( x) : y j l j ( x) ,其中每个 l j ( x) 为 Lagrange 基本多项式(或称插值基函数),其表
j 0
k
达式为: l j ( x) :
i 0 ,i j
Байду номын сангаас
( x x j 1 ) ( x x j 1 ) x xi ( x x0 ) ( x xk ) 。Lagrange x j xi ( x j x0 ) ( x j x j 1 ) ( x j x j 1 ) ( x j xk )
六、计算中出现的问题,解决方法及体会
问题 1.在做第一题的时候我们没有使用 for 循环语句,每进行一次二次、三次 Lagrange 插 值多项式的时候都会需要重新编程,导致计算过程累赘并且不明了。 2.由于受 C 语言的影响,在写不等于的时候我们常常写成(!=) ,Matlab 软件无法识 别。
数值分析Lagrange插值多项式

其余的将M值及f2[x_]修改即可,得到插值函数修改分f3[x_]即可。
1 n+1 !
f
n+1
(εx )
n i=0(x
− xi )
其中 εx 为区间内一点
但 Lagrange 插值法没有承接性,可以进行改良。
【Lagrange 插值算法描述】 1. 对给定函数选取其区间上的一系列节点并计算其函数值,得到点列 (x0 , y0 ),…,( xn , yn ); 2. 通过上述点列构造 Lagrange 基函数li x = 出 Lagrange 插值函数Ln x =
【实验】 通过 Mathematica 编写程序得到如下结果: N=5: 1. 取xi = 5 −
10 N
i , i = 0,1, … ,N 得到:
(1) 插值点为:
(2) 由上述插值点构造出 Lagrange 插值函数:
(3)由题目所给出的条件计算误差得到:
插值函数与原函数的图像为:
其中蓝色为原函数图像,红色为插值函数图像,可以看出在 0 点误差最大,与 我们的计算结果相吻合。
n k=0 yk lk (x); n x −x i j=0 x −x i j j ≠i
,并由该基函数构造
3. 由多项式插值误差定理来估计其误差: f x −p x =
1 n+1 !
f
n+1
(εx )
n i=0(x
− xi )
其中 εx 为区间内一点
但此题有自己的估计误差的要求,则我们依照题意估计误差。
n x −x i j=0 x −x i j j ≠i
,
li x = δij
n k=0 yk lk (x)
来构造 Lagrange 插值多项式: Ln x =
拉格朗日插值实验报告

拉格朗日插值实验报告一、实验目的本实验旨在通过实际实验,深入理解拉格朗日插值法的原理和应用,掌握其计算过程和相关技巧。
二、实验原理Pn(x) = ∑ [yi * li(x)]其中,li(x)称为拉格朗日基函数,具体的计算公式如下:li(x) = ∏ [(x-xj)/(xi-xj)] (i≠j)利用拉格朗日插值法可以对数据进行插值计算,从而得到原函数未知的点的函数值。
三、实验步骤1.根据实验要求,选择一组离散的数据点,确保它们在横坐标轴上不共线。
2. 使用拉格朗日插值法计算插值多项式的各个基函数li(x)。
3.对插值多项式进行求和,得到最终的插值多项式Pn(x)。
4.在给定的范围内选择一些未知数据点,利用插值多项式Pn(x)计算其函数值。
5.将实际计算的函数值与原函数值进行对比,评估插值方法的准确性和精确度。
四、实验结果以实验要求给定的数据点为例,具体数据如下:x:1,2,3,4,5,6y:5,19,43,79,127,187根据拉格朗日插值法的计算公式,可以得到以下结果:l0(x)=(x-2)(x-3)(x-4)(x-5)(x-6)/(-120)l1(x)=(x-1)(x-3)(x-4)(x-5)(x-6)/120l2(x)=(x-1)(x-2)(x-4)(x-5)(x-6)/(-48)l3(x)=(x-1)(x-2)(x-3)(x-5)(x-6)/48l4(x)=(x-1)(x-2)(x-3)(x-4)(x-6)/(-20)l5(x)=(x-1)(x-2)(x-3)(x-4)(x-5)/20插值多项式Pn(x)=5*l0(x)+19*l1(x)+43*l2(x)+79*l3(x)+127*l4(x)+187*l5(x)综合以上计算结果,可以对给定范围内的未知数据点进行插值计算,从而得到相应的函数值。
五、实验分析与结论在实际实验中,我们可以利用拉格朗日插值法对任意给定的函数进行逼近计算,从而得到函数在离散数据点之间的近似值。
数值分析拉格朗日插值法上机实验报告

X[0]: 1
x[1]:-1
x[2]:2
y[0]:0
y[1]:-3
y[2]:4
Input xx:
x二,y=
3
拉格朗日插值模型简单,结构紧凑,是经典的插值法。但是由于拉格 朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新 计算。且当增大插值阶数时容易出现龙格现象。
在物理化学,资产价值鉴定工作和计算某一时刻的卫星坐标和钟差等 这些方面可以应用Lagrange插值。采用拉格朗日插值法计算设备等 功能重置成本,计算精度较高,方法快捷。但是这方法只能针对可比 性较强的标准设备,方法本身也只考虑了单一功能参数,它的应用范 围因此受到了一定的限制。作为一种探索,我们可以将此算法以 及其它算法集成与计算机评估分析系统中,作为传统评估分析方法的 辅助参考工具,以提高资产价值鉴定工作的科学性和准确性。
int i, j ;
float *a,yy二;/*a作为临时变量,记录拉格朗日插值多项*/
a= (f I oat*) ma I loc (n*s i zeof (f I oat));
for(i=0;i <=n-1;i++)
{
a[i]=y[i];
for(j=0;j<=n-1;j++)
if (j! = i)
{
pr i ntf (Error! The vaIue of n must in (0,20).);
getch () ; return 1 ;
}
for (i=0;i<=n-1;i++)
{
抽潼晴龙學扌追???探
scanf (%f, &x[i]);
)
数值分析拉格朗日插值法.doc

```````````````````````````````````````````数值分析拉格朗日插值法拉格朗日插值的算法设计及应用【摘要】 本文简介拉格朗日插值,它的算法及程序和拉格朗日在实际生活中的运用。
运用了拉格朗日插值的公式,以及它在MA TLAB 中的算法程序,并用具体例子说明。
拉格朗日插值在很多方面都可以运用,具有很高的应用价值。
【关键词】 拉格朗日;插值;公式;算法程序;应用;科学。
一、绪论约瑟夫·拉格朗日(Joseph Louis Lagrange),法国数学家、物理学家。
他在数学、力学和天文学三个学科领域中都有历史性的贡献,其中尤以数学方面的成就最为突出。
拉格朗日对流体运动的理论也有重要贡献,提出了描述流体运动的拉格朗日方法。
数据建模有两大方法:一类是插值方法,另一类是拟合函数一般的说,插值法比较适合数据准确或数据量小的情形。
然而Lagrange 插值有很多种,1阶,2阶,…n 阶。
我们可以利用拉格朗日插值求方程,根据它的程序求原方程的图像。
下面我具体介绍分析一下拉格朗日插值的算法设计及应用。
二、正文1、基本概念已知函数y=f(x)在若干点i x 的函数值i y =()i x f (i=0,1,⋅⋅⋅,n )一个差值问题就是求一“简单”的函数p(x):p(i x )=i y ,i=0,1,⋅⋅⋅,n, (1)则p(x)为f(x)的插值函数,而f(x)为被插值函数会插值原函数,0x ,1x ,2x ,...,n x 为插值节点,式(1)为插值条件,如果对固定点-x 求f(-x )数值解,我们称-x 为一个插值节点,f(-x )≈p(-x )称为-x 点的插值,当-x ∈[min(0x ,1x ,2x ,...,n x ),max(0x ,1x ,2x ,...,n x )]时,称为内插,否则称为外插式外推,特别地,当p(x)为不超过n 次多项式时称为n 阶Lagrange 插值。
拉格朗日插值 实验报告

拉格朗日插值实验报告拉格朗日插值实验报告引言:拉格朗日插值是一种常用的数值分析方法,用于在给定一组已知数据点的情况下,通过构造一个多项式函数来逼近这些数据点。
该方法在科学计算、数据处理和图像处理等领域中被广泛应用。
本实验旨在通过实际操作和计算,深入了解拉格朗日插值的原理和应用。
实验目的:1. 理解拉格朗日插值的原理和基本思想;2. 学会使用拉格朗日插值方法进行数据逼近;3. 掌握拉格朗日插值的优缺点及适用范围。
实验步骤:1. 收集一组已知数据点,包括自变量和因变量;2. 根据数据点,构造拉格朗日插值多项式;3. 利用插值多项式,计算给定自变量对应的因变量;4. 分析插值结果的准确性和逼近程度。
实验结果与分析:在实验中,我们选取了一组简单的数据点进行拉格朗日插值的计算和分析。
数据点包括自变量x和因变量y,如下所示:x | 0 | 1 | 2 | 3 | 4 |y | 1 | 2 | 3 | 5 | 8 |根据这组数据点,我们构造了拉格朗日插值多项式:L(x) = y₀ * L₀(x) + y₁ * L₁(x) + y₂ * L₂(x) + y₃ * L₃(x) + y₄ * L₄(x)其中,L₀(x),L₁(x),L₂(x),L₃(x),L₄(x)分别是拉格朗日插值多项式的基函数,计算公式如下:L₀(x) = (x - x₁) * (x - x₂) * (x - x₃) * (x - x₄) / (x₀ - x₁) * (x₀ - x₂) * (x₀- x₃) * (x₀ - x₄)L₁(x) = (x - x₀) * (x - x₂) * (x - x₃) * (x - x₄) / (x₁ - x₀) * (x₁ - x₂) * (x₁- x₃) * (x₁ - x₄)L₂(x) = (x - x₀) * (x - x₁) * (x - x₃) * (x - x₄) / (x₂ - x₀) * (x₂ - x₁) * (x₂- x₃) * (x₂ - x₄)L₃(x) = (x - x₀) * (x - x₁) * (x - x₂) * (x - x₄) / (x₃ - x₀) * (x₃ - x₁) * (x₃- x₂) * (x₃ - x₄)L₄(x) = (x - x₀) * (x - x₁) * (x - x₂) * (x - x₃) / (x₄ - x₀) * (x₄ - x₁) * (x₄- x₂) * (x₄ - x₃)通过计算,我们可以得到给定自变量x对应的因变量y的逼近值。
拉格朗日和牛顿插值法的C 方法实现(数值分析上机实验)

数值分析上机实验实验一一.上机题目:已知: 4 =2,9 =3,16 =4分别用二次Lagrange和Newton插值法求7 的近似值。
二.解题方法:1.lagrange方法:设x0=4,y0=2,x1=9,y1=3,x2=16,y2=4代入方程:(x1-X)(x2-X)/(x1-x0)(x2-x0)*y0+(x0-X)(x2-X)/(x0-x1)(x2-x1)*y1+(x1-X)(x0-X)/(x1-x2)(x0-x2)*y2令X=7代入方程得 Y=2.628572.Newton方法:设x0=4,y0=2,x1=9,y1=3,x2=16,y2=4建表4 29 3 0.216 4 0.14286 -0.00476f(x)=f(x0)+f[x0,x1](X-x0)+f[x0,x1,x2](X-x0)(X-x1)(X-x2)令X=7代入方程得Y=2.62857三.算法公式步骤:grange方法:通过公式写出算法并得出最后的值Y:for(b=0;b<m;b++)//完成公式f(Xn)外层嵌套循环f[b]=i//{double l=1;//保证每次跳出内层循环将L置1 不会将第一项的值带入下一项//for(a=0;a<m;a++)//完成公式f(Xn)内层嵌套循环f[a]=j//{if(a!=b)//完成定义i=1,i!=j//l=(f[a]-F)/(f[a]-f[b])*l;//完成(j-m)/(j-i)//la=l*g[b];//完成公式的F(X0)=f(X0)*Y0并累乘输出结果// }Y=la+Y;//累加x0y0+x1y1+...得最后结果//}2.Newton方法:先建表,通过二维数组的思想建表for(l=2;l<m+2;l++)//外层循环控制y阶数//{for(k=1;k<m+1;k++)//内层循环控制x个数//{a[k][l]=(a[k][l-1]-a[k-1][l-1])/(a[k][0]-a[k-l+1][0]);//完成f(x0,x1,...,xn)并存表//}}填表。
计算方法实验报告

实验报告计算方法算法设计及其MATLAB实现院系:数学科学学院专业:学号:姓名:实验1 插值方法——拉格朗日插值法一、实验目的[1] 了解lagrange 插值法的基本原理和方法; [2] 通过实例掌握用MA TLAB 求插值的方法; [3] 编程实现lagrange 插值二、方法原理Lagrange 插值公式y= j ni nij j y ∑∏=≠≠0ji j,0x -x x -x )(,两点插值和三点插值分别是lagrange的n=1,2的特殊情况。
Lagrange 的插值算法:没给定数据表(i i y x ,),i=0,1,2…….n 及插值点x ,根据lagrange 求得的插值结果y 。
三、实验流程(略)四、实验内容 MA TLAB 文件:function [y0,N]=Lagrange_eval(X,Y,x0) format long e ; m=length(X); N=zeros(m,1); y0=0; for i=1:m N(i)=1; for j=1:m if j~=iN(i)=N(i)*(x0-X(j))/(X(i)-X(j)); end endy0=y0+Y(i)*N(i);end算例:已知f(x)=lnx的数值表如下,计算lagrange插值多项式在x=x0处的值。
表 1解答结果:线性插值结果:二次插值结果:三次插值结果:五、实验分析而ln0.45准确值为 -0.79850769621777,针对所给数据表时运用插值方法,人们往往迭代的插值节点越多,插值结果就越准确,这种观点并不一定可靠,实际计算结果表明,如果选取的节点越多,lagrange 插值结果反而会严重失真,因此,我们要因题选取适当的节点。
实验二、插值方法——Hermite 插值一、实验目的1、学习和掌握Hermite 算法的思想;2、学会利用分段三次Hermite 插值计算插值点处的函数近似值。
二、插值算法的基本思想:函数的变化规律往往是通过一组实验数据给出,为了研究此变化规律往往需要求出不在表上的一些函数值。
实验一函数插值方法

实验⼀函数插值⽅法《数值分析》课程设计实验报告实验⼀函数插值⽅法⼀、问题提出对于给定的⼀元函数()y f x =的n+1个节点值(),0,1,,j j y f x j n == 。
试⽤Lagrange 公式求其插值多项式或分段⼆次Lagrange 插值多项式。
数据如下:(1)求五次Lagrange 多项式5L ()x ,和分段三次插值多项式,计算(0.596)f ,(0.99)f 的值。
(提⽰:结果为(0.596)0.625732f ≈, (0.99) 1.05423f ≈)(2)试构造Lagrange 多项式6L ()x ,计算的(1.8)f ,(6.15)f 值。
(提⽰:结果为(1.8)0.164762f ≈,(6.15)0.001266f ≈)⼆、实验步骤1、利⽤Lagrange 插值公式00,()n nin k k i i k k ix x L x y x x ==≠??-= ?-??∑∏编写出插值多项式程序; function [A1,LN,L1,B1]=lagrange(X,Y) m=length(X); LN=ones(m,m); for k=1: m x1=1; for i=1:m ifk~=ix1=conv(x1,poly(X(i)))/(X(k)-X(i));endL1(k,:)=x1; B1(k,:)=poly2sym (x1)endA1=Y*L1;LN=Y*B1在主显⽰区,输⼊五次Lagrange多项式L()5x程序:>> X=[0.4 0.55 0.65 0.80 0.95 1.05];>> Y=[0.41075 0.57815 0.69675 0.90 1.00 1.25382];>> [A1,LN,L1,B1]=lagrange(X,Y)>> plot(X,A1);>> F=poly2sym(A1)运⾏后,输出五次Lagrange多项式L()5x的结果:A1 =121.6264 -422.7503 572.5667 -377.2549 121.9718 -15.0845F =(2139673480305281*x^5)/17592186044416 - (1859275536318005*x^4)/4398046511104 + (9836621836743*x^3)/17179869184 - (414796119737013*x^2)/1099511627776 + (2145751274873259*x)/17592186044416 - 1061478972867847/70368744177664拉格朗⽇插值多项式5()L x的图如下:2、给出插值多项式或分段三次插值多项式的表达式;function [f,ff] = Hermite3(x,y,y1)f = 0.0;if(length(x) == length(y))if(length(y) == length(y1))n = length(x);elsedisp('y和y的导数的维数不相等');return;endelsedisp('x和y的维数不相等! ');return;endfor i=1:nh = 1.0;a = 0.0;for j=1:nif( j ~= i)h = h*(t-x(j))^2/((x(i)-x(j))^2);a = a + 1/(x(i)-x(j));endendf = f + h*((x(i)-t)*(2*a*y(i)-y1(i))+y(i));endff = subs(f,'t');x的程序:在主显⽰区,输⼊分段三次艾尔⽶特插值多项式L()5>> x=[0.4 0.55 0.65 0.80 0.95 1.05];>> y=[0.41075 0.57815 0.69675 0.90 1.00 1.25382];>> y1=[2.3440 0.9032 1.4329 0.9903 0.9170 5.1439];>> [f,ff] = Hermite3(x,y,y1);>> ffx的输出结果:运⾏后,分段三次艾尔⽶特插值多项式L()5ff =(6400000000*(t - 4/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t -19/20)^2*(t - 21/20)^2*((2240245151070481*t)/140737488355328 - 52393133567890089/8796093022208000))/184041 -(16000000*((6348013345609171*t)/140737488355328 - 85523418631741336287/1759218604441600000)*(t - 2/5)^2*(t -4/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t - 19/20)^2)/169 + (16000000*((4105617466549689*t)/281474976710656 -5238387122042657959/703687441776640000)*(t - 2/5)^2*(t - 4/5)^2*(t - 13/20)^2*(t - 19/20)^2*(t - 21/20)^2)/9 - (256000000* ((35097*t)/10000 - 46347/12500)*(t - 2/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t - 19/20)^2*(t - 21/20)^2)/81 - (400000000* ((13147*t)/20000 - 449611/400000)*(t - 2/5)^2*(t - 4/5)^2*(t - 11/20)^2*(t - 19/20)^2*(t - 21/20)^2)/81 - (10000000000* ((84913*t)/11000 - 1833347/220000)*(t - 2/5)^2*(t - 4/5)^2*(t - 11/20)^2*(t - 13/20)^2*(t - 21/20)^2)/9801x的图如下:分段三次艾尔⽶特插值多项式L()53、根据节点选取原则,对问题(2)⽤三点插值或⼆点插值,其结果如何;>> X=[1 2 3 4 5 6 7];>> Y=[0.368 0.135 0.050 0.018 0.007 0.002 0.001];>> [A1,LN,L1,B1]=lagrange(X,Y)>> plot(X,A1);>> F=poly2sym(A1)运⾏后,输出结果的Lagrange 多项式L ()6x 的结果:A1 =0.0001 -0.0016 0.0186 -0.1175 0.4419 -0.9683 0.9950F=(4304240283865561*x^6)/73786976294838206464- (7417128346304051*x^5)/4611686018427387904 +(223*x^4)/12000- (2821*x^3)/24000+(994976512675275*x^2)/2251799813685248-(19367*x)/20000 + 199/200Lagrange 多项式L ()6x 的图如下:4、对此插值问题⽤Newton 插值多项式其结果如何。
数值分析实验报告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 ,
数值分析实验四(Lagrange插值)

《数值分析》实验报告实验编号:实验四课题名称:Lagrange插值一、算法介绍对Lagrange型的n次插值多项式,先构造n+1个插值节点x[0],x[1],…,x[n]上的n次插值基函数对任一点xi所对应的插值基函数l[i](x)=[(x-x[0])…(x-x[i-1])(x-x[i+1])…(x-x[n])]/[(x[i]-x[0])…(x[i]-x[i-1])(x[i]-x[i+1 ])…(x[i]-x[n])],其中i=0,1,2,…,n。
有了这n+1个n次插值基函数,n次Lagrange 型插值多项式就容易写出来了,表达式为:f(x)=y[1]*l[1](x)+y[2]*l[2](x)+…+y[n]*l[n](x)。
此程序中n=10。
二、程序代码// testView.cpp : implementation of the CTestView class//#include "stdafx.h"#include "test.h"#include "testDoc.h"#include "testView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CTestViewIMPLEMENT_DYNCREATE(CTestView, CView)BEGIN_MESSAGE_MAP(CTestView, CView)//{{AFX_MSG_MAP(CTestView)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CTestView construction/destructionCTestView::CTestView(){// TODO: add construction code here}CTestView::~CTestView(){}BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CTestView drawingvoid CTestView::OnDraw(CDC* pDC){CTestDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereint i,j,k;double x,y,p_x,p_y,l,xx[100],f[100],F[100],sum,p_sum;CPen MyPen,*OldPen;pDC->SetViewportOrg(400,400); //定义坐标原点for(i=-500;i<500;i++){pDC->SetPixel(0,i,RGB(0,0,0));pDC->SetPixel(i,0,RGB(0,0,0)); //画出坐标}pDC->TextOut(-210,5,"-1");pDC->TextOut(196,5,"1");//原函数MyPen.CreatePen(PS_SOLID,1,RGB(255,0,0));//定义画笔颜色OldPen=pDC->SelectObject(&MyPen);x=-1.0,y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->MoveTo(p_x,p_y);for (x=-1.0;x<=1.0;x+=0.0001){y=1/(1+25*x*x);p_x=x*200;p_y=-y*200;pDC->LineTo(p_x,p_y);}pDC->SelectObject(OldPen);MyPen.DeleteObject();//Lagrange插值x=-1.0;MyPen.CreatePen(PS_SOLID,1,RGB(0,255,0));OldPen=pDC->SelectObject(&MyPen);for(i=0;i<=10;i++){f[i]=1/(1+25*x*x);xx[i]=x;x+=0.2;}x=-1.0;y=1/(1+25*x*x);p_x=x*200,p_y=-y*200; //将x和y坐标各放大200倍pDC->MoveTo(p_x,p_y);for(k=0;k<=1000;k++){sum=0;for(i=0;i<=10;i++){l=1;for(j=0;j<=10;j++){if(i!=j)l=l*(x-xx[j])/(xx[i]-xx[j]);}sum+=f[i]*l;}p_x=x*200;p_y=-sum*200;pDC->LineTo(p_x,p_y);x+=0.002;}pDC->SelectObject(OldPen);MyPen.DeleteObject();}/////////////////////////////////////////////////////////////////////////////// CTestView printingBOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CTestView diagnostics#ifdef _DEBUGvoid CTestView::AssertValid() const{CView::AssertValid();}void CTestView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CTestDoc* CTestView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestDoc)));return (CTestDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CTestView message handlers三、运算结果截屏红色的曲线为原函数图像,绿色曲线为Lagerange插值多项式函数对应的图像四、算法分析上述图像中绿色的曲线为Lagrange插值多项式所对应的图像,通过观察可见函数图像在靠近区间端点的地方出现了Runge现象。
数值分析实验报告

x0[i] = 0.01*i;//采用循环对数组变量x[100]赋值
}
rk_getback(x0, y0, 0.01, -50);//调用R-K函数计算得到每一个x(n)对应的y(n)值
CSeries embro = (CSeries)m_chart.Series(0);//使用画图控件Teechart进行画图
}
for (i = 0; i <= 200; i++)//利用插值多项式计算201个数值用于绘图
{
a1[i] = u + i*0.01;
b1[i] = 1 / (1 + 25 * a1[i] * a1[i]);
y[i] = Lagrange(a1[i], n, a2, b2);
}
m_chart.AddSeries(0);//用teechart绘制插值多项式函数图像
m3 = m.transpose()*y;//计算Y矩阵
m4 = m2*m3;//计算系数矩阵
CSeries serdemo = (CSeries)m_mchart.Series(0);//创建CSeries对象
MatrixXd m5(1, 4),m6(1,1);//创建1*4和1*1的矩阵
int i;
考虑在一个固定的区间上用插值逼近一个函数。显然Lagrange插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。Runge给出的一个例子是极著名并富有启发性的。设区间[-1,1]上函数
考虑区间[-1,1]的一个等距划分,分点为
则拉格朗日插值多项式为
int i, n =19;
double j = 2.0 / (n ), u = -1.0, v = 1.0;
数值分析插值法

实验报告专用纸实验项目名称插值法课程名称计算机数值方法教师评语及成绩:实验成绩:教师签字:(请按照实验报告的有关要求书写,一般必须包括:1、实验目的;2、实验内容;3、实验步骤与方法;4、实验数据与程序清单;5、出现的问题及解决方法;6、实验结果、结果分析与体会等内容。
)1、实验目的(1)学会Lagrange插值、Newton插值、分段线性插值等基本插值方法;(2)讨论插值的Runge现象,掌握分段线性插值方法;(3)学会用Matlab或C等实现多项式拟合。
2、实验内容(1)用Newton插值多项式及分段线性插值函数对数据进行插值;(2)比较牛顿插值与分段线性插值法;(3)函数f(x)的多项式拟合;输入:拟合数据序列{x i,y i},i=0,1,2,…,m;输出:多项式拟合函数,并画出拟合曲线和f(x)。
3、实验步骤(1)用MATLAB编写独立的拉格朗日插值多项式的函数(2)用MATLAB编写独立的牛顿插值多项式(3)利用编写好的函数计算实际问题(4)记录实验数据(5)对运行结果进行分析(6)根据实验情况和结果撰写并提交实验报告。
4、实验原理(1)拉格朗日插值多项式(2)牛顿插值多项式(3)分段线性插值5、实验程序(MATLAB)6、实验结果与分析(1)实验结果图1龙格函数图形图2Runge(10)的图形图3Runge(12)的图形图4Runge(20)的图形输入:拟合数据序列{x i,y i},i=0,1,2,…,m;01491625364964xi012345678yi输出:多项式拟合函数,并画出拟合曲线和f(x)。
图5拟合曲线图(2)结果分析在本题中,据Runge图形可知,在区间两端点附近,节点等距的条件下,n越大,插值多项式的值与f(x)的偏离程度越大。
因此,Runge现象说明,并非插值多项式的次数越高,其近似代替f(x)的精度就越高。
分段线性插值法可以解决Runge现象。
牛顿插值法克服了拉格朗日插值法不具有继承性的缺点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验报告(01)
一、实验目的
通过实验锻炼和掌握的能力掌握Lagrange 插值方法并学会利用计算机编程计算函数值。
二、实验内容
给出()ln f x x =的数值表 x
0.4 0.5 0.6 0.7 0.8 ln x
-0.916291 -0.693147 -0.510826 -0.356675 -0.223144
用线性插值和二次插值计算的近似值。
计算ln(0.54)。
三、编程思路
0.5
图1 程序框图
四、Matlab 程序代码
function y0=lagrange(x,y,x0)
nx=length(x);
ny=length(y);
if nx~=ny
return;
end
n=nx;
y0=0;
for k=1:n
p=1;
for j=1;n
if j~=k
p=p.*(x0-x(j))./(x(k)-x(j));
end
end
y0=y0+p*y(k);
end
% x=[0.5 0.6];
% y=[-0.693147 -0.510826];
x0=0.54;
y0=lagrange(x,y,x0);
y0
% x=[0.4 0.5 0.6];
% y=[-0.916296 -0.693147 -0.510826];
x0=0.54;
y0=lagrange(x,y,x0);
y0
五、数值结果及分析
(数值运行结果及对结果的分析)
y0 =
-0.6202
y0 =
-0.6202
六、实验体会
(计算中出现的问题,解决方法,实验体会)
输入程序时括号含义不明,或者输入括号减少,导致结果错误。
仔细检查,寻找错误,
一定要仔细认真。