hermite插值多项式的例题

hermite插值多项式的例题
hermite插值多项式的例题

例 若()f x 在[a,b]上有三阶连续导数,且已知()f x 在[,]a b 上两个互异的

点01,x x 上的函数值01(),()f x f x 和一阶导数值'

0()f x ,试求满足条件 ''001100()(),()(),()()H x f x H x f x H x f x ===

的插值多项式,并估计误差。

解 由给定的3 个插值条件,显然可确定一个次数不超过2次的埃尔米特插值多项式()H x , 又有()H x 应满足插值条件()()i i H x f x =,(0,1)i =,而节点01,x x 上的线性插值函数1()N x 也满足插值条件1()(),(0,1)i i N x f x i ==,故可设101()()()()H x N x A x x x x -=--,其中A 为待定常数,上式又可记为

101000101()()()()

()()[,]()()H x N x A x x x x f x x x f x x A x x x x =+--=+-+--

为了确定常数A ,对上式求导,得

'0110()[,][()()]H x f x x A x x x x =+-+-,

令0x x =代入,且注意插值条件''

001010()[,]()()H x f x x A x x f x =+-=, 于是有'01010[,]()f x x f x A x x -=-,即多项式()H x 为

'010********

[,]()()()()[,]()()f x x f x H x f x x x f x x x x x x x x -=+-+--- ,

当然也可先采用拉格朗日多项式构造,同样得到满足相同条件的插值多项式()H x 余项为(3)201()()()()6

f R x x x x x ξ=--。

牛顿插值法原理及应用

牛顿插值法 插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。如果这特定函数是多项式,就称它为插值多项式。当插值节点增减时全部插值基函数均要随之变化,这在实际计算中很不方便。为了克服这一缺点,提出了牛顿插值。牛顿插值通过求各阶差商,递推得到的一个公式: f(x)=f[x0]+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+...f[x0,...xn](x-x0 )...(x-xn-1)+Rn(x)。 插值函数 插值函数的概念及相关性质[1] 定义:设连续函数y-f(x) 在区间[a,b]上有定义,已知在n+1个互异的点 x0,x1,…xn上取值分别为y0,y1,…yn (设a≤ x1≤x2……≤xn≤b)。若在函数类中存在以简单函数P(x) ,使得P(xi)=yi,则称P(x) 为f(x)的插值函数. 称x1,x2,…xn 为插值节点,称[a,b]为插值区间。 定理:n次代数插值问题的解存在且唯一。

牛顿插值法C程序 程序框图#include void main() { float x[11],y[11][11],xx,temp,newton; int i,j,n; printf("Newton插值:\n请输入要运算的值:x="); scanf("%f",&xx); printf("请输入插值的次数(n<11):n="); scanf("%d",&n); printf("请输入%d组值:\n",n+1); for(i=0;i

Hermite插值方法

数值分析实验报告五 一、实验目的 理解Hermite插值方法,掌握Hermite插值算法设计 二、实验内容 使用vc++编程,实现该方法,即Hermite插值法 三、实验步骤 #include double herm(double x0,double x1,double y0,double y1,double h0,double g0,double g1,double x) { d oubl e alp0,alp1,bta0,bta1,t;double s; t=h0*h0; a lp0=(x-x1)*(x-x1)*(h0+2*(x-x0))/t/h0; a lp1=(x-x0)*(x-x0)*(h0-2*(x-x1))/t/h0; b ta0=(x-x0)*(x-x1)*(x-x1)/t; b ta1=(x-x1)*(x-x0)*(x-x0)/t; s=y0*alp0+y1*alp1+g0*bta0+g1*bta1; r eturn(s); } void main() { int n=7;double p0;double pn; double aa[8],bb[8],s=0; double xx[8]={0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9}; double yy[8]={0.4794,0.6442,0.7833,0.8912,0.9636,0.9975,0.9917,0.9463}; double g[8]; int i; double a[8],c[8],h[8]; cout<<"Please input p0 and pn"<>p0;cin>>pn; for(i=0;i<=n-1;i++) { h[i]=xx[i+1]-xx[i]; c out<<"h["<

Newton插值多项式的C程序实例

