拉格朗日插值实验报告

  • 格式:doc
  • 大小:164.50 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称: 实验一 拉格朗日插值

1 引言

我们在生产生活中常常会遇到这样的问题:某个实际问题中,函数f (x)在区间[a,b]上存在且连续,但却很难找到其表达式,只能通过实验和观测得到有限点上的函数表。显然,根据这些点的函数值来求其它点的函数值是非常困难的。有些情况虽然可以写出表达式,但结构复杂,使用不方便。所以我们总是希望根据已有的数据点(或函数表)来构造某个简单函数P (x)作为f (x)的近似值。插值法是解决此类问题的一种比较古老的、但却很常用的方法。它不仅直接广泛地应用于生产实际和科学研究中,而且也是进一步学习数值计算方法的基础。

2 实验目的和要求

运用Matlab 编写三个.m 文件,定义三种插值函数,要求一次性输入整函数表,并利用计算机选择在插值计算中所需的节点。分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f (0.15),f (0.31),f (0.47)的近似值。已知函数表如下:

3 算法原理与流程图

(1)原理

设函数y=在插值区间[a,b]上连续,且在n+1个不同的插值节点a≤x 0,x 1,…,x n ≤b 上分别取值y 0,y 1,…,y n 。目的是要在一个性质优良、便于计算的插值函数类Φ中,求一简单函数

P (x),满足插值条件P (x i )=y i (i=0,1,…,n),而在其他点x≠x i 上,作为f (x)近似值。求插值函数P (x)的方法称为插值法。在本实验中,采用拉格朗日插值法。 ①分段低次插值

当给定了n+1个点x 0

1

1

11

1)()(------+--=≈i i i i i i i i x x x x y x x x x y x P x f

这种分段低次插值叫分段线性插值,又称折线插值。

类似地,我们可以选取距离x 最近的三个节点x i-1,x i 与x i+1,然后进行二次插值,即得

∑∏+-=+≠-

=⎥⎥⎥⎦

⎢⎢⎢⎣

⎪⎪⎭⎫

⎝⎛

--=≈1

1

112)()(i i k i k j i j j k j k x x x x y x P x f 这种分段低次插值叫分段二次插值,又称分段抛物线插值。

②全区间上拉格朗日插值

对节点

x i

(i=0,1,…,n)中任一点x

k

(0≤k≤n),作一n次多项式l

k

(x),使它在该点上的

取值为1,在其余点x

i

(i=0,1,…,k-1,k+1,…,n)上取值为零。对应于每一节点

x

k

(k=0,1,…,n),都能写出一个满足此条件的多项式,这样写出了n+1个多项式

l

(x),l

1

(x),…,l

n

(x),其中

0111

()()()()()()

k k k k n

l x A x x x x x x x x x x

-+

=----•-;

由条件()1

k k

l x=可得

011

1

()()()()

k

k k k k k k n

A

x x x x x x x x

-+

=

----

于是我们可以得出如下的拉格朗日n次插值多项式(对于全区间上的插值,n取函数表的长度)

0011

011

0011

()()()()

()()()()

()()()()

n n n

n

k k n

k

k k k k k k k n

P x y l x y l x y l x

x x x x x x x x

y

x x x x x x x x

-+

=-+

=++

----

=

----

(2)流程图

分段线性插值分段二次插值全区间拉格朗日插值

4程序代码及注释

1、分段线性插值

5算例分析

3、分段线性插值

4、分段二次插值

5、全区间拉格朗日插值

6讨论与结论1

Function lagrange(x0,y0,x) piece_linear(x0,y

0,x)

piece_square(x0,y

0,x)

运行时间(s) 0.000272 0.000375 0.000272

2、程序优化

由分段线性插值和分段二次插值的原理,x取值在函数表围时,插值结果有意义,而当x 取值在函数表围以外,利用分段线性插值公式仍可以进行运算并得到一个值,但其结果不准确;分段二次插值则无法找到三个合适的点以求插值,不予以输出结果;若输入的函数表x 与y

n=length(x0);p=length(y0);m=length(x);

if n~=p

fprintf('Error! Please input again!\n');

if zx0(n)

fprintf('Error!x(%d) is out of range!\n',i);

break;

end

3

上图为三种方法的插值曲线,其中x取0到0.5,步长为0.001,由图可得,三种曲线非常接

相关主题