插值方法(1)

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

合肥学院

《数值分析》课程设计

报告书

题目多项式插值及其应用院系名称合肥学院数学与物理系专业(班级)信息与计算科学一班

姓名(学号)钱志海(1007011013)

印宛如(1007011016)

张鑫(1007011017)指导教师孙梅兰

完成时间 2013-3-4

一、实验设计目的

1、插值多项式的唯一性表明,对同一组节点,它们的插值多项式是唯一的,

可能由不同的方法,会得到不同形式的插值多项式,但它们之间可以相互转化,本质相同,当然误差也一样。

2、n +1组节点只能确定一个不超过n次的多项式,若>n次,如设为 n+1(x),

则有n+2有待定参数a0,a1,…,an, an+1需确定,而n +1个组节点,只构成n +1个插值条件,即构成n+1个方程,只能确定n+1个变量的方程组。

3、上述证明是构造性的(给出解决问题的方法)即以通过解线性方程组来

确定插值多项式,但这种方法的计算量偏大,计算步骤较多,容易使舍入误差增大。因此实际计算中需要用其它方式进行故不能用解方程组的方法获得插值多项式。我们利用牛顿插值、哈密尔特插值、分段插值、样条插值的方法可以有效解决n较大,方程组较多的繁琐的严重病态。

二、插值方法的理论基础

1、Lagrange插值

Lagrange插值是n次多项式插值,其成功地用构造插值基函数的方法解决了求n次多项式插值函数问题。

★基本思想将待求的n次多项式插值函数pn(x)改写成另一种表示方式,再利用插值条件⑴确定其中的待定函数,从而求出插值多项式。

2、牛顿插值

Newton插值也是n次多项式插值,它提出另一种构造插值多项式的方法,与Lagrange插值相比,具有承袭性和易于变动节点的特点。

★基本思想将待求的n次插值多项式Pn(x)改写为具有承袭性的形式,然后利用插值条件⑴确定Pn(x)的待定系数,以求出所要的插值函数。

3、哈密尔特插值

Hermite插值是利用未知函数f(x)在插值节点上的函数值及导数值来构造插值多项式的,起其提法为:给定n+1个互异的节点x0,x1,……,xn上的函数值和导数值

求一个2n+1次多项式H2n+1(x)满足插值条件

H2n+1(xk)=yk

H'2n+1(xk)=y'k k=0,1,2,……,n ⒀

如上求出的H2n+1(x)称为2n+1次Hermite插值函数,它与被插函数

一般有更好的密合度.

★基本思想

利用Lagrange插值函数的构造方法,先设定函数形式,再利

用插值条件⒀求出插值函数.

4、分段插值

插值多项式余项公式说明插值节点越多,误差越小,函数逐近越好,但后来人们发现,事实并非如此,例如:取被插函数,在[-5,5]上的n+1个等距节点:计算出f(xk)后得到Lagrange插值多项式Ln(x),考虑[-5,5]上的一点x=5-5/n,分别取n=2,6,10,14,18计算f(x),Ln(x)及对应的误差Rn(x),得下表

从表中可知,随节点个数n的增加,误差lRn(x)l不但没减小,反而不断的增大.这个例子最早是由Runge研究,后来人们把这种节点加密但误差增大的现象称为Runge现象.出现Runge现象的原因主要是当节点n较大时,对应的是高次插值多项式,此差得积累"淹没"了增加节点减少的精度.Runge现象否定了用高次插值公式提高逼近精度的想法,本节的分段插值就是克服Runge现象引入的一种插值方法.

分段多项式插值的定义为

定义2: a=x0

如果函数Φ(x)满足条件

i) Φ(x)在[a,b]上连续

ii) Φ(xr)=yR,R =0,1,…,n

iii) Φ(x)zai 每个小区间[xR,xR+1]是m次多项式,

R=0,1,…,n-1则称Φ(x)为f(x)在[a,b]上的分段m次插值多项式

实用中,常用次数不超过5的底次分段插值多项式,本节只介绍分段线性插值和分段三次Hermite插值,其中分段三次Hermite插值还额外要求分段插值函数Φ(x)

在节点上与被插值函数f(x)有相同的导数值,即

★基本思想将被插值函数f〔x〕的插值节点由小到大排序,然后每对相邻的两个节点为端点的区间上用m 次多项式去近似f〔x〕.

5、样条插值

样条插值是一种改进的分段插值。

定义若函数在区间〖a,b〗上给定节点a=x0

⒈S(xj)=yj,j=0,1,2,…,n;

三、程序代码及运行结果

例一:牛顿差值代码

format long;

way_in = input('请选择输入的内容(1或2):\n1、输入为f(x)表达式,区间[a,b]及其等分数n 的值\n2、输入为f(x)表达式和插值点横坐标xi的值\n');

switch way_in

case 1

f = input('请输入函数表达式:f(x) = ', 's');

a = input('请输入区间左端值a:');

b = input('请输入区间右端值b:');

n = input('请输入区间等分值n:');

np = input('请输入插值函数在区间内绘图点数(默认输入100):');

for i=1:n+1

x(i) = a + (b-a)/n*(i-1);

y(i,1) = eval(subs(f,'x(i)','x'));

end

for j=1:n

for k=j:n

temp=y(k+1,j)-y(k,j);

y(k+1,j+1)=temp/(x(k+1)-x(k+1-j)) ;

end

c(j)=y(j,j);

end

c(j+1)=y(j+1,j+1);

for k=1:np-1

xx(k)= a + (b-a)/np*k;

yy(k) = eval(subs(f,'xx(k)','x'));

end

for k=1:np-1

xs=xx(k);

for i=1:n+1

if i==1

s(i)=c(i);

else

s(i)=c(i);

相关文档
最新文档