附录 (一)等距结点的Newton 插值法的程序算法步骤 步骤 按照差分公式,求差分.然后利用Newton 前插公式或Newton 后插公式并把数值带入.即可以求得n 次多项式. 它在计算机上的应用步骤如下: 步骤1 输入所要求的牛顿多项式的次数n ,步长h ,并依次输入1+n 个节点 ),(i i y x . 步骤2 求得各界差分 步骤3 代入牛顿插值公式,可计算得出结果 (二)等距节点下Newton 插值的实例 例题1 已知的值列表如下: 近似计算325.1tan ,305.1tan . 解: 采用Newton 向后插公式.为此,做差分表 ).2)(1(! 30016 .0)1(!20128.01690.00723.4)(3+++++ +=t t t t t t x p 将5.001 .033 .1325.1-=-= t 代入上式,得 tan1.325≈P 3 1.325 =3.9861 将5.201 .033 .1305.1-=-=t 上式中可以得到 tan1.305≈P 3 1.305 =3.6733

C程序如下: #include void main() { float x[11],y[11][11],xx,temp,newton,t,h; int i,j,n; printf("Newton插值:\n请输入要运算的值:x="); scanf("%f",&xx); printf("请输入插值的次数(n<11):n="); scanf("%d",&n); printf("步长:\n请输入要运算的值:h="); scanf("%f",&h); printf("请输入%d组值:\n",n+1); for(i=0;i

对拉格朗日插值法与牛顿插值法的学习和比较

对拉格朗日插值法与牛顿插值法的学习和比较 摘要:根据对拉格朗日插值法和牛顿插值法的理解,本文主要介绍了拉格朗日插值法和牛顿插值法的相关内容以及它们的区别。 关键词:拉格朗日插值法;牛顿插值法 The leaning and comparison of the Lagrange interpolation and Newton interpolation Abstract: Based on the understanding of the Lagrange interpolation and Newton interpolation ,this paper mainly describes some related knowledge as well as the difference between these two methods. Keywords: Lagrange interpolation ; Newton interpolation 前言 在工程和科学研究中出现的函数是多种多样的。常常会遇到这样的情况:在某个实际问题中,虽然可以断定所考虑的函数)(x f 在区间],[b a 上存在且连续,但却难以找到它的解析表达式,只能通过实验和观测得到在有限个点上的函数值(即一张函数表)。显然,要利用这张函数表来分析函数)(x f 的性态,甚至直接求出其他一些点上的函数值可能是非常困难的。面对这些情况,总希望根据所得函数表(或结构复杂的解析表达式),构造某个简单函数)(x P 作为)(x f 的近似。这样就有了插值法,插值法是解决此类问题目前常用的方法。 如设函数)(x f y =在区间],[b a 上连续,且在1+n 个不同的点b x x x a n ≤≤,,,10 上分别取值n y y y ,,,10 。 插值的目的就是要在一个性质优良、便于计算的函数类Φ中,求一简单函数)(x P ,使 ),,1,0()(n i y x P i i == 而在其他点i x x ≠上,作为)(x f 的近似。 通常,称区间],[b a 为插值区间,称点n x x x ,,,10 为插值节点,称式i i y x P =)(为插值条件,称函数类Φ为插值函数类,称)(x P 为函数)(x f 在节点n x x x ,,,10 处的插值函数。求插值函数)(x P 的方法称为插值法。 插值函数类Φ的取法不同,所求得的插值函数)(x P 逼近)(x f 的效果就不同。它的选择取决于使用上的需要,常用的有代数多项式、三角多项式和有理函数等。当选用代数多项式作为插值函数时,相应的插值问题就称为多项式插值。本文讨论的拉格朗日插值法与牛顿插值法就是这类插值问题。 在多项式插值中,最常见、最基本的问题是:求一次数不超过n 的代数多项式 n n x a x a a x P +++= 10)( 使),,1,0()(n i y x P i i n ==,其中,n a a a ,,,10 为实数。

三次埃尔米特插值

《计算方法》课程设计报告 学生姓名:张学阳学号:1009300132 陈洋1009300109 刘睿1009300122 学院:理学院 班级: 数学101 题目: 分段线性及三次埃尔米特插值通用程序 指导教师:宋云飞职称:讲师 朱秀丽讲师 尚宝欣讲师 2012年12月30日

目录 目录............................................................................................... I 一、摘要 (1) 二、算法设计 (1) 2.1分段线性插值 (1) 2.2分段三次埃尔米特插值 (1) 2.3功能框图 (1) 三、例题计算 (1) 四、误差及结果分析 (9) 4.1例题误差分析 (1) 4.2结点个数对插值结果的影响 (1) 五、总结及心得体会 (12) 参考文献 (13) 源程序 (14)

一、摘要 分段线性插值与分段定义的线性插值,在相邻插值节点的区间上对应的是同一个线性函数。由于它们的表现形式不一样从而产生为两种不同的计算方法,相应的误差表现形式也不一样.拉格朗日插值余项利用f(x)的二阶导数,要f(x)的二阶导数存在,对于二阶导数不存在的情况不能估算出它的误差,所以适用范围比较小.现在我们可以利用一阶导数就估 算出误差,给计算带来许多的方便。 为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差。为了克服这一缺点,一种全局化的分段插值方法——三次样条插值成为比较理想的工具。 在代数插值过程中,人们为了获得较好的近似效果,通常情况下是增加插值节点数.由于二次插值比线性插值近似效果好,因此容易错误地认为插值多项式次数越高越好.事实上,随着插值节点的增多,插值多项式不一定收敛到被插值函数.。通过分段低次插值或样条插值可以得到较好的近似逼近函数,分段低次插值具有公式简单、运算量小、稳定性好、收敛性有保证等优点.随着子区间长度h取得足够小,分段低次插值总能满足所要求的精度.因此分段低次插值应用十分广泛.。分段线性插值是分段低次插值中常见的方法之一,在本文中对函数在(-5,5)上进行分段线性插值,取不同节点个数n,得到不同分段线性插值函数.并用MATLAB编写分段线性插值函数,最后比较用不同节点数所得插值函数与真实函数的误差,从而得出节点数与插值效果的关系。

埃尔米特(Hermite)插值

实验二埃尔米特(Hermite)插值 一、实验目的: 1.掌握埃尔米特插值算法原理; 2.使用C语言编程实现埃尔米特插值算法。 二、实验准备: 阅读《数值分析》2.4节 二、实验要求: 某人从甲地开车去乙地,每隔一段时间对行车距离和速率进行一次采样,得到在n+1 个采样时刻点t i 的里程s i和速率v i(i=0, 1, ..., n)。要求编程构造埃尔米特插值多项式H2n+1(t),满足H2n+1(t i)=s i, H'2n+1(t i)=v i,对所有i=0, 1, ..., n成立,并据此计算m个给定时刻的里程和速率。 函数接口定义: void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] ); 其中N为采样点个数(注意这个N不是公式中的最大下标n,而是等于n+1),采样时刻点t i、里程s i、速率v i分别通过t、s、v传入;m是需要估算的给定时刻的个数,ht传入给定的时刻点,相应计算出的里程和速率应分别存储在hs和hv中。 裁判程序如下:

裁判输入数据: 2 0.0 1.0 0.0 1.0 0.0 0.0 5 0.0 0.2 0.5 0.8 1.0 3 0.0 0.5 1.0 100.0 170.0 200.0 30.0 150.0 0.0 5 0.0 0.25 0.5 0.75 1.0 5 0.0 1.0 2.0 3.0 4.0 0.0 60.0 160.0 260.0 300.0 5.0 70.0 100.0 120.0 20.0 10 0.5 1.0 1.5 2.0 2.5 3.0 3.5 3.8 3.95 4.0 标准输出数据: 0.0000 0.1040 0.5000 0.8960 1.0000 0.0000 0.9600 1.5000 0.9600 0.0000 100.0000 127.9297 170.0000 195.9766 200.0000

牛顿形式的埃尔米特插值多项式

期末论文 课程名称:数值分析 院系名称:巢湖学院数学系所在班级:11级数本(2)班学生学号:11020170 学生姓名:张秀丽

目录 【题目】:牛顿形式的埃尔米特插值多项式 【摘要】:......................................................... 【关键词】:.......................................................... 【正文】: 一、引言 二、重节点均差与泰勒插值 三、埃尔米特插值典例 四、牛顿形式的埃尔米特插值多项式的一些应用领域 【结束语】:......................................................... 【参考文献】:..........................................................

牛顿形式的埃尔米特插值多项式 【摘要】:在了解了插值法以后,陆续的又接触和学习到多项式插值、拉格朗日插值、牛顿插值多项式等,但在有些实际问题中,仍需要其它要求,下面又给出有关牛顿的埃尔米特插值的内容。 【关键词】:重节点均差、泰勒插值、泰勒插值多项式、埃尔米特插值。 【正文】: 一、引言 插值法是一种古老的数学方法,它来自生产实践。早在一千多年前的隋唐时期制定历法时就应用了二次插值,隋朝刘绰将等距节点二次插值应用于天文计算。但插值理论都是在17世纪微积分产生以后才逐步发展的,牛顿的等距节点插值公式及均差插值公式都是当时的重要成果。近半世纪由于计算机的广泛使用和造船、航空、精密机械加工等实际问题的需要,使插值法在理论上和实践上得到进一步发展,尤其是20世纪40年代后期发展起来的样条插值,更获得广泛应用,成为计算机图形学的基础。 在插值法的提出后我们了解了多项式插值;应用各种不同的方法对给定的插值点为求得形如01()...n n P x a a x a x =+++的插值多项式我们得到了线性插值与抛物线插值;把线性插值与抛物线插值推广到一般情形,通过讨论如何构造通过n+1个节点01...n x x x <<<的n 次插值多项式()n L x ,我们定义了n 次插值基函数从而得到了拉格朗日插值多项式:()()n n k k k o L x y l x ==?。利用插值基函数很 容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为重要。但当插值点增减时,计算要全部重新进行,甚为不变,为了计算方便可重新设计一种逐次生成插值多项式的方法,通过一系列的考察与讨论我们利用均差得到了牛顿均差插值多项式001001201()()[,]()[,,]()()...n P x f x f x x x x f x x x x x x x =+-+--++ 101[,...,]()...()n n f x x x x x x ---,随后还涉及了差分形式的牛顿插值公式等。 插值多项式要求在插值节点上函数值相等,有的实际问题还要求在节点上倒数值相等,甚至高阶导数值也相等,满足这种要求的插值多项式称为埃尔米特插值多项式。 二、重节点均差与泰勒插值 先给出一个关于均差的结论。 设01[,],,,...,n n f C a b x x x ?为[,]a b 上的相异节点,则01[,,...,]n f x x x 是其变量的连续函数。 如果[,]a b 上的节点互异,根据均差定义,若1[,]f C a b ?,则有 00'0000 ()()[,]()lim lim x x x x f x f x f x x f x x x -==-. 由此定义重节点均差

实习:Matlab作业hermite插值

题目:利用Matlab实现数据的Hermite插值和分段三次Hermite插值 小组成员:王晓波(38) 蔡明宇(20) 一、程序实现意义: 一般的,从各种试验得来的数据总有一定的数量,而利用插值技术能够从有限的数据中获取整体的状态。而Hermite插值不仅保证了插值函数与原函数在给定数据点处得拟合,同时保证了在相应点处导数的相同,从而在很大程度上保证了曲线的“光滑性”。因此,通过Matlab实现Hermite插值具有很普遍的意义。 二、实现过程: 1、Hermite插值 由于并不是所有的Matlab版本都提供现有的Hermite插值函数包,故我们首先编写了实现给定五个观测点的Hermite插值的M程序,代码如下: function [f,f0] = Hermite1(x,y,y_1) syms t; f = ; ! if(length(x) == length(y)) if(length(y) == length(y_1)) n = length(x); else disp('y和y的导数的维数不相等'); return; end else disp('x和y的维数不相等! '); return; end * for i=1:n h = ; a = ; for j=1:n if( j ~= i) h = h*(t-x(j))^2/((x(i)-x(j))^2); a = a + 1/(x(i)-x(j)); end end

f = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i)); < end f0 = subs(f,'t'); 其中x为给定点横坐标数组,y为给定点纵坐标数组,y_1为原函数在给定点处的导数数组。测试证明该程序可以实现,例如输入如下数组: x=1::; y_1=[ ]; y=[1 ]; >> [f,f0] = Hermite1(x,y,y_1); 运行结果如下: f = $ (390625*((3972231*t)/35 - 28321/0000)*(t - 1)^2*(t - 7/5)^2*(t - 8/5)^2*(t - 9/5)^2)/36 - (390625*(t - 1)^2*(t - 6/5)^2*(t - 7/5)^2*(t - 9/5)^2*((28557*t)/28 - 23/2000))/36 + (390625*((64*t)/3 - 61/3)*(t - 6/5)^2*(t - 7/5)^2*(t - 8/5)^2*(t - 9/5)^2)/576 + (390625*((763*t)/1984 + 043/6240000)*(t - 1)^2*(t - 6/5)^2*(t - 8/5)^2*(t - 9/5)^2)/16 - (390625*((77623*t)/28 - 931/60000)*(t - 1)^2*(t - 6/5)^2*(t - 7/5)^2*(t - 8/5)^2)/576 f0 = . 利用matlab绘制图像:

