- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
牛顿插值和拉格朗日插值
数值计算方法
Newton插值函数和三次插值样条函数
主要内容
一、插值函数的基本思想
二、插值函数的基本算法
三、插值函数的Matlab实现
四、举例说明
五、插值函数的优、缺点
六、附录
一、插值函数的基本思想
在科学研究和实践活动中,我们所遇到的大量函数,有相当一部分是通过观测和实验得到的,虽然其函数关系在某个区间上是存在的,但是却不知道具体的表达式,只能通过观测或实验得到一些离散点的函数值、导数值,因此希望对这样的函数用一个简单的解析表达式近似的给出整体上的描述。
在数学上,该问题相当于,函数在某个区间上存在且连续,但不知道解析表达式,只给出上离散点的函数值,如何计算在上其它点的函数值。
插值法的基本思想就是构造一个简单函数作为的近似表达式,以的值作为函数的近似值,而且要求在给定点与取值相同,即。通常我们称为的插值函数,其中称为插值节。
插值函数的基本算法
1、Newton插值函数
1)Newton插值公式
首先考察待定常数与差商之间的关系。
,。
对于一般的,我们用归纳法证得
。
因此Newton插值公式 为
。
2)Newton向前插值公式
设插值节点为等距节点,在newton插值公式中用向前差分代替差商,可得
令,则,于是
3)Newton向后插值公式
在Newton插值公式中改变插值节点的次序并用向后差分代替差商,可得
令,则可得
注:① 差商的定义
称
为关于点的阶差商,其中称为关于的零阶差商。
② 差分的定义
设函数在等距节点上的函数值,称为步长。
引入记号
分别称为在节点的一阶向前差分,一阶向后差分和一阶中心差分,称为差分算子。
2、三次插值样条函数(三弯矩方程)
首先引入区间的一个划分
,
称为剖分点,为内剖分点,小区间为第个剖分单元。
记,它们分别表示被插函数在节点处的函数值、一阶和二阶导数值。
设关于剖分的分段多项式插值函数空间为
,
它表示在每个剖分单元为次多项式且在整个定义区间上阶连续可微的函数的全体。称为关于剖分重数为的次多项式样条空间。其空间维数为。
这时取插值函数空间为,它表示在每个剖分单元为三次多项式且在区间上二阶连续可微的函数全体。易知该插值函数空间的维数为。
利用该空间,可以定义相应的三次插值样条函数,其关键是给出适当的插值条件,首先自然要求在所有内节点上满足
但这些插值条件的个数仅为,为了将唯一确定,还需要提供另外4个插值条件(这里我们只考虑第一种取法)
即I型边界条件:
通过计算,若记
,,
我们有
,
这里 ,其中 表示的二阶差商。
在端点和处,我们利用附加边界条件,有
从而可以得到一个关于待定参数的阶线性代数方程组,其矩阵形式为
(*)
我们称方程组(*)为三弯矩方程。
插值函数的Matlab实现
1)Newton插值函数
function []=newton(x,y,v)
x=input(X=);
y=input(Y=);
v=input(V=);
n=length(x);
t=zeros(n,n);
u=0;
for i=1:n
t(i,1)=y(i);
end
for j=2:n
for i=2:n
if i=j
t(i,j)=(t(i,j-1)-t(i-1,j-1))/(x(i)-x(i-j+1));
end
end
end
for k=1:n
s=1;
m=1;
for j=1:k
if jk
s=s*(v-x(j));
end
end
m=s*t(k,k);
u=u+m;
end
disp(插值结果=);
disp(u);
end
2)Newton向前插值函数
function y0=newtonint1(x,y,x0)
n=length(y);
h=x(2)-x(1);
t=(x0-x(1))/h;
Y=zeros(n);Y(:,1)=y;
for k=1:n-1
Y(:,k+1)=[diff(y,k);zeros(k,1)];
end
y0=Y(1,1);
for i=1:n-1
z=t;
for k=1:i-1
z=z*(t-k);
end
y0=y0+Y(1,i+1)*z/prod([1:i]);
end
3)Newton向后插值函数
function y0=newto
文档评论(0)