- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值计算实习报告-牛顿插值法
数值计算实习课程设计
姓名:张光宇
指导教师;谭高山
学号:119084169
目录
实验目的
问题的提出
牛顿插值法的原理
差商概念的引出
牛顿插值公式及其余项的公式
牛顿插值法计算步骤
牛顿插值多项式的程序实现
图像对照牛顿插值多项式
牛顿插值多项式总结
附1
附2
1、实验目的:通过对牛顿插值多项式的Matlab程序实现,深入了解牛顿插值多项式的原理及编程解决实际问题的能力.
2、问题的提出
我们知道Lagrange插值多项式的插值基函数为
理论分析中很方便,但是当插值节点增减时全部插值基函数就要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的;
Lagrange 插值虽然易算,但若要增加一个节点时,全部基函数 都需重新算过。
3、牛顿插值多项式的原理
我们知道两点直线公式有:
我们考虑点斜式,两点为((x0,y0)(x1,y1)),则直线方程为:
那么,在此基础上增加一个节点(x2,y2),则过这三个点的插值多项式就是:
c(x)应该是一个二次多项式。根据插值条件
有
根据插值条件:
可以求出:
重新写p2(x):
有
...
4、下面引入差商和差分的概念
定义:
1阶差商
2阶差商
n+1阶差商
可以证明差商具有如下性质:
(2) k 阶差商关于节点是对称的,或者说均差与节点顺序无关,即
均差表
零阶均差 一阶均差 二阶均差 三阶均差 X0 f(X0) X1 f(X1) f[X0, X1] X2 f(X2) f[X1, X2] f[X0,X1, X2] X3 f(X3) f[X2, X3] f[X1, X2,X3] f[X0,X1, X2 X3] ... ... ... ... ...
5、下面给出牛顿插值公式及其余项的公式:
.............(1)
............(2)
… … … …
.........(n+1)
则有:
其中
6、 牛顿插值法计算步骤:
牛顿插值法利用函数在某区间中若干点的函数值,作出牛顿插值多项式,在这些点上取已知值,在区间的其他点上用牛顿插值多项式的值作为函数的近似值。
输入值及(;要计算的函数点。
对给定的由
计算的值。
3.输出。
7、Matlab程序实现
例:f(x)=lnx的数值如表所示, 构造牛顿插值多项式并求ln0.53的值。
X 0.4 0.5 0.6 0.7 0.8 lnx -0.916291 -0.693147 -0.510826 -0.357765 -0.223144
解:
由表可知x0=0.4, x1=0.5, x2=0.6, x3=0.7, x4=0.7,
函数值:y0=-0.916291, y1=-0.693147, y2=-0.510826,
y3=-0.357765, y4=-0.223144
在matlab中输入如下命令:
clc
clear
newpoly([0.4,0.5,0.6,0.7,0.8],[ -0.916291, -0.693147, -0.510826, -0.357765, - 0.223144])
计算结果如下:
ans =
-0.3096 2.6083 -5.4861 5.6921 -2.4744
由此看出所求的牛顿多项式为:
P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744
P(0.53)= -0.6347。
图像对照牛顿插值多项式
9、小结:
本实验通过MATLAB编程实现求解牛顿K次插值多项式,能加深对牛顿插值法的基本思路和步骤的理解。同时也加深了对均差的概念及其性质的理解。牛顿插值法正是应用均差的性质,克服了拉格朗日插值法的主要缺点。
附1:
matlab求解插值多项式,返回多项式的系数
function[c, d]=newpoly(x, y)
%牛顿插值的MATLAB实现
%这里 x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。
%c为所求的牛顿插值多项式的系数构成的向量。
n=length(x);%取x的个数。
d=zeros(n, n);%构造n*n的空数组。
d(: , 1)=y';
for j=2 : n
for
文档评论(0)