数值分析实验,用程序实现Hermite插值法

《数值分析》实验报告 实验序号:实验六 实验名称: Hermite 插值法 1. 实验目的: 学会Hermite 插值法,并应用该算法于实际问题. 2. 实验内容: 求一个函数?(x )用来近似函数f (x ),用分段三次Hermit 插值的方法来求解近似函数?(x )并画出近似函数图像及原函数图像。 设在区间[a,b]上,给定n+1个插值节点b x x x x a n =<<<<=...210和相应的函数 值n y y y ,...,,10以及一阶导数值''1'0,...,,n y y y ,求一个插值函数)(x H ,满足以下条件: (1) ),...,2,1,0()(,)(''n i y x H y x H i i i i === (2) )(x H 在每一个小区间[1,+j j x x ]上是三次多项式。 对于给定函数11-,2511)(2 ≤≤+=x x x f 。在区间[]11-,上画出f (x )和分段三次Hermit 插值函数)(x H 的函数图像。 3. 实验分析: 算法分析: 1. 分段三次Hermit 插值的算法思想: 分段三次Hermit 插值的做法是在每一个小区间上作三次Hermit 插值,因此在每一个插值节点上都需要构造两个插值基函数)(),(x H x h i i ,然后再作它们的线性组合。分段三次Hermit 插值基函数如下: ?????≤≤----+=其它 0 ))(21()(1021010100x x x x x x x x x x x x h ?? ???≤≤---=其它 0 ))(()(10210100x x x x x x x x x x H

