Matlab的Hermite插值法
课程设计---Hermite 插值法的程序设计及应用
课程设计说明书题目:Hermite 插值法的程序设计及应用学生姓名:学院:班级:指导教师:2012年 1月 5日摘要Hermite 插值是数值分析中的一个重要内容,在相同的节点下得到比拉格朗日插值更高次的插值多项式,而且,相应的曲线在部分节点处也更光滑.在我们所学课程中,只给出了当所有节点处一阶导数均已知时的Hermite 插值.但在实际应用中,并不是所有节点处的一阶导数都是已知的.为此,通过查阅文献、学习总结,给出了更具一般性的Hermite 插值公式.已有的Hermite 插值公式成为本文所得结果的一个特例.本次课程设计,对Hermite 插值法进行了总结,包括Hermit插值法的理论推导,不同情形下的例,以及在解决实际问题中的应用.同时也给出了Hermite插值公式的Matlab算法.关键词Hermite 插值;Matlab 实现;数值分析引言 (1)第一章 Hermite插值 (2)§1.1 Hermite插值的概念 (2)§1.2 Hermite插值简单情形 (3)§1.2.1简单情形解的存在性 (3)§1.2.2 简单情形解的存在唯一性 (5)§1.2.3插值余项 (5)§1.3 Hermite插值其他情形................................ . (5)第二章 Hermite插值的Matlab实现 (9)§2.1 导数完全情形Hermite插值的Matlab实现................... ..9 §2.2导数不完全情形Hermite插值的Matlab实现.. (10)§2.3 Hermite插值在实际问题中的应用 (13)参考文献 (15)附录A (16)附录B (17)附录C (19)在实际工作中, 人们得到的一些数据通常是一些不连续的点, 在土木工程、流体力学、经济学和空气动力学等学科中经常要遇到这样的问题. 此时, 这些数据如果不加以处理, 就难以发现其内在的规律性. 如果用户想得到这些分散点外的其他数值, 就必须运用这些已知的点进行插值.因此,对近似公式的构造产生了插值问题.在实际问题中,两个变量的关系)(x f y =经常要靠实验和观测来获得,而在通常的情况下只能得到)(x f 在有限个点上的值.,,1,0),(n i x f y i ==人们希望找到)(x f 的一个近似函数)(x y φ=,使得i i y x =)(φ,.,,1,0n i = ○1 此时,)(x f 称为被插值函数,点n i x x x ,,,0 称为插值结点,)(x φ称为插值函数,○1为插值条件. 常用的插值法有Lagrange 插值、Newton 插值、最近邻插值、Hermite 插值和三次样条插值插值法等. Lagrange 插值在向量X 区域内的插值较准确, 但向量X 区域之外则不太准确.Newton 插值仅适用于等距节点下的牛顿向前(后) 插值. 最近邻插值是最简便的插值, 在这种算法中, 每一个插值输出像素的值就是在输入图像中与其最临近的采样点的值, 当图像中包含像素之间灰度级变化的细微结构时, 最近邻插值法会在图像中产生人工的痕迹. 最近邻插值的特点是简单、快速, 缺点是误差较大; 三次样条插值一阶和二阶连续可导, 插值曲线光滑, 插值效果比较好, 应用较广Newton 插值和Lagrange 插值虽然构造比较简单,但都存在插值曲线在节点处有尖点、不光滑、插值多项式在节点处不可导等缺点.为了保证插值多项式)(x p n 能更好地逼近)(x f , 对)(x p n 增加一些约束条件, 例如要求)(x p n 在某些结点处与)(x f 的微商相等, 这样就产生了切触插值问题.切触插值即为Hermite 插值.它与被插函数一般有更高的密合度.本课程设计主要对Hermite 插值法进行总结,对其一般情况,特殊情况进行更进一步的学习,尽量实现其在Matlab 及C++上的程序运行.第一章 Hermite 插值实际问题中应用较广为Newton 插值和Lagrange 插值,虽然这辆种插值法构造比较简单, 但都存在插值曲线在节点处有尖点、不光滑、插值多项式在节点处不可导等缺点.为了克这些缺点,我们引入了Hermite 插值.§1.1 Hermite 插值的概念定义1.1 许多实际插值问题中,为使插值函数能更好地和原来的函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应的导数值也相等,甚至要求高阶导数也相等.这类插值称作切触插值,或埃尔米特(Hermite)插值.该定义给出了Hermite 插值的概念,由此得出Hermite 插值的几何意义,如图1.1.定义1.2 满足上述要求的插值多项式是埃尔米特插值多项式.记为H (x ). 定义1.3 求一个次数不大于1++r n 的代数多项式 H(x) ,满足:).(,,2,1),()(.,,2,1),()(n r r i x f x H n i x f x H i i i i ≤='='== (1-1) 则(1-1)为Hermite 插值条件.定义1.4 令 ),(22y x ),(33y x ),(44y x),(11y x),(00y x xy图1.1 Hermite 插值多项式的几何意义含义.)()()()()(00∑∑=='+=rk k k n k k k x f x x f x x H βα (1-2)其中,),,1,0)(x (),,1,0)((k n k n k x k ==βα和都是1++r n 次待定多项式并且它们满足如下条件:⎩⎨⎧=01)(i k x α k i k i ≠= .,,1,0,n k i = .,,1,0,,,1,0,0)('r i n k x i k ===α⎩⎨⎧='01)(i k x β k i k i ≠= .,,1,0,r k i = .,,1,0,,,1,0,0)(n i r k x i k ===β称(1-2)为Hermite 插值公式.解决Hermite 插值问题,就是在给定结点处函数值与导数值的基础上根据插值公式构造Hermite 插值多项式,并根据已知条件解出多项式系数.§1.2 Hermite 插值简单情形已知函数表: x0x 1x 2x … m x … n x )(x f0y 1y 2y … m y … n y )(x f ' 0'y 1'y 2'y … m y ' … n y '求一个插值多项式,使其满足条件数表.由于数表中包含22+n 个条件,所以能够确定次数不大于12+n 的代数多项式 )(12x H n +.此情形为导数个数与函数值个数相等的情形,即 Hermite 插值问题的最简单也是最常用情形.1.2.1简单情形解的存在性由于Hermite 插值公式(1-2)已给出,接下来只需构造出)(x k α及)(x k β,即认为其存在.在此简介Lagrange-Hermite 插值法构造插值多项式.Step1 构造)(x k α(n k ,,1,0 =)由条件)(0)(')(k i x x i k i k ≠==αα知),,,1,0(k i r i x i ≠= 是)(x k α的二重零点.已知Lagrange 插值基函数)(x l k 是n 次多项式,且具有性质⎩⎨⎧=≠==i k i k x l ki i k ,1,0)(δ, 则2n 次多项式[]2)(x k k 也具有性质[]ki i k x l δ=2)(,而[]2)(x l k 的一阶导数在)(k i x i ≠处的值[]()0)()(2)(2='='i k i k i k x l x l x l 所以当k i ≠时,i x 也都是[]2)(x k k的两重零点.注意到)(x h k 是12+n 次多项式,而[]2)(x l k 是n 2次多项式,因此可设),,2,1,0)(()()(2n k x l b ax x k k =+=α其中b a ,为待定常数.显然k i ≠时满足0)(')(==i k i k x x αα,现只要求出b a ,满足k i =时,满足0)(',1)(==k k k k x x αα即可.由此得到确定b a ,的两个方程:)(2)())(()(2)(1)()()()(22=+'=++'='=+=+=a x l x al b ax x l x l x b ax x l b ax x k k k k k k k k k k k k k k k k k αα解出 k k kk k x x l b x l a ⋅'+='-=)(21)(2 于是[])())((21)(2x l x x x l x k k k kk -'-=α. Step2 构造)(x k β ),,1,0(n k =由条件)(0)(')(k i x x i k i k ≠==ββ知),,,1,0(k i r i x i ≠= 是)(x k β的二重零点.因此可设)(x k β也含因子)(2x l k ,又0)(=k k x β,所以)(x k β还含有因式)(k x x -,因此设)()()(2x l x x A x k k k -=β,其中A 为待定常数.显然)(x k β是12+n 次多项式,且当k i ≠时满足0)(')(==i k i k x x αα,由,1)(='k kx β可确定A 如下: 1)()(2)()()(2=='⋅⋅-+='A x l x l x x A x Al x k kk k k k k k k β所以 )()()(2x l x x x k k k -=β.到此为止,Hermite 插值问题的解)(12x H n +为[],)()()())((21)(2020k k nk k k kn k k k k f x l x x f x l x x x l x H '-+-'-=∑∑== 特别地,当=n 1时,满足113003113003)(,)(,)(,)(y x H y x H y x H y x H '=''='==的三阶Hermite 插值多项式为+⎪⎪⎭⎫ ⎝⎛--⎥⎦⎤⎢⎣⎡'-+⎪⎪⎭⎫ ⎝⎛--+=21010000103)(21)(x x x x y x x y x x x x x H 2010111101)(21⎪⎪⎭⎫ ⎝⎛--⎥⎦⎤⎢⎣⎡'-+⎪⎪⎭⎫ ⎝⎛--+x x x x y x x y x x x x .§1.2.2 简单情形解的存在唯一性为了简便理解,下面用流程图来说明解的存在唯一性.详见附录A.§1.2.3 插值余项定理 1.1 设)(x f 在包含1+n 个插值结点的最小区间[b a ,]上22+n 次连续可微,则存在与x 有关的ξ,b a <<ξ,使得),()!22()()()(222x w n f x H x f n +=-+ξ 其中∏=-=n0j )()(j x x x w .由此可得到三阶Hermite 插值多项式的误差为:,)()(!4)()()()(212043x x x x f x H x f x R --=-=ξ ξ在0x 与1x 之间.§1.3 Hermite 插值其他情形已知函数表:x 0x1x … m x … n x y0y 1y … m y … n yy ' 0y ' 1y ' … m y '求一个插值多项式,使其满足条件数表.该问题中,导数个数与函数值个数不相等.我们称之为Hermite 插值中其他情形.在此简介Newton-Hermite 插值法构造插值多项式.先分析插值条件的个数:2++m n 个,那么,所构造的多项式的次数一般不能超1++m n .于是,按牛顿差值的思想,可设);())(()(),()()()(1011n n n m n x x x x x x x x x P x N x H ---=+=++ ωω其中,)(x N n 为n 次牛顿差值多项式;)(x P m 为待定的次数不超过m 次的多项式. 显然:n i x f x N x H i i n i ,,2,1,0),()()( ===为确定)(x P m ,对)(x H 求导:)()()()()()(11x x P x x P x N x H n m n m n++'+'+'='ωω 根据插值条件)()(i i x f x H '=',有)()()()()()()()()(111i n i m i ni n i m i n i m i n i x x P x N x x P x x P x N x H +++'+'='+'+'='ωωω 得到m i x x N x f x P i ni n i i m ,,2,1,0,)()()()(1 =''-'=+ω 于是,把求)(x P m 的问题转化为又一个插值问题已知)(x P m 的函数表 x1x 2x … m x )(x P m )(1x P m )(2x P m … )(m m x P确定一个次数不超过m 的插值多项式)(x L m ,使其满足)()(i m i m x P x L =. 根据牛顿差值公式.)())(](,,[)](,[)()(10000100----++-+=m m m m m m x x x x x x x x P x x x x P x P x P将上式带回,即得到满足条件;,,2,1,0),()(;,,2,1,0),()(m k x f x H n k x f x H k k k k ='='==的Newton-Hermite 插值多项式.例1.1 已知函数表: x 0x1x y 0y1y y ' 0'y求一个插值多项式H (x ),使其满足条件:),()(),()(),()(001100x f x H x f x H x f x H '='==该问题中,导数个数与函数值个数不相等.我们称之为Hermite 插值中其他情形.在此简介Newton-Hermite 插值法构造插值多项式.先由函数表xx 0 x 1 yy 0 y 1作线性插值,即为 []()01001,)()(x x x x f x f x P -+= 再注意到H (x )与P 1 (x )在节点x 0, x 1上函数值相同,即:11110010)()()()(y x P x H y x P x H ====于是,它们的差可以设为 ))(()()(101x x x x K x P x H --=-其中K 为待定常数,上式又可记为:))(()()(101x x x x K x P x H --+= (1-3)为确定K ,对上式求导:)()()(101x x x x K x P x H -+-+'='令x = x 0,代入上式,并且注意到插值条件00)(y x H '='得: []010*******)(,)()()(y x x K x x f x x K x P x H '=-+=-+'='于是有[]01010x x y x x f K -'--=将上式代入(1-3)得[]))(()()(10010101x x x x x x y x x f x P x H ---'--+=[][]))(()(,)(10010100100x x x x x x y x x f x x x x f x f ---'--+-+= (1-4)可以验证(1-4)所确定的H (x )确实满足插值条件(1-1).同时也可以看到,构造牛顿——埃米尔特插值多项式,完全采用牛顿插值的构造思想.最后,也可以把(1-4)式整理成拉格朗日形式:1001112010001101010)()(y x x xx x x y xx x x y xx x x x x x x x x x H '-⎪⎪⎭⎫ ⎝⎛--+⎪⎪⎭⎫ ⎝⎛--+⎪⎪⎭⎫ ⎝⎛----+-=插值余项为()()120)3(2!3)()(x x x x f X R --=ξ, ξ在0x 与1x 之间.第二章 Hermite 插值的Matlab 实现§2.1 导数完全情形Hermite 插值的Matlab 实现在实际应用中,应用最广也是最简单的Hermite 插值情形即为导数完全的情况下,Hermite 插值多项式的拟合.我们首先讨论该情形下的Matlab 程序.在给出程序之前,我们首先给出该公式所应用的Hermite 插值公式. 定理2.1 设在节点b x x x a n ≤<<≤≤ 21上,,)(,)(j j j j y x f y x f '='=,其中n j ≤≤1,则函数)(x f 在结点处n x x x ,,,21 处的Hermite 插值多项式为∑=+--=ni i i i i i i y y y a x x h x y 1])2)([()(其中 ∑∏≠=≠=-=--=nij j ji i nij j ji j i x x a x x x x h 1211;)(.该定理的证明详见文献.该情形下对应的Matlab 程序及流程图详见附录B . 为验证该程序的正确性与有效性,下面给出例2.1. 例2.1 设有如下数据表:x0 0.5 1 1.5 2 2.5 3 3.5)sin(x y = 0 0.4794 0.8145 0.9975 0.9093 0.5985 0.1411 -0.3508 )cos(x y =' 1 0.8776 0.5403 0.0707 -0.4161 -0.8011 -0.9900 -0.9365在Matlab 工作台输入如下命令:>> x0=[0,0.5,1,1.5,2,2.5,3,3.5];y0=[0,0.4794,0.8415,0.9975,0.9093,0.5985,0.1411,- 0.3508]; y1=[1,0.8776,0.5403,0.0707,-0.4161,-0.8011,-0.9900,-0.9365]; x=x0;y=hermite(x0,y0,y1,x); yplot(x,y) y2=sin(x); hold onplot(x,y2,'*r') 则输出结点处的插值:y =0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411 -0.3508)sin(x y =的Hermite 插值多项式的拟合图像如图:§2.2导数不完全情形Hermite 插值的Matlab 实现在实际应用中,并不是所有节点处的一阶导数都是已知的,为此,我们给出了更具一般性的Hermite 插值公式及其算法实现,已有的Hermite 插值公式成为本文所得结果的一个特例.在此首先给出求解Hermite 插值问题的一般性公式。
matlab实现newton差值和hermite差值
(一)实验目的掌握并能够利用newton差值和hermite差值方法解决问题。
(二)问题描述问题四插值。
上述函数的导数为采用三种方法中最好的方法计算这一积分(1)利用数值积分的方法给出在(可以直接计算精确值的,用精确值),用Newton插值方法得到5个椭圆的周长(2)利用数值积分的方法给出在(可以直接计算精确值的,用精确值),用Hermite插值方法得到5个椭圆的周长(3) 选做题:利用以及导数更多的值来进行插值,插值误差会有什么变化?(4)选做题:采用其它的插值方法改进插值的效果。
(三)算法介绍a确定,对于给定的b值都对应着一个椭圆,在本问题中用newton插值法和hermite得到的多项式代替椭圆周长公式中的进行积分,首先画出图像,选择初始点。
图像的实现代码见picture1.m。
newton插值法迭代公式:;Hermite法迭代公式:。
(四)程序建立picture.m文件画出和其导数图像。
(注:此图像为b=0.5时)x=0:0.1:2;y=sqrt(1+(0.5^2-1).*cos(x).^2);yyy=.750./(1-.75.*cos(x).^2).^(1/2).*cos(x).*sin(x);plot(x,y,'r');hold on;plot(x,yyy);hold off;legend('sqrt(1+(0.5^2-1).*cos(x).^2)','.750./(1-.75.*cos(x).^2).^(1/2).*cos(x).*sin(x)');所画图像为:我们选取0,0.3,0.6,0.9,1.2,1.5为初始点。
问题四(1)建立newtondedai1.m文件。
function z=newtondedai1(f,n)syms xia=zeros(n,n);x=[0 0.3 0.6 0.9 1.2 1.5];y=feval(f,x);a(:,1)=y;for i=2:nfor j=2:ia(i,j)=(a(i,j-1)-a(i-1,j-1))/(x(1,i)-x(1,i-j+1)); endendt=xi-x(1,1);p=a(1,1);for i=2:np=p+a(i,i)*t;t=t*(xi-x(1,i));endp=collect(vpa(p))问题四(2)建立hermite3.m文件。
第2章(2)Hermite插值
根据 j (x)及 j (x) 的一般表达式(4.4)及(4.5), 可得到
x xk x xk 1 k ( x ) 1 2 x x , xk 1 xk k k 1 2 x xk 1 x xk k 1 ( x) 1 2 x x . xk xk 1 k 1 k
2.4
Hermite插值
【应用中进一步的插值问题】
(1)要求在节点上函数值相等;
(2)对应的导数值也相等,甚至要求高阶导数也相等. 满足这种要求的插值多项式就是Hermite插值多项式. 下面只讨论函数值与导数值个数相等的情况.
1
2.4.1
重节点均差与Taylor插值
定理3 设 f C n [a, b], x0 , x1 ,, xn 为 [a, b] 上的相异节点,
12
两端取对数再求导,得
l ( x j ) j
k 0 k j
n
1 , x j xk
于是
j ( x) (1 2( x x j )
k 0 k j n
1 )l 2 ( x). j x j xk
(4.4)
同理,可得
j ( x) ( x x j )l 2 ( x). j
2
2
同理可得
7
再求 0( x) ,可设
x x1 0 ( x) a( x x0 ) x x , 1 0
2
显然
直接由
0 ( x1 ) 0 ' ( x1 ) 0.
0 ' ( x0 ) a 1 解得
x x1 0 ( x) ( x x0 ) x x . 1 0
matlab插值法
和牛顿(Newton)插值为代表的多项式插值最有特点,常
用的插值还有Hermite插值,分段插值和样条插值。
插值法的定义
设 f(x)为[a,b]上的函数,在互异点x0 , x1, ... , xn 处的
函数值分别为 f(x0) , f (x1) , … , f (xn) ,构造一个简单函数 (x) 作为函数 f(x) 的近似表达式y= f(x) (x),使
二次插值的误差 定理 设L2(x)为二次Lagrange插值函数, 若 f (x) ∈C3[a,b] , 则任给x∈(a ,b),至少存在一点ζ=ζ(x) ∈(a,b),使
R 2 ( x ) f ( x ) L2 ( x ) f ( ) ( x x 0 )( x x1 )( x x 2 ) (1.5) 3!
(xi)=f(xi) , i=0, 1, 2, …,n
(1.0)
则称(x) 为关于节点x0 , x1, ... , xn的插值函数;称 x0 , x1, ... , xn 为插值节点;称(xi, f (xi)), i=1,2,… , n 为插值点;f(x)
称为被插值函数。
(1.0)式称为插值条件。这类问题称为插值问题。
提示:因为R2(x0)=R2(x1)=R2(x2)=0,可设
R2 ( x) k ( x)( x x0 )( x x1 )( x x2 ).
作辅助函数
(t ) f (t ) L2 (t ) k ( x)(t x0 )(t x1 )(t x2 ),
易知,x0, x1, x2, x为Ψ(t)的4个零点,在4个点两两组成的区
l1 ( x) ( x x0 )( x x2 ) ( x x0 )( x x1 ) , l 2 ( x) . ( x1 x0 )( x1 x2 ) ( x2 x0 )( x2 x1 )
matlab 插值法
matlab 插值法
Matlab插值法是一种将已知数据点推广到未知数据点的方法。
插值法通常用于将连续函数的数据点表示为离散数据点,以便进行计算和分析。
Matlab提供了多种插值方法,包括线性插值、多项式插值、三次样条插值等。
其中,线性插值是最简单和最常用的插值方法。
线性插值是一种简单的插值方法,通过连接相邻数据点的线段来估计未知数据点的值。
对于一组已知数据点,给定一个未知数据点x,可以使用以下公式计算其估计值y:
y = y1 + (y2 - y1) * (x - x1) / (x2 - x1)
其中,(x1,y1)和(x2,y2)分别是最近的两个已知数据点。
多项式插值是一种通过连接数据点的高阶多项式来估计未知数
据点的值的方法。
给定一组已知数据点,可以使用以下公式计算未知数据点x的估计值y:
y = a0 + a1 * x + a2 * x^2 + ... + an * x^n
其中,a0,a1,a2等是待定系数,可以通过解一个线性方程组
来确定。
三次样条插值是一种通过连接三个相邻数据点的三次多项式来
估计未知数据点的值的方法。
三次样条插值具有较高的精度和平滑性,通常用于曲线拟合和数据平滑。
给定一组已知数据点,可以使用Matlab的spline函数来计算未知数据点的估计值。
插值方法的选择取决于数据的性质和应用的需要。
在使用插值法时,应注意数据点的密度、采样间隔和插值误差等因素,以避免过度
拟合和欠拟合的问题。
(整理)matlab插值计算.
插值方法晚上做一个曲线拟合,结果才开始用最小二乘法拟合时,拟合出来的东西太难看了!于是尝试用其他方法。
经过一番按图索骥,终于发现做曲线拟合的话,采用插值法是比较理想的方法。
尤其是样条插值,插完后线条十分光滑。
方法付后,最关键的问题是求解时要积分,放这里想要的时候就可以直接过来拿,不用死去搜索啦。
呵呵插值方法的Matlab实现一维数据插值MATLAB中用函数interp1来拟合一维数据,语法是YI = INTERP1(X,Y,XI,方法)其中(X,Y)是已给的数据点,XI 是插值点,其中方法主要有'linear' -线性插值,默认'pchip' -逐段三次Hermite插值'spline' -逐段三次样条函数插值其中最后一种插值的曲线比较平滑例:x=0:.12:1; x1=0:.02:1;%(其中x=0:.12:1表示显示的插值点,x1=0:.02:1表示插值的步长)y=(x.^2-3*x+5).*exp(-5*x).*sin(x);plot(x,y,'o'); hold on;y1=interp1(x,y,x1,'spline');plot(x1,y1,':')如果要根据样本点求函数的定积分,而函数又是比较光滑的,则可以用样条函数进行插值后再积分,在MATLAB中可以编写如下程序:function y=quadspln(x0,y0,a,b)f=inline('interp1(x0,y0,x,''spline'')','x','x0','y0');y=quadl(f,a,b,1e-8,[],x0,y0);现求sin(x)在区间[0,pi]上的定积分,只取5点x0=[0,0.4,1,2,pi];y0=sin(x0);I=quadspln(x0,y0,0,pi)结果得到的值为2.01905,精确值为2求一段matlab插值程序悬赏分:20 - 解决时间:2009-12-26 19:57已知5个数据点:x=[0.25 0.5 0.75 1] y=[0 0.3104 0.6177 0.7886 1] ,求一段matlab插值程序,求过这5个数据点的插值多项式,并在x-y坐标中画出y=f(x)图形,并且求出f (x)与x轴围成图形的面积(积分),不胜感激!使用Lagrange 插值多项式的方法:首先把下面的代码复制到M文件中,保存成lagranfunction [C,L]=lagran(X,Y)% input - X is a vector that contains a list of abscissas% - Y is a vector that contains a list of ordinates% output - C is a matrix that contains the coefficients of the lagrange interpolatory polynomial%- L is a matrix that contains the lagrange coefficients polynomialw=length(X);n=w-1;L=zeros(w,w);for k=1:n+1V=1;for j=1:n+1if k~=jV=conv(V,poly(X(j)))/(X(k)-X(j));endendL(k,:)=V;endC=Y*L;然后在命令窗口中输入以下内容:x=[0 0.25 0.5 0.75 1];y=[0 0.3104 0.6177 0.7886 1];lagran(x,y)ans =3.3088 -6.3851 3.3164 0.7599 0得到的数据就是多项式各项的系数,注意最后一个是常数项,即x^0,所以表达式为:f=3.3088*x.^4-6.3851*x.^3+3.3164*x.^2 +0.7599*x求面积就是积分求解>> f=@(x)3.3088*x.^4-6.3851*x.^3+3.3164*x.^2 +0.7599*x;>> quad(f,0,1)ans =0.5509这些点肯定是通过这个多项式的!MATLAB插值与拟合§1曲线拟合实例:温度曲线问题气象部门观测到一天某些时刻的温度变化数据为:试描绘出温度变化曲线。
matlab 插值拟合
matlab 插值拟合插值拟合是一种常用的数值分析方法,它通过已知的一些离散数据点,来构造一个函数,使得该函数通过这些数据点,并且在数据点之间的取值也能较好地拟合实际情况。
在MATLAB 中,可以使用interp1函数进行插值拟合。
interp1函数是MATLAB中用于一维数据插值的函数,它可以根据给定的数据点,通过线性插值、多项式插值、样条插值等方法,生成一个插值函数。
它的基本语法如下:YI = interp1(X,Y,XI,method)其中,X和Y是已知的数据点的横纵坐标,XI是需要插值的点的横坐标,method是插值方法。
下面将对这些参数进行解释。
X是已知数据点的横坐标,可以是一个向量或矩阵。
若X是向量,则X和Y的长度必须相等;若X是矩阵,则X和Y的行数必须相等。
X的元素必须按照升序排列。
Y是已知数据点的纵坐标,可以是一个向量或矩阵。
若Y是向量,则X和Y的长度必须相等;若Y是矩阵,则X和Y的行数必须相等。
XI是需要插值的点的横坐标,可以是一个向量或矩阵。
若XI 是向量,则返回的YI也是向量,长度与XI相等;若XI是矩阵,则返回的YI也是矩阵,行数与XI的行数相等。
XI的元素可以是任意实数,不一定需要在X定义的范围内。
method是插值方法,可以选择的参数有:- 'linear':线性插值,即通过两个最近的数据点在其之间进行线性插值计算。
- 'nearest':最近邻插值,即将每个需要插值的点与最近的数据点进行匹配。
- 'spline':样条插值,利用样条函数拟合数据点,生成平滑的曲线。
- 'pchip':分段三次Hermite插值,利用分段三次Hermite曲线拟合数据点。
- 'v5cubic':使用v5版本算法生成的3次样条。
除了上述的基本插值方法,还可以使用更高级的插值方法,如二维和多维插值等。
此外,interp1函数还提供了一些其他的参数和选项,如出界值处理、插值半径等,可以根据具体需求进行调整。
数值分析实验报告Hermite插值法、Runge现象,比较Language插值、分段线性插值、分段三次Hermie插值
山东师范大学数学科学学院实验报告x 0.1 0.5 1 1.5 2 2.5 3y 0.95 0.84 0.86 1.06 1.5 0.72 1.9y' 1 1.5 2 2.5 3 3.5 4求质点在时刻1.8时的速度,并画出插值多项式的图像。
1)运用Hermite插值法画出图像,如图4-1,并求质点在时刻1.8时的速度。
>>clear>>clc>>X=[0.1 0.5 1 1.5 2 2.5 3;0.95 0.84 0.86 1.06 1.5 0.72 1.9;1 1.5 2 2.5 3 3.5 4];>> x=0.1:0.01:3;>> H=Hermite1(X,x);>> plot(x,H)>> hold on>> plot(X(1,:),X(2,:),'r*')>> H1_8=Hermite(X,1.8);>> plot(1.8,H1_8,'go')>> legend('插值图像','原始点','目标点');图4-1二、验证高次插值的Runge现象问题分析和算法设计(一)Language插值代码function [Ln] =Lagrange(X,x)%请输入2*n+1矩阵X,X中第一行每个元素都是插值节点,X中第二行每个元素都是插值节点对应的函数值;%第二章P24例一拉格朗日插值n=size(X,2);d=0;for m=1:1:nif x==X(1,m);d=m;breakendend运行结果和总结 运行结果 例:给定函数55,11)(2≤≤-+=x xx f ; (1) 验证表2-10的误差结果(高次插值的Runge 现象);(2) 以0.1为步长分别进行Language 插值、分段线性插值、分段三次Hermite插值,画出三种插值函数以及f(x)的图像,比较三种插值结果。
MATLAB中的插值
MATLAB中的插值(2010-09-22 21:05:13)转载▼标签:matlab插值一维插值二维插值牛顿插值多项式插值教育插值(interpolation)是指在所给定基准数据的情况下,研究如何平滑地估算出基准数据之间其他点的函数数值。
每当其他点函数数值获取的代价比较高时,插值就会发挥作用。
一、一维插值在MATLAB中,一维多项式插值的方法通过命令interp1实现,其具体的调用格式如下:插值的方法method参数的取值和对应的含义如下:nearest:最邻近插值方法(nearest neighbor interpolation)。
这种插值方法在已知数据的最邻近点设置插值点,对插值点的数值进行四舍五入,对超出范围的数据点返回NaN。
linear:线性插值(linear interpolation),这是interp1命令中method的默认数值。
该方法采用直线将相邻的数据点相连,对超出数据范围的数据点返回NaN。
spline:三次样条插值(cubic spline interpolation),该方法采用三次样条函数获取插值数据点,在已知点为端点的情况下,插值函数至少具有相同的一阶和二阶导数。
pchip:分段三次厄米多项式差值(piecewise cubic Hermite interpolation)。
cubic:三次多项式插值,与分段三次厄米多项式插值方法相同。
v5cubic:MA TLAB5中使用的三次多项式插值。
各种插值方法的比较方法说明nearest 最快的插值方法,但是数据平滑方面最差,数据是不连续的。
linear 执行速度较快,有足够的精度,最为常用,而且为默认设置。
cubic 较慢,精度高,平滑度好,当希望得到平滑的曲线时可以使用该选项。
spline 执行速度最慢,精度高,最平滑。
二、二维插值三、样条插值除了前面章节提到的一维插值和二维插值方法之外,MATLAB还提供了样条插值的方法。
实习: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);elsedisp('y和y的导数的维数不相等');return;endelsedisp('x和y的维数不相等! ');return;end*for i=1:nh = ;a = ;for j=1:nif( j ~= i)h = h*(t-x(j))^2/((x(i)-x(j))^2);a = a + 1/(x(i)-x(j));endendf = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i));<endf0 = 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)/576f0 =.利用matlab绘制图像:2、程序的窗口化:利用Matlab提供的GUIDE工具以及callback函数实现相应函数的窗口化,GUI代码如下:function varargout = untitled(varargin)?% UNTITLED M-file for% UNTITLED, by itself, creates a new UNTITLED or raises the existing% singleton*.%% H = UNTITLED returns the handle to a new UNTITLED or the handle to% the existing singleton*.%% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in with the given input arguments.%% UNTITLED('Property','Value',...) creates a new UNTITLED or raises the,% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before untitled_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to untitled_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help untitled%% Last Modified by GUIDE 15-Sep-2011 22:24:48% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @untitled_OpeningFcn, ...'gui_OutputFcn', @untitled_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);】if nargin && ischar(varargin{1})= str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT<% --- Executes just before untitled is made visible.function untitled_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% varargin command line arguments to untitled (see VARARGIN)% Choose default command line output for untitled= hObject;>% Update handles structureguidata(hObject, handles);% UIWAIT makes untitled wait for user response (see UIRESUME)% uiwait;% --- Outputs from this function are returned to the command line.function varargout = untitled_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT);…% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = ;function edit1_Callback(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)…% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit1 as text% str2double(get(hObject,'String')) returns contents of edit1 as a double guidata(hObject, handles);% --- Executes during object creation, after setting all properties.function edit1_CreateFcn(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)(% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end¥function edit2_Callback(hObject, eventdata, handles)% hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit2 as text% str2double(get(hObject,'String')) returns contents of edit2 as a double guidata(hObject, handles);% --- Executes during object creation, after setting all properties.、function edit2_CreateFcn(hObject, eventdata, handles)% hObject handle to edit2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end—function edit3_Callback(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit3 as text% str2double(get(hObject,'String')) returns contents of edit3 as a double guidata(hObject, handles);·% --- Executes during object creation, after setting all properties.function edit3_CreateFcn(hObject, eventdata, handles)% hObject handle to edit3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');·endfunction edit4_Callback(hObject, eventdata, handles)% hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit4 as text% str2double(get(hObject,'String')) returns contents of edit4 as a double '% --- Executes during object creation, after setting all properties.function edit4_CreateFcn(hObject, eventdata, handles)% hObject handle to edit4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'));set(hObject,'BackgroundColor','white');end% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)x=str2num(get,'string'));y=str2num(get,'string'));<y_1=str2num(get,'string'));x0=str2num(get,'string'));syms t;f = ;if(length(x) == length(y))if(length(y) == length(y_1))n = length(x);elsedisp('yºÍyµÄµ¼ÊýµÄάÊý²»ÏàµÈ');return;end—elsedisp('xºÍyµÄάÊý²»ÏàµÈ£¡ ');return;endfor i=1:nh = ;a = ;for j=1:nif( j ~= i)h = h*(t-x(j))^2/((x(i)-x(j))^2);a = a + 1/(x(i)-x(j));、endendf = f + h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i));endf0 = subs(f,'t',x0);plot,x,y,'*');^function edit5_Callback(hObject, eventdata, handles)% hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit5 as text% str2double(get(hObject,'String')) returns contents of edit5 as a doubleguidata(hObject, handles);{% --- Executes during object creation, after setting all properties.function edit5_CreateFcn(hObject, eventdata, handles)% hObject handle to edit5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))~set(hObject,'BackgroundColor','white');end程序运行结果:其中左上方纵列的三个对话框从上到下分别输入给定点的横坐标x,纵坐标y以及导数值y_1,右侧空白框输入维数,下方坐标图显示插值函数图像,例如仍插入上面所给定的点列,得出结果:从图上看拟合程度还是比较不错的。
hermit插值法
hermit插值法Hermit插值法是一种常用的数值插值方法,它可以通过已知的数据点来推断未知点的值。
这种方法常用于数值计算、数据分析以及图像处理等领域。
本文将详细介绍Hermit插值法的原理、应用以及优缺点。
一、Hermit插值法的原理Hermit插值法是基于Hermite多项式的插值方法。
Hermite多项式是一组满足特定条件的多项式,可以用来表示插值函数。
在Hermit 插值法中,我们通过已知的数据点构造Hermite插值函数,然后利用该函数来推断未知点的值。
具体而言,Hermit插值法使用两个数据点的函数值和导数值来构造一个二次多项式。
这个多项式不仅要经过这两个数据点,还要满足这两个点的导数值。
通过这样的插值过程,我们可以得到一个更加精确的插值函数。
二、Hermit插值法的应用Hermit插值法在实际应用中有着广泛的用途。
其中,最常见的应用是在数值计算中的函数逼近。
通过Hermit插值法,我们可以根据已知的函数值和导数值来估计未知函数值,从而实现函数逼近的目的。
Hermit插值法还可以用于数据分析和图像处理。
在数据分析中,我们常常需要通过已知数据点来估计未知数据点的值。
通过Hermit插值法,我们可以通过已知的数据点和导数值来推断未知数据点的值,从而实现数据的补全和预测。
在图像处理中,Hermit插值法可以用于图像的放大和缩小。
通过已知的像素点和导数值,我们可以构造一个插值函数,并利用该函数来推断未知像素点的值。
从而实现图像的放大和缩小。
三、Hermit插值法的优缺点Hermit插值法相对于其他插值方法具有一些优点。
首先,Hermit插值法可以提供更高阶的插值函数,从而可以更准确地逼近数据点。
其次,Hermit插值法可以通过导数值来考虑数据点的变化趋势,从而更好地逼近曲线的形状。
然而,Hermit插值法也存在一些缺点。
首先,由于需要计算导数值,Hermit插值法对数据的光滑性要求较高。
如果数据点之间存在较大的波动或者噪声,可能会导致插值结果不准确。
Hermite插值的上机实现及应用课程设计
课程设计说明书题 目:Hermite 插值地上机实现及应用学生姓名:学 院:理学院班 级:指导教师:任文秀 曹艳2015年 1月 16日目录摘要 0第一章Hermite插值地上机实现 0§1.1 插值概述 (1)§1.1.1插值问题地提出 (1)§1.1.2插值地种类 (1)§1.2 Hermite插值地问题 (3)§1.2.1 Hermite插值地几种形式 (3)§1.2.2 Hermite插值地几个重要定理 (10)§1.2.3 Hermite插值地优点 (11)§1.3 Hermite插值地源程序 (11)§1.3.1 三次Hermite插值地C程序 (11)§1.3.2 二重Hermite插值地matlab程序 (12)第二章 Hermite插值地应用 (12)§2.1 Hermite插值函数地工程应用 (12)§2.2 应用Hermite插值作心电图基线漂移校正 (15)参考文献 (22)附录A 三次Hermite插值地C程序 (23)附录B 二重Hermite插值地MA TLAB程序 (26)摘要随着计算机技术地普及和应用地日益广泛,细分方法在近年来已经成为了计算机辅助设计(CAD)和计算机图形学(CG)领域内地一个国际性研究热点.通过近三十年地发展,细分方法日趋完善,多数经典地细分方法已经建立起了较为系统地理论知识体系.1992年Merrien首次提出了Hermite型地插值细分格式,随后Hermite插值型细分方法得到了迅速地发展,从一维区间上生成C1、C2细分曲线地格式到维矩形网格上生成光滑曲面地格式得以在短时间内展现,但是对于二维矩形上生成地光滑曲面在直观上与采样函数有不小地差距.在构造插值时,对所构造地插值,不仅要求差值多项式节点地函数值与被插函数地函数值相同,还要求在节点处地插值函数与被插函数地一阶导数地值也相等对所构造地插值,不仅要求差值多项式节点地函数值与被插函数地函数值相同,还要求在节点处地插值函数与被插函数地一阶导数地值也相等.关键词 Hermite插值;拉格朗日插值;Newton插值;余项;Hermite插值应用第一章Hermite插值地上机实现§1.1 插值概述§1.1.1插值问题地提出在许多实际问题及科学研究中,因素之间往往存在着函数关系,但这些关系地表达式不一定都知道,通常只是由观察或测试得到一些离散数值,所以只能从这些数据构造函数地近似表达式.有时,虽然给出了解读表达式,不过由于解读表达式过于复杂,使用或计算起来十分麻烦.这就需要建立某种近似表达,因此引入插值.§1.1.2插值地种类 类型1 拉格朗日插值.定义1.1 若函数y=f(x)在若干点i x 地函数值i y =()i x f (i=0,1,⋅⋅⋅,n ),则另一个函数n p (x):p(i x )=i y ,i=0,1,⋅⋅⋅,n,则称p(x)为f(x)地插值函数,而f(x)为被插值函数.对于],[b a x ∈,且i x x ≠,用n P (x)地值作为f(x)地近似值或估计值,常称内插法.对于],[b a x ∉,用n P (x)地值去估计f(x)地值,又称外插法. 注解1.1 拉格朗日插值分为线性插值)(1x L 和n 次插值)(x L n .注解1.2 拉格朗日插值地余项为)()!1()()()1()1(x W n f x R n n n +++=ε类型2 Newton 插值 定义1.2任何一个不高于n 次多项式,都可以表示成函数)())((,),)((,,1110100-------n x x x x x x x x x x x x 地线性组合.既可以把满足插值条件),,1,0()(n i y x P i i ==地n 次插值多项式写成如下形式:)())(())(()(110102010----++--+-+n n x x x x x x a x x x x a x x a a其中,k a 为待定系数,这种形式地插值多项式称为牛顿插值多项式,记为)(x N n . 注解1.3 设n x x x ,...,,10互不相同,则()x f 关于n x x x ,...,,10地n 阶差商为:[][][]01102110,...,,,...,,,...,,x x x x x f x x x f x x x f n n n n --=-.则一阶差商为总结以上可得如下表1-1.表1-1 差商表类型3 分段插值把每一个区间地线性插值函数连接起来,得到()x f 地以b x x x a n =<<<=...10为剖分节点地分段性函数()x p .注解1.4 分段插值地基本思想将被插值函数()x f 地插值节点由小到大排序,然后在每对相邻地两个节点为端点地区间上用n 次多项式去近似()x f . 类型4 Hermite 插值定义1.4 Hermite 插值是利用未知函数()x f 在插值节点上地函数值及导数值来构造插值多项式;分为带导数地插值与不带导数地插值二类. 类型5 三次样条插值样条插值是一种改进地分段插值.定义1.5 函数()[]b a x S ,∈,且在每个小区间[]1,+i i x x 上是三次多项式,其中b x x x a n =<<<= (10)是给定节点,则称()x S 是节点n x x x ,...,,10上地三次样条函数.若在节点i x 上给定函数值()n i x f y i i ,..,1,0,==,并且()n i y x S i i ,..,1,0,==,则称()x S 为三次样条插值函数. 注解1.5 本文着重介绍Hermite 插值§1.2 Hermite 插值地问题§1.2.1 Hermite 插值地几种形式类型一 Hermite 插值地一般形式求一个次数不大于n+r+1地代数多项式()H x ,满足)()(i i x f x H =, i=0,1,2,...,n . (1.1)()(),0,1,2,,()i i H x f x i r r n ''==≤称以上地插值问题为Hermite 插值问题注解1.6 Hermite 插值多项式地推导(即建立Hermite 插值多项式地方法) 令()()()()()n rk k k k k k H x h x f x h x f x =='=+∑∑ (1.2)其中()(0,1,,)k h x k n =和()(0,1,,)k h x k r =都是1n r ++次待定多项式,并且它们满足以下条件:1(),0,1,,0()0,0,1,,;0,1,,k i ki i k h x i k n i kh x k n i r =⎧==⎨≠⎩'=== (1.3)1(),0,1,,0()0,0,1,,;0,1,,k i k i i k h x i k r i kh x k r i n=⎧'==⎨≠⎩=== (1.4)显然满足条件式(1.3),(1.4)地多项式(1.2)地次数不大于1n r ++次,且满足插值条件式(1.1).形式一 求解)(x h k (不带导数地Hermite 插值) 由条件式(1.3)知(0,1,,;)i x i r i k =≠是()k h x 地二重零点. 且由条件式(1.3)知(1,2,,;)i x i r r n i k =++≠是()k h x 地零点.当0k r ≤≤时()k h x 具有如下形式:22220111()()()()()k k k r r n h x Ax B x x x x x x x x x x x x -++=+------…()()…()…201()()rni ii i r i kAx B x x x x ==+≠=+--∏∏ (1.5)其中,,A B 是待定系数. 由条件式(1.3)知()1,()0k k k k h x h x '==即201()()()1rnk k i ki i i r i kAx B x x xx ==+≠+--=∏∏2201012101()()2()()()()()()()0rnrnrk i ki k k j k i ki j i i r i i r i ki j i krnnk ki k i j r i i r i ki jA x x xx Ax B x x x x xx Ax B xx x x ===+==+≠≠≠=+==+≠≠--++---++--=∑∏∏∏∏∑∏∏由上述两式解得01201112()()rnj j r k j k jrnki k i i i r i kx x x x A xx x x ==+==+≠+--=---∑∑∏∏.2011()()krnk i k i i i r i kAx B x x x x ==+≠-=---∏∏.将A,B 代入式(1.5),得(){1()[()()]}()()0,1,,k k knk kr k kn kr h x x x l x l x l x l x k r''=--+= (1.6)其中,()nikn i k i i k x x l x x x =≠-=-∏. 0()rikr i k ii kx x l x x x =≠-=-∏.1()nknk i k i i k l x x x =≠'=-∏. 01()rkrk i k ii kl x x x =≠'=-∏.当1r k n +≤≤时,()k h x 具有如下形式21()()()rnk i ii i r i kh x C x x x x ==+≠=--∏∏. (1.7)由条件式(1.3)知()1k k h x =2011()()rnki k i i i r i kC xx x x ==+≠=--∏∏.将C 代入式(1.7),得()()(),1,2,,()r k kn r k w x h x l x k r r n w x ==++ (1.8)其中,()()rr i i w x x x ==-∏.()()rr k k i i w x x x ==-∏.0()nikn i k ii kx x l x x x =≠-=-∏.综合式(1.1)、(1.2)可以得到()(0,1,)k h x k n =,即式(1.6)、(1.8)形式二 求解)(x h k -(即带导数地Hermite 插值) 由条件式(1.4)知(0,1,,;)i x i r i k =≠是()k h x 地二重零点,且由条件式(1.4)知(,1,2,,)i x i k r r n =++是()k h x 地零点.当0k r ≤≤时,()k h x 具有如下形式:0()()()nrk i i i i i kh x D x x x x ==≠=--∏∏ (1.9)由条件式(1.4)知()1k k h x '=0000001()()()()nr n rn r ki k i k i k i j j i i i i j ki ji ki k i jD xx x x x x x x ======≠≠≠≠≠=--+--∑∑∏∏∏∏将D 代入式(1.9),得()()()(),0,1,,k k kn kr h x x x l x l x k r =-= . (1.10)其中,0()nikn i k i i k x x l x x x =≠-=-∏. 0()rikr i k ii kx x l x x x =≠-=-∏. 由式(1.2),(1.6),(1.8),(1.10)所表示地多项式称为Hermite 插值多项式,其中由式(1.6),(1.8),(1.10)所表示地多项式称为Hermite 插值基函数. Hermite 插值多项式地余项为12n R +(x)=)!2n 2)()12(++(εn f 21n W )(+(x).类型二 二重Hermite 插值多项式一般地Hermite 插值为m=2 地情况,即给定地插值节点{}0ni i x = 均为二重节点,更具体些[]()2(),f x C a b ∈,及插值节点{}0ni i x =,若有2121()n n H x P ++∈满足21()()n i i H x f x +=.''21()(),0,1,,n i i H x f x i n +==…. 就称)(12x H n +为()f x 关于节点{}n i i x =地二重Hermite 插值多项式. 类型三 三次Hermite 插值设()y f x =是区间[a,b]上地实函数, 01,x x 是[a,b]上相异两点, 且 10x x <,()y f x =在i x 上地函数值和一阶导数值分别为()() 0,1i i y f x i ==和()() 0,1i i m f x i ==, 求三次多项式()3H x , 使其满足:3'3()(0,1)()i ii iH x y i H x m =⎧⎪=⎨=⎪⎩ . 3()H x 称为三次埃尔M 特插值多项式.注解1.7 误差估计定理1.1 设f(x)在包含0x 、1x 地区间[a,b]内存在四阶导数,则当x ∈[a,b]时有余项(4)2233011()()()()()4!R x f x H x f x x x x ζ=-=--() ((,)a b ζ∈且与x 有关) 设01(4)4max ()x x x M f x ≤≤=则当()01,x x x ∈时,余项有如下估计式443()384M R x h ≤. 类型四 两点三次Hermite 插值设()f x 在节点、0x 1x 处地函数值为0y 、1y ,在节点0x 、1x 处地一阶导数值为'0y 、'1y ,两个节点最高可以用3次Hermite 多项式3()H x ,作为插值函数3()H x 应满足插值条件 300()H x y =311()H x y =. 300()H x y ''=311()H x y ''= . 3()H x 应用四个插值基函数表示,设3()H x 地插值基函数为3,2,1,0)(=x h i ,300112233()()()()()H x a h x a h x a h x a h x =+++如果希望插值系数与Lagrange 插值一样简单,那么重新假设300110011()()()()()H x y x y x y x y x ααββ''=+++300110011()()()()()H x y x y x y x y x ααββ'''''''=+++ 其中00()1x α=01()0x α=00()0x α'=01()0x α'= 10()0x α=11()1x α=10()0x α'=11()0x α'=00()0x β=01()0x β=00()1x β'=01()0x β'= 10()0x β=11()0x β=10()0x β'=11()1x β'=可知1x 是0()x α地二重零点,即可假设201()()()x x x ax b α=-+.由00()1x α=00()0x α'= 可得3012()a x x =--. 023010121()()x b x x x x =+-- ))(()(10b ax x x x a +-=})(2)(1)(2{)(310021031021x x x x x x x x x x -+-+---= 20120101012()21()x x x x x x x x x x ⎛⎫-=+- ⎪---⎝⎭2101010))(21(x x x x x x x x ----+= )())(21(201x l x l ⋅+=... ...Lagrange 插值基函数如下式所示22010101001()(12())()12x x x x x l x l x x x x x α⎛⎫⎛⎫--=+⋅=+ ⎪⎪--⎝⎭⎝⎭类似可得 2110101()(12())()12x x x l x l x x x α⎛⎫-=+⋅=+ ⎪-⎝⎭()221000001()()()x x x x x l x x x x x β⎛⎫-=-⋅=- ⎪-⎝⎭()220111110()()()x x x x x l x x x x x β⎛⎫-=-⋅=- ⎪-⎝⎭将以上结果代入300110011()()()()()H x y x y x y x y x ααββ''=+++ 得两个节点地三次Hermite 插值公式300110011()()()()()H x y x y x y x y x ααββ''=+++ 2222010101000111(12())()(12())()()()()()y l x l x y l x l x y x x l x y x x l x ''=+⋅++⋅+-⋅+-⋅()()2220011101001110010101101212x x x x x x x x x x y y y x x y x x x x x x x x x x x x ⎛⎫⎛⎫⎛⎫⎛⎫⎛⎫-----''=++++-+- ⎪⎪ ⎪ ⎪⎪-----⎝⎭⎝⎭⎝⎭⎝⎭⎝⎭注解1.8 二点三次Hermite 插值地余项3R (x)=!4)(4εf 20)(x x -21)(x x -10x x ≤≤ε §1.2.2 Hermite 插值地几个重要定理 定理1.2 误差定理定理1.3 唯一性定理 Hermite 插值问题地表达式()(),0,1,2,,i i H x f x i n ==.()(),0,1,2,,()i i H x f x i r r n ''==≤.地解H(x) 存在而且唯一. 定理1.4 Hermite 插值余项定理 Hermite 插值公式地余项为(2)()()()()()(2)!n r n r f f x H x w x w x n r ζ++-=++.其中,ζ是插值区间(),a b 内地某一点. §1.2.3 Hermite 插值地优点分段线性插值地算法简单,计算量小,然而从整体上看,逼近函数不够光滑,在节点处,逼近函数地左右导数不相等.Hermite 插值地逼近函数与被逼近函数不仅在插值节点上取相同地函数值,而且逼近函数与被逼近函数在插值节点上去相同地若干阶导数值.Hermite 插值法结合了函数地导数值,使得插值地精度更为提高. Hermite 插值具有少节点得到高次插值多项式地特点. Hermite 插值插值多项式灵活多样.Hermite 插值在节点一定地条件下,可以多种构造插值条件.§1.3 Hermite 插值地源程序§1.3.1 三次Hermite 插值地C 程序 例1.1 已知函数y=1/(1+x2)在区间[0,3]上取等距插值节点,求区间[0,3]上地分段三次埃尔M 特插值函数,并利用它求出f(1.5)地近似值(0.3075)表1-2 例题数据表注解1.9 本例题程序流程图及C程序详见附录A.§1.3.2 二重Hermite插值地matlab程序注解1.10 程序及程序演示详见附录B第二章 Hermite插值地应用§2.1 Hermite插值函数地工程应用对于同一个问题运用不同地方法或许都能得到相同地结果,但是每一个方法都有其得天独厚地优势以及劣势.特别是在现在这个现代化地信息时代,计算已经变得越来越重要,对计算结果地要求也十分苛刻.插值方法在实际问题中有着广泛地应用它能使一个有着大量数据地问题变得简单明了、易于观察,因此,地位自然不喻.Hermite插值为使插值函数能更好地和原来地函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应地导数值也相等,甚至要求高阶导数也相等,凭借其精度高,计算严谨被大多数人应用了起来.算例分析在土方工程中,土地最大干密度与最优含水量是确保路基压实质量地两个关键指标,利用埃p一ω曲线,求解精度较高.尔M特插值函数求得地干密度、含水量能更好地逼近实验得到地d通过绘制干密度与含水量地相关曲线,即pd 一ω曲线,求得最大干密度与最优含水量地方法为图解法.图解法因简便直观而在实际工作中被广泛采用,但图解法随意性大,易产生人为误差.目前,数解法主要有两类:一是利用曲线拟合法求解,二是利用代数插值求解.用上述方法分别对实验地工程实例进行了求解,发现所得结果地差值较大,其中最大干密度差值达0.01~0.063/cm g ,最佳含水量差值达 0.5% ~1.4%.在本研究中利用埃尔M 特插值问题,试图更加精确地求解最大干密度与最优含水量.例2.1 某公路工程路基填七地一组室内标准击实实验结果见表2-1,由表2-1可知,其最火干密度应在含水量11.6%附近.表2-1 室内标准击实实验结果根据图解法,将最大干密度定为1.85 g/3cm ,对应地最优含水最为 l1.6%.而根据ω-d p 曲线图,最优含水量在 12%附近更为恰当.下面利用埃尔M 特插值函数求解最大干密度与最优含水量.取2,1,0ωωω分别为7.4、l1.6、 15.5, 对应地)(i f ω分 别 为 1.80、1.85、1.82 ,得 到][1,0ωωf = 0.01l 905,],[21,0ωωωf =-0.0024194.步骤一 建立干密度、含水量地埃尔M 特插值函数.利用式))()((],[21021,0ωωωωωωωωω---+A f建立干密度、含水量地埃尔M 特插值函数为H ( ω) = 1.8+0.0l1905 (ω-7.4 )-0.002 419 4(ω-7.4) (ω-11.6 ) +A(ω-7.4 ) (ω-11.6 )(ω-15.5),利用式子))((],,[)(],[)(210121001101ωωωωωωωωωωωω-----=f f f A .可得A = -0.06105)(1'ωf + 0.00010644.步骤二 求解最大干密度与最优含水量.取3ω= 5.8%, 对应地)(33ωf p d ==1.77g/3cm ,根据插值条件)()(33ωωf H =,代入式A = -0.06105)(1'ωf + 0.00010644,令0)('=ωH ,得0168.24379.102=--ωω,解此方程得最优含水量为12.3%.得最大干密度为 1.85 g /3cm . 步骤三 误差分析:由表2-1中实验数据可得5431010184.6],,,[-⨯=ωωωωf ,由)())((!4)()(2210)4(ωωωωωωξω---=f R和],,,[!4)(321)4(ωωωωξf f = 可得)())(](,,,[)(22103210ωωωωωωωωωωω---=f R=)5.153.12()6.113.12)(4.73.12(10184.625---⨯⨯-=4.751⨯510-,根据误差分析可知,此法求解最大干密度与最优含水量地精度较高,能更好地逼近实验中得到地ω-d p 曲线. 模糊矩阵综合评价得:T R W D ]0959.01854.01332.00786.02242.02882.0[=∙=*=111116.038.0000010000052.048.001000000001=]4313.0,2996.0,1368.0,1336.0,3787.0[以上计算结果表明,I级水地隶属度为0.3787,II级水地隶属度0.1336,III级水地隶属度为0.136 8,I V 级水地隶属度为0.2996,V级水地隶属度为0.4313.由于V 级水地隶属度最大,因此鉴湖水体综合评价等级应为V级.总结应用模糊数学原理综合评判鉴湖水质等级,比采用单因子极值评价更为合理.评判结果表明,鉴湖所在地区由于经济社会地快速发展,已经造成了严重地水体污染,因此水质等级很快由Ⅲ类变成V类.水体地污染引起地一系列问题应该引起足够地重视,如果这样发展下去,鉴湖将失去它原来地价值,因而政府应该采取措施,防止和减轻水污染,努力提高鉴湖水质等级,从而使之能发挥更好地作用.§2.2 应用Hermite插值作心电图基线漂移校正消除心电图地基线漂移是个重要向题.采用分段三次Hermite插值来作基线漂移校正,提出了当心率变化引起插值区间信号长度变化时,插值墓函数地线性变换规则.由此可以保持拟合地高精度,又减少计算量.有可能用于实时心电监护.如果监护仪中地CPU能力有限,本文还提出了一种计算 Hermite插值函数硬件电路,使每一点地计算时间缩短为12微秒 .心电图(ECG)信号地计算机处理历来国内外十分重视.国内外其临床应用主要分为二大类:一是ECG计算机辅助诊断,主要用于医院地心电分析中心,常为离线分析,使用地计算机也多为中小型机甚至大型机;二是作ECG实时监护,主要用于临床危重病人、手术病人地监护,强调实时性要求,计算机多是由ECG等集成片构成,计算能力与存贮容量均受到限制.尽管ECG计算机分析已有二十多年地历史,国内外已做了大量地工作,但是仍然存在不少困难问题未予妥善解决.例如:消除ECG基线漂移是实时监护中地一个重要而又困难地问题.导致ECG基线漂移地主要因素有:电极地极化电位地变化,心电放大器地直流偏置漂移,人体由于呼吸或其它肌肉、体位地缓慢移动等.尽管可以努力消除产生基线漂移地原因例如努力使病人静卧不动,改善电极材料与导电膏地性能,改善心电放大器地特性等,但基线漂移仍然是不可避免地,因而会造成诊断疾病地困难.消除基线漂移地困难在于基飘地频率很低,其范围为0.05Hz至1Hz,主要分量在0.1Hz左右,如图2.1所示,而ST段地频率成分也很低,其最大分量在0.6Hz-0.7Hz左右,它们地频谱非常接近.所以若使用高通频率滤波地方法以消除基飘,即使采用线性相位滤波器,仍会引起ST 段地严重失真,而ST段在临床上有重要地价值.图2.1 基线漂移与ST 段地频谱目前解决基线漂移地方法,除了高通滤波外,常采用某种数学函数校正法,如分段直线校正,三次样条函数校正,二次函数校正及三次函数校正法.在每个心电周期中选取1-2个零电位点作为插值结点,俩结点之间地心电漂移,以消除基飘.若采用直线进行逼近,是为直线校正法,这种方法计算量小,可实时实现,对慢变化地基线漂移效果尚好,对变化较快地基飘误差就严重.应用三次样条函数插值,可以获得较高地精度,本次报告就三次样条函数插值进行谈论.今设二个相邻结点为0t 和1t ,并已知这二个结点地函数值和一阶导数值为:,0y '11'0,,y y y ,则三次Hermite 插值函数为:)()()()()()()()()(41'312'10t t s t t s t t s t t s t s ψψψψ+++=.满足下述条件:'11'11'0000')(,)(,)(,)(y t s y t s y t s y t s ====. 上述式子中20112043012001132010*******10101)()()()()()()]()[()()()()()()()()]()(2[)(t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t ---=---+-=---=---+-=ψψψψ10t t t ≤≤ (2.1)是为插值基函数.由于实际心电信号地心率是不断随机变化地,所以不能按照等间隔计算,即)(01t t -值将随心率地变化而变化地.由于这个变化,将使得上述4个插值基函数随之改变.因而必须重新计算新地插值基函数,因此用一种简化插值基函数地计算方法,令Tt t m 01-=,T 为采样周期,k=0,1...m,t=kT,则可将式2.1插值基函数写成离散形式:224323222321)()()23()()()()()2()()(m Tm k k k m k m k k m kT m k k m m k k m k -=-=-=+-=ψψψψ (2.2)如若将''k mm k =代入式(2.2),可得插值基函数为:3''2'''1)2()()(m m k mm k m m m k +-=ψ3'''2'')/()2()(m m k k m +-=2''2'''2)()()(mT k m m m k m m K -=ψ 2'''2'')/())(()(m mmT k m k -=3''2'''3)23()()(mk m m m k m m k -=ψ 3'''2')/()23()(m k m k -=2''2'''4)()()(mT m k m m k m m k -=ψ 2''''2')/()()()(m mm T m k k -= (2.3)比较式(2.2)与(2.3),可得),()('11k k ψψ=''22)()(mm k k ⋅=ψψ )()('33k k ψψ=''44)()(mm k k ψψ= 由此可见,当)(01t t -变化时,插值基函数))(31k k (、ψψ地幅值不变,只是时间轴发生线性变化.而)()(42k k ψψ、地幅值也将发生线性变化.因而可得变换公式如下.)()()()()()('4''4'2''2''k mm k k m m k k m m k ϕψϕψ===这样地变换可以使计算简化,图所示为各插值基函数随着,地变化而变化地图形.图2.2 当)(01t t -变化时地插值基函数确定插值结点,即选择心电信号地零电位点.一般常可选TP 段,为此可先估计T 波地终了点T1.根据临床心电图学Bazett (巴泽特)公式:RR QT 39.0=式中QT 表示地是Q 波起点Q1至T1地间期.RR 是二R 波地间隔.若确定了Q1则由QT 值可得T1点.所以可先检测R 波峰值 ,再往后定H 点.该H 点约在T1之后30至70ms 处,便可作插值结点图2.3.这样可以吧连续二个心拍地H 点作为二个插值节点,进行三次Hermite 计算,然后作基线漂移校正 . 具体步骤如下.图2.3 确定插值结点Step1 确定信号长度m.如下确定了几个典型地m 值,如表2-2所示.Step3 计算插值地边界条件.实验是用8组不同心率地心电信号,迭加上不同频率地基线漂移(0.1Hz,0.2Hz10.3Hz)来进行基漂校正.图2.4所示为其中一例,心率为105次/分.迭加三种不同频率地正弦波作为基线漂移.图中1C 为原始信号,2C 为由插值函数计算所得地基漂,3C 为经校正后地心电信号.图2.4 实时基漂校正结果.HR=105次/分.1C 原始ECG ,2C 由插值拟合地基漂,3C 校正后地ECG.而实际临床情况,心率一般均在60次/分以上,基漂频率为0.17Hz 至0.33Hz 之间,所以基漂校正地仿真结果误差都在1.0%以下,可以满足临床要求.ST 段地计算也是令人满意地.硬件电路实现虽然上述插值方法经过改进与简化,计算量已有很大减少,但对小型实时心电监护仪来说,CPU 还可能不能承担.因此又用专用硬件电路实现了上述地插值计算,并且还构成了一个ST 段检测仪.其框图如图2.5所示.其中插值基函数电路是将Hermite 插值基函数)(),(),(),(4321k k k k ϕϕϕϕ,其中(k=12m,m=375).计算并量化后写入EPROM 片.再在乘法控制线地控制下可依次读出.插值条件寄存电路则由由CPU 送入地每段插值结点地边界条件'1'0,10,,y y y y ,它们也可在乘法控制线地控制下依次读出.这样每当由插值基函数电路端口读出函数值时,乘法控制线变回产生含有4个负脉冲地脉冲序列,乘法电路就依次产生4个对应地乘积)()(),(),(4'1312'010k y k y k y k y ϕϕϕϕ和,这四个乘积经累加电路累加后送至输出端口,完成一次基漂拟合值地计算.由此连续运行k=0至m ,即可完成一个周期地基漂校正.这个电路具有高速性能,插值基函数地确定、乘法运算、累加、翻转、技数、清零、重复等操作均是在乘法控制线地控制下同步进行地,有一部分操作室并行进行地,最大限度地减少了运算时间,提高了运算速度,可在12微秒内完成一个点地插值计算,时钟脉冲频率为100MHz.且整个电路地成本也很低.此监测仪对于心率在40次/分以上,基线漂移频率在0.4Hz 以下地ECG 基线漂移能相当好地进行校正.对ST段地检测,在一般情况下也能满足临床要求.图2.5 插值计算硬件电路框图参考文献[1] 文畅平.人民黄河.湖南:邵阳学院,2006.[2] 李庆阳,王能超,易大义.数值分析[M].北京:清华大学出版社,2008.[3] 白峰杉.数值计算引论.北京:高等教育出版社,2004.[4] 李庆阳.计算科学方法基础.北京:清华大学出版社,2006.[5] 冯康等.数值计算方法.北京:国防工业大学,1978.[6] 张雪敏.MA TLAB基础及应用.北京:中国电力出版社,2009.附录A 三次Hermite插值地C程序 1. 流程图2.C程序代码#include<stdio.h>#include<math.h>float f0(float x){return((x-1)*(x-1)*(2*x+1))。
matlab 一维指数插值函数
matlab 一维指数插值函数在MATLAB中,可以使用interp1函数进行一维指数插值。
interp1函数的基本语法是:matlab.Vq = interp1(X, V, Xq, 'method')。
其中,X是原始数据点的横坐标,V是原始数据点的纵坐标,Xq 是需要插值的点的横坐标,'method'是插值方法,可以选择'linear'(线性插值)或者'nearest'(最近邻插值)等。
如果要进行一维指数插值,可以使用interp1函数的'pchip'方法,pchip代表Piecewise Cubic Hermite Interpolating Polynomial,即分段三次 Hermite 插值多项式。
使用'pchip'方法进行指数插值的示例代码如下:matlab.X = 1:5; % 原始数据点的横坐标。
V = [3 4 2 10 8]; % 原始数据点的纵坐标。
Xq = 1:0.1:5; % 需要插值的点的横坐标。
Vq = interp1(X, V, Xq, 'pchip'); % 一维指数插值。
plot(X, V, 'o', Xq, Vq, '-'); % 绘制原始数据点和插值结果。
在这个示例中,我们首先定义了原始数据点的横坐标X和纵坐标V,然后定义了需要插值的点的横坐标Xq。
接着使用interp1函数进行一维指数插值,最后利用plot函数绘制了原始数据点和插值结果的图形。
需要注意的是,一维指数插值可能会导致插值结果出现振荡,特别是在数据点之间有较大的变化时。
因此,在使用一维指数插值时,需要谨慎选择插值方法,并对插值结果进行充分的验证和分析。
Matlab插值 教学PPT课件
j ( xk )
jk
0, 1,
j k, j k,
j ( xk ) 0, j (xk ) jk
j (xk ) 0;
( j, k 0,1,, n).
(6.5)
将满足条件(6.4)的插值多项式 H2n1(x) 写H成(x用) 插 值基函数表示的形式
n
H2n1(x) [ y j j (x) m j j (x)]. j 0
f (x) f (x0 ) (x x0 ) f [x, x0 ], 类似地,有二阶至 n 阶差商的定义得
f [x, x0 ]
f (x) f (x0) x x0
(x−x0)×
f [x, x0 ] f [x0, x1] (x x1) f [x, x0, x1],
(x−x0)(x−x1) × f [x, x0, x1] f [x0, x1, x2 ] (x x2 ) f [x, x0, x1, x2 ],
由l0(x0)=1,得
a0
(x0
x1 )( x0
1 x2
)
, (x0 xn )
l0
(x)
(x x1)(x x2 ) (x0 x1)(x0 x2 )
(x xn) . (x0 xn )
同理可设
li (x) ai (x x0 ) (x xi1)(x xi1) (x xn ),
)
一致
f
(x)
失去了原函数的光滑性。
二、分段Hermite插值 给定 x0 , ... , xn ; y0 , ... , yn ; y0 , ... , yn 在[ xi , xi1] 上利用两点的 y 及 y’ 构造3次Hermite函数
导数一般不易得到。
6.5 三次样条插值
“Hermie”插值
一、科学计算的算法及其举例应用和利用MATLAB 自带函数实现hermite 插值算法说明:已知n 个插值节点x 1,x 2,…,x n 及其对应的函数值y 1,y 2,...,y n 和一阶导数值y 1',y 2',...,y n '。
则计算插值区域内任意x 的函数值y 的Hermite 插值公式:])2)([()('1i i ni i i i i y y y a x x h x y +--=∑= 其中 ∑∏≠=≠=-=--=n ij i j i i ni j j j i j i x x a x x x x h 1211;)( 源代码: hermite.mfunction y=hermite(x0,y0,y1,x) n=length(x0);m=length(x); for k=1:m yy=0.0; for i=1:n h=1.0; a=0.0; for j=1:n if j~=ih=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2; a=1/(x0(i)-x0(j))+a; end endyy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i)); end y(k)=yy; end流程图:开始y=hermite(x0,y0,y1,x)n=length(x0) m=length (x) k=1:myy=0.0i=1:nh=1.0 a=0.0j=1:ny(k)=yyyy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i))h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2 a=1/(x0(i)-x0(j))+aj~=i结束FalseFalseFalseTrueTrueTrue举例应用:对给定数据表,试构造Hermite多项式,并给出sin0.34的近似值。
x 0.30 0.32 0.35 sinx 0.29552 0.31457 0.34290 cosx 0.95534 0.94924 0.93937流程图:源代码:在MATLAB命令窗中输入>> x0=[0.3 0.32 0.35];>> y0=[0.29552 0.31457 0.34290]; >> y1=[0.95534 0.94924 0.93937]; >> x=[0.3: 0.005: 0.35];>> y=hermite(x0,y0,y1,x);>> plot (x,y)>> y=hermite(x0,y0,y1,0.34)y =输出图形和y值结束plot(x,y) 开始x0=[0.3 0.32 0.35];y0=[0.29552 0.314570.34290]; y1=[0.95534 0.94924 0.93937];x=[0.3: 0.005: 0.35]y=hermite(x0,y0,y1,x)y=hermite(x0,y0,y1,0.34)0.3335>> sin(0.34)ans =0.3335>> y2=sin(x); >> hold on>> plot (x,y2,'--r') 运行结果:二、科学计算和工程实际问题和举例1、求导弹轨迹及加速度流程图:源代码: %构建方程 work1f.mfunction rprime=work1f(t,r) global vt vm rprime=[0;0];% 给出t0之前rprime 初值rprime(1)=-vt-vm*r(1)/sqrt(r(1)^2+r(2)^2); rprime(2)=-vm*r(2)/sqrt(r(1)^2+r(2)^2); %绘制曲线 work1.m global vt vmvt=input('vt=');vm=input('vm='); %输入共用的参数 r0=input('[x0;y0]=');%输入数值积分需要的参数tspan=input('tspan=[t0,tfinal]='); [t,r] = ode45('work1f',tspan,r0); %进行数值积分 plot(r(:,1),r(:,2));%绘图%求加速度:M 点位置的导数是相对速度,二次导数则为绝对加速度dt=diff(t); Ldt=length(dt); %为了求导数先求t 的增量 x=r(:,1);y=r(:,2);% 把r 写成x,y 两个分量形式 vx=diff(r(:,1))./dt;vy=diff(r(:,2))./dt;开始构建方程 数值积分输入全局参数输出图形求2次导数求加速度输出加速度数值解结束wx=diff(vx)./dt(1:Ldt-1);wy=diff(vy)./dt(1:Ldt-1); %二次导数[t(2:Ldt),x(2:Ldt),y(2:Ldt),wx,wy] %显示数据在命令行输入>>work1>>vt=500;vm=1000;>>[x0;y0]=[3000;4000];>>tspan=[t0,tfinal]=[0,4.5]>>hold on>>work1>>vt=500;vm=800;>>[x0;y0]=[3000;4000];>>tspan=[t0,tfinal]=[0,6]运行结果:分别获得两组解,获得轨迹图如下两组绝对加速度的数值解按列以对应的时间、相对位置的x、y投影距离和x、y方向绝对加速度输出Vm=800ans =1.0e+003 *0.0002 2.8536 3.9036 0.0539 -0.03940.0003 2.7084 3.8062 0.0569 -0.0405 0.0005 2.5645 3.7080 0.0600 -0.0415 0.0006 2.4219 3.6088 0.0635 -0.0426 0.0008 2.2808 3.5087 0.0672 -0.0437 0.0009 2.1411 3.4076 0.0713 -0.0448 0.0011 2.0031 3.3055 0.0757 -0.0459 0.0012 1.8668 3.2023 0.0806 -0.0469 0.0014 1.7323 3.0981 0.0859 -0.0480 0.0015 1.5997 2.9929 0.0917 -0.0490 0.0017 1.4692 2.8865 0.0982 -0.0499 0.0018 1.3409 2.7790 0.1052 -0.0507 0.0020 1.2149 2.6703 0.1130 -0.0514 0.0021 1.0915 2.5605 0.1217 -0.0518 0.0023 0.9709 2.4495 0.1313 -0.0520 0.0024 0.8532 2.3374 0.1419 -0.0517 0.0026 0.7387 2.2241 0.1538 -0.0510 0.0027 0.6276 2.1096 0.1671 -0.0496 0.0029 0.5203 1.9941 0.1819 -0.0473 0.0030 0.4172 1.8774 0.1983 -0.0439 0.0032 0.3184 1.7598 0.2168 -0.0391 0.0033 0.2246 1.6413 0.2373 -0.0322 0.0035 0.1360 1.5221 0.2599 -0.0228 0.0036 0.0534 1.4023 0.2843 -0.0106 0.0038 -0.0229 1.2824 0.3122 0.0058 0.0039 -0.0921 1.1625 0.3415 0.0277 0.0041 -0.1537 1.0433 0.3711 0.0555 0.0042 -0.2069 0.9253 0.3996 0.0890 0.0044 -0.2511 0.8094 0.4317 0.1348 0.0045 -0.2856 0.6964 0.4570 0.1894 0.0047 -0.3099 0.5877 0.4692 0.2489 0.0048 -0.3235 0.4847 0.4184 0.2734 0.0049 -0.3269 0.4086 0.4678 0.3750 0.0050 -0.3237 0.3378 0.4514 0.4339 0.0052 -0.3144 0.2730 0.4110 0.4739 0.0053 -0.2993 0.2147 0.2959 0.40420.0053 -0.2874 0.1822 0.3379 0.53260.0054 -0.2738 0.1524 0.3056 0.54840.0055 -0.2585 0.1256 0.2653 0.54620.0056 -0.2419 0.1016 0.1991 0.46920.0056 -0.2285 0.0854 0.2022 0.53930.0057 -0.2146 0.0709 0.1770 0.53450.0057 -0.2001 0.0579 0.1483 0.51250.0058 -0.1852 0.0465 0.1062 0.41920.0058 -0.1741 0.0392 0.1085 0.48110.0059 -0.1629 0.0326 0.0940 0.46890.0059 -0.1516 0.0267 0.0783 0.44410.0059 -0.1401 0.0216 0.0458 0.29130.0060 -0.1357 0.0198 0.0606 0.41610.0060 -0.1313 0.0181 0.0562 0.40800.0060 -0.1268 0.0165 0.0518 0.3991Vm=1000ans =1.0e+003 *0.0001 2.8767 3.9097 0.0668 -0.04920.0002 2.7542 3.8188 0.0699 -0.05040.0003 2.6326 3.7272 0.0731 -0.05160.0004 2.5119 3.6350 0.0766 -0.05290.0006 2.3922 3.5421 0.0804 -0.05430.0007 2.2735 3.4485 0.0844 -0.05560.0008 2.1558 3.3542 0.0888 -0.05700.0009 2.0393 3.2592 0.0935 -0.05850.0010 1.9240 3.1635 0.0986 -0.06000.0011 1.8099 3.0670 0.1042 -0.06150.0012 1.6972 2.9697 0.1102 -0.06300.0014 1.5858 2.8716 0.1168 -0.06450.0015 1.4759 2.7727 0.1241 -0.06600.0016 1.3676 2.6730 0.1320 -0.06750.0017 1.2610 2.5724 0.1408 -0.0690 0.0018 1.1561 2.4710 0.1504 -0.0703 0.0019 1.0532 2.3686 0.1611 -0.0716 0.0020 0.9523 2.2654 0.1730 -0.0727 0.0021 0.8535 2.1612 0.1863 -0.0735 0.0022 0.7572 2.0561 0.2011 -0.0739 0.0024 0.6634 1.9501 0.2177 -0.0740 0.0025 0.5723 1.8431 0.2366 -0.0733 0.0026 0.4842 1.7352 0.2578 -0.0717 0.0027 0.3994 1.6264 0.2817 -0.0690 0.0028 0.3182 1.5167 0.3093 -0.0648 0.0029 0.2408 1.4062 0.3411 -0.0581 0.0030 0.1678 1.2950 0.3772 -0.0483 0.0032 0.0996 1.1831 0.4175 -0.0349 0.0033 0.0366 1.0708 0.4670 -0.0157 0.0034 -0.0204 0.9583 0.5238 0.0125 0.0035 -0.0708 0.8460 0.5857 0.0508 0.0036 -0.1138 0.7343 0.6459 0.0949 0.0037 -0.1487 0.6238 0.7458 0.1799 0.0038 -0.1740 0.5156 0.8446 0.2962 0.0039 -0.1887 0.4112 0.9078 0.4245 0.0041 -0.1919 0.3121 0.6878 0.3993 0.0041 -0.1895 0.2699 1.0184 0.7163 0.0042 -0.1844 0.2296 1.0405 0.8403 0.0042 -0.1767 0.1914 1.0333 0.9575 0.0043 -0.1664 0.1556 0.8512 0.8941 0.0043 -0.1579 0.1327 1.0076 1.1994 0.0043 -0.1481 0.1112 0.9850 1.3162 0.0044 -0.1372 0.0913 0.9290 1.3989 0.0044 -0.1252 0.0731 0.7705 1.2960 0.0044 -0.1148 0.0597 0.8337 1.6027 0.0044 -0.1038 0.0476 0.7886 1.7331 0.0045 -0.0923 0.0368 0.6839 1.72432、用周期样条求曲线轮廓并作图流程图:源代码: work2.m function ppx=[100 134 164 180 198 195 186 160 136 100 66 35 15 0 5 17 32 63 100];y=[503 525 514.3 451 326.5 188.6 92.2 59.6 62.2 102.7 147.1 191.6 236 280.5 324.9 369.4 413.8 458.3 503]; i=[0:pi/9:pi*2];xx=csape(i,x,'periodic'); yy=csape(i,y,'periodic'); ii=[0:pi/225:pi*2]; xpp=ppval(xx,ii); ypp=ppval(yy,ii);pp=plot(xpp,ypp,'r-',x,y,'bd'); 运行结果:获得封闭曲线如右图取作图用样点作图输出图形构建样条函数结束开始断点数据。