数值分析课程实验报告-拉格朗日和牛顿插值法

《数值分析》课程实验报告 用拉格朗日和牛顿插值法求解函数值 算法名称用拉格朗日和牛顿插值法求函数值 学科专业xxxxx 作者姓名xxxx 作者学号xxxxx 作者班级xxxxxx xxx大学 二〇一五年十二月

《数值分析》课程实验报告

得到的近似值为。 拉格朗日插值模型简单,结构紧凑,是经典的插值法。但是由于拉格朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新计算。且当增大插值阶数时容易出现龙格现象。 2.牛顿插值法 在命令窗口输入: x=[ ]; y=[ ]; xt=; [yt,N]=NewtInterp(x,y,xt) z=::2; yz=subs(N,'t',z); figure; plot(z,sqrt(z),'--r',z,yz,'-b') hold on plot(x,y,'marker','+') hold on plot(xt,yt,'marker','o') h=legend('$\sqrt{x}$','牛顿','$(x_k,y_k)$','$x=$'); set(h,'Interpreter','latex') xlabel('x') ylabel('y') 得到结果及图像如下: yt = N = - *t^4 + *t^3 - *t^2 + *t +

得到√的近似值为,插值函数为 N =- *t^4 + *t^3 - *t^2 + *t + , 其计算精度是相当高的。 Lagrange插值法和Newton插值法解决实际问题中关于只提供复杂的离散数据的函数求值问题,通过将所考察的函数简单化,构造关于离散数据实际函数f(x)的近似函数P(x),从而可以计算未知点出的函数值,是插值法的基本思路。 实际上Lagrange插值法和Newton插值法是同一种方法的两种变形,其构造拟合函数的思路是相同的,而实验中两个实际问题用两种算法计算出结果是相同的。

牛顿插值法实验报告

牛顿插值法 一、实验目的:学会牛顿插值法,并应用算法于实际问题。 二、实验内容:给定函数 x x f =)(,已知: 414214.1)0.2(=f 449138.1)1.2(=f 483240.1)2.2(=f 516575.1)3.2(=f 549193.1)4.2(=f 三、实验要求: (1)用牛顿插值法求4次Newton 插值多项式在2.15处的值,以此作为函数的近似值)15.2(15.2N ≈。在MATLAB 中用内部函数ezplot 绘制出4次Newton 插值多项式的函数图形。 (2)在MATLAB 中用内部函数ezplot 可直接绘制出以上函数的图形,并与作出的4次Newton 插值多项式的图形进行比较。 四、实验过程: 1、编写主函数。打开Editor 编辑器,输入Newton 插值法主程序语句: function [y,L]=newdscg(X,Y,x) n=length(X); z=x; A=zeros(n,n);A(:,1)=Y';s=0.0; p=1.0; for j=2:n for i=j:n A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1)); end end C=A(n,n); for k=(n-1):-1:1 C=conv(C,poly(X(k))); d=length(C);C(d)=C(d)+A(k,k); end y(k)= polyval(C, z); L(k,:)=poly2sym(C);

%%%%%%%%%%%%%%%%%% t=[2,2.1,2.2,2.3,2.4]; fx=sqrt(t); wucha=fx-Y; 以文件名newdscg.m保存。 2、运行程序。 (1)在MATLAB命令窗口输入: >> X=[2,2.1,2.2,2.3,2.4]; Y =[1.414214,1.449138,1.483240,1.516575,1.549193]; x=2.15;[y,P]=newdscg(X,Y,x) 回车得到: y =1.4663 wucha =1.0e-06 * -0.4376 -0.3254 -0.3026 0.0888 0.3385 P = - (4803839603609061*x^4)/2305843009213693952 + (7806239355294329*x^3)/288230376151711744 - (176292469178709*x^2)/1125899906842624 + (1624739243112817*x)/2251799813685248 + 1865116246031207/4503599627370496 (2)在MATLAB命令窗口输入: >> v=[0,6,-1,3]; >> ezplot(P),axis(v),grid >> hold on >> x=0:0.1:6; >> yt=sqrt(x);plot(x,yt,':') >> legend('插值效果','原函数') >> xlabel('X') >> ylabel('Y') >>title('Newton插值与原函数比较') 回车即可得到图像1-1。

Hermite插值函数

数值分析实验报告 任课教师:马季骕班级:11级计算机科学与技术 1实验目的及要求 2程序的源代码 3实验操作 4实验结果及分析 1实验目的及要求 学会Hermite插值法,并应用该算法于实际问题. (1)给定函数y=f(x)在n各不同的插值节点xi(i=1,…,n)的函数值yi=f(xi) (i=1,…,n),用厄米特(Hermite)插值多项式求函数在x初的函数值y。 (2)Hermite插值多项式: (4)如果有错,修改直至运行成功,查看运行结果; (5)根据所求函数,画出图形。 (6)查看原函数的图形与逼近函数图形的近似程度。 2 程序的源代码 // LDlg.cpp : implementation file // #include "stdafx.h" #include "L.h" #include "LDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg)

MA AB 牛顿插值法例题与程序

题目一:多项式插值 某气象观测站在8:00(AM )开始每隔10分钟对天气作如下观测,用三次多项式插值函数(Newton )逼近如下曲线,插值节点数据如上表,并求出9点30分该地区的温度(x=10)。 二、数学原理 假设有n+1个不同的节点及函数在节点上的值(x 0,y 0),……(x n ,y n ),插值多项式有如下形式: )() )(()()()(n 10n 102010n x -x )(x -x x -x x P x x x x x x -??-+??+-++=αααα(1) 其中系数i α(i=0,1,2……n )为特定系数,可由插值样条i i n y x P =) ((i=0,1,2……n )确定。 根据均差的定义,把x 看成[a,b]上的一点,可得 f(x)=f (0x )+f[10x x ,](0x -x ) f[x,0x ]=f[10x x ,]+f[x,10x x ,](1x -x ) …… f[x,0x ,…x 1-n ]=f[x,0x ,…x n ]+f[x,0x ,…x n ](x-x n ) 综合以上式子,把后一式代入前一式,可得到: f(x)=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+ …+f[x,0x ,…x n ](0x -x )…(x-x 1-n )+f[x,0x ,…x n ,x ])(x 1n +ω=N n (x )+) (x n R 其中 N n (x )=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+ …+f[x,0x ,…x n ](0x -x )…(x-x 1-n )(2) )(x n R =f(x)-N n (x )=f[x,0x ,…x n ,x ]) (x 1n +ω(3) ) (x 1n +ω=(0x -x )…(x-x n ) Newton 插值的系数i α(i=0,1,2……n )可以用差商表示。一般有 f k =α[k 10x x x ??,](k=0,1,2,……,n )(4)

hermite插值多项式的例题

例 若()f x 在[a,b]上有三阶连续导数,且已知()f x 在[,]a b 上两个互异的 点01,x x 上的函数值01(),()f x f x 和一阶导数值' 0()f x ,试求满足条件 ''001100()(),()(),()()H x f x H x f x H x f x === 的插值多项式,并估计误差。 解 由给定的3 个插值条件,显然可确定一个次数不超过2次的埃尔米特插值多项式()H x , 又有()H x 应满足插值条件()()i i H x f x =,(0,1)i =,而节点01,x x 上的线性插值函数1()N x 也满足插值条件1()(),(0,1)i i N x f x i ==,故可设101()()()()H x N x A x x x x -=--,其中A 为待定常数,上式又可记为 101000101()()()() ()()[,]()()H x N x A x x x x f x x x f x x A x x x x =+--=+-+-- 为了确定常数A ,对上式求导,得 '0110()[,][()()]H x f x x A x x x x =+-+-, 令0x x =代入,且注意插值条件'' 001010()[,]()()H x f x x A x x f x =+-=, 于是有'01010[,]()f x x f x A x x -=-,即多项式()H x 为 '010******** [,]()()()()[,]()()f x x f x H x f x x x f x x x x x x x x -=+-+--- , 当然也可先采用拉格朗日多项式构造,同样得到满足相同条件的插值多项式()H x 余项为(3)201()()()()6 f R x x x x x ξ=--。

分段三次Hermite插值

分段三次Hermite 插值 1. 目的意义: 可以得到在插值区间上光滑的分段插值多项式 2. 数学模型(数学公式): ???????∈??????∈∈=-] ,[),(],[),(],[),()(1212101n n n x x x x H x x x x H x x x x H x H '221'122 13211321)()())(())]((2[))]((2[i i i i i i i i i i i i i i i i i i i y h x x x x y h x x x x y h x x x x h y h x x x x h H --+--+--++--+=------ 3. 算法程序: #include #include #define m 4 #define n 5 void main() { int i,k; float x[n+1],y[n+1],yy[n+1],h,z[m];

printf("请按行输入一系列的x值:\n"); for(k=0;k=x[k]&&z[i]<=x[k+1]) { h=pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0)*(1+2*(z[i]-x[k])/(x[k+1 ]-x[k]))*y[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(1+2*(z[i]-x[k +1])/(x[k]-x[k+1]))*y[k+1]+pow((z[i]-x[k+1])/(x[k]-x[k+1]),2.0 )*(z[i]-x[k])*yy[k]+pow((z[i]-x[k])/(x[k+1]-x[k]),2.0)*(z[i]-x[k

牛顿插值法

牛顿插值算法 专业信息与计算科学 班级 113010102 姓名罗彪 学号 11301010229

1实验名称 牛顿插值法实验报告 2 实验目的 (1) 掌握牛顿插值法的基本思路和步骤,适用范围及精确度; (2) 培养编程与上机调试能力; (3) 熟悉Matlab6.1软件环境. 3 实验要求 (1) 利用牛顿插值法的求NEWTON 插值多项式的值,在matlab 中用内部 函数绘制函数图形。 (2) 利用Matlab 软件作为辅助工具来实现该实验. 4 实验原理 在拉格朗日插值方法中,若增加一个节点数据,其插值的多项式需重新计算。现构造一个插值多项式Nn(x),只需对Nn-1(x)作简单的修正即可得到,这样计算方便。 利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面Nn(x)的各项系数恰好又是各阶差商而各阶差商可用差商公式来计算。 由线性代数知,对任何一个不高n 次的多项式P (x )=b0+b1x+b2x2+…+bnxn(幂基)(1) 也可将其写成P(x)=a0+a1(x-x0)+a2(x-x0)(x-x1)+…an(x-x0)..(x-xn-1) 其中ai 为系数,xi 为给定节点,可由(1)求出ai 一般情况下,牛顿插值多项式Nn(x)可写成Nn(X)= a0+a1(x-x0)+a2(x-x0)(x-x1)+…an(x-x0)..(x-xn-1)只需求出系数ai 即可得插值多项式。 5实验题目 给定21()1f x x =+ [5,5]x ∈-,取节点5(0,1,,10)k x k k =-+=,构造牛顿插值函 数计算点50.5(0,1, ,20)j t j j =-+=处10()N x 的值,并绘制图形与()f x 比较。 6实验步骤 输入n 值及())(,i i x f x ,,,1,0,n i =;要计算的函数点x 。 对给定的,x 由 [][][]00010101201101()()(),()(),,()()(),,n n n N x f x x x f x x x x x x f x x x x x x x x x f x x x -=+-+--+ +---

hermite插值多项式的例题

例若()f x 在[a,b]上有三阶连续导数,且已知()f x 在[,]a b 上两个互异的 点01,x x 上的函数值01(),()f x f x 和一阶导数值' 0()f x ,试求满足条件 ' ' 001100()(),()(),()()H x f x H x f x H x f x === 的插值多项式,并估计误差。 解由给定的3 个插值条件,显然可确定一个次数不超过2次的埃尔米特插值多项式()H x , 又有()H x 应满足插值条件()()i i H x f x =,(0,1)i =,而节点01,x x 上的线性插值函数 1()N x 也满足插值 条件 1()(),(0,1) i i N x f x i ==,故可设1 ( ) ()()()H x N x A x x x x -=--,其中A 为待定常数,上式又可记为 101000101()()()() ()()[,]()()H x N x A x x x x f x x x f x x A x x x x =+--=+-+-- 为了确定常数A ,对上式求导,得 ' 0110()[,][()()]H x f x x A x x x x =+-+-, 令0x x =代入,且注意插值条件'' 001010()[,]()()H x f x x A x x f x =+-=, 于是有 ' 01010 [,]() f x x f x A x x -= -,即()H x 为 ' 010******** [,]() ()()()[,]()()f x x f x H x f x x x f x x x x x x x x -=+-+ --- , 当然也可先采用拉格朗日多项式构造,同样得到满足相同条件的插值多项式()H x 余项为(3) 2 01() ()()()6 f R x x x x x ξ=--。

Newton插值法实例

Newton插值法求解梁的挠度实例 学院:建筑工程学院学号:2111206052 姓名:王瑞峰 一、问题来源 求解梁弯曲时的挠度,通常采用积分法和叠加法.积分法是利用挠曲线近似微分方程进行积分求解,积分常数可由粱的边界条件或连续光滑条件来确定.但当粱所受载荷复杂时,就要分段积分并确定多个积分常数,计算相当繁琐。而叠加法虽然比较简单,但需对梁所受的载荷进行分解,且必须分解成早已知道所产生挠度的单个载荷.若载荷作用位置不同,所用公式也不同,无规律可言,具有一定的局限性。所以就需要一种更好普遍实用的方法来求解。 二、数学模型 实例: 图1所示简支梁AB受集度为q的均布载荷作用,其弯曲刚度为脚,长度为l并等分成四段,试求1、2、3三个等分点处的挠度。 三、方法选择 牛顿插值法是一种数值计算方法,基本原理是利用牛顿插值方程代替挠曲线近似微分方程,然后用代数的方法求解.如果将梁分成较多的区段,则相应地求解较多的插值方程,且精度较高。特别指出:当求解方程较多、运算繁琐时可用计算机解决。 下面从图形表示的一般函数y=f(x)入手,推出该方法.如图2所示,将x轴进行等分,各等分点从左到右标以号码,其间距a又称为步长。如在等电处,其纵坐标分别为等。 现在讨论对应于的A点处函数y的一阶导数.因函数y在处的一阶导数

与函数在点处的一阶差商相等,即 (a) 其二阶导数即一阶导数的变化率,可代表梁在处的挠度,等于f(x)在点处的二阶差商的2倍,即 (b) 结合梁的挠曲线微分方程,我们可以得到梁的牛顿插值方程: (c) 方程中其弯矩M和弯曲刚度EI加上角标i表明这些量为梁在x轴上i点处所求算的量。 要应用该方程求解,需沿梁选择一系列的点写出插值方程,所得的方程组可以求解所选点处的挠度。 四、解答过程及其编程 因为此梁对称,1、3两点处的挠度相等,即y1=y3,所以只有两个值y1和y2为方程中的未知量 点1处(i=1):,弯矩,其牛顿插值方程为: 又因为,上式简化为: (1) 点2处(i=2):,弯矩,其牛顿插值方程为: 又因为,所以上式简化为: (2) 可以用Matlab分别求得y1,y2 代码如下: A=[-2,1;1,-1];b=[3/512;1/256]; y=inv(A)*b 截图如下:

相关文档
最新文档