Matlab数据插值与拟合

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

1.Linear(分段线性插值) 1.Linear(分段线性插值)
它的算法是在每个小区间[x 它的算法是在每个小区间[xi,xi+1]上采用简单的线性插 值。在区间[x 值。在区间[xi,xi+1]上的子插值多项式为:
Fi = x − xi +1 x − xi f ( xi ) + f ( xi +1 ) xi − xi +1 xi +1 − xi
p1 ( x), p ( x), p ( x) = 2 L pn ( x), x1 ≤ x ≤ x2 x2 ≤ x ≤ x3 L xn ≤ x ≤ xn +1
其中 pi (x) 都是三次多项式。
对于给定的离散的测量数据经x 对于给定的离散的测量数据经x,y(称为断点), 要寻找一个三次多项式y=p(x), 要寻找一个三次多项式y=p(x), 以逼近每对数据 (xi,yi)点间曲线。过两点(xi,yi)和(xi+1,yi+1)只能确定一 点间曲线。过两点(x 条直线,而通过一点的三次多项式曲线有无穷多条。 为使通过中间断点的三次多项式曲线具有唯一性, 要增加以下的连续条件和边界条件(因为三次多项 式有4 式有4个系数): (1)三次多项式在点(xi,yi)处有: pi ( xi ) = pi +1 ( xi ) ; )三次多项式在点(x (2)三次多项式在点(xi,yi)处有:pi′( xi ) = pi′+1 ( xi ) ; )三次多项式在点(x p (3)三次多项式在点(xi,yi)处有: i′′( xi ) = pi′′+1 ( xi ) ; )三次多项式在点(x (4)边界条件:f ′′( x1 ) = f ′′( xn ) = 0 。
在MATLAB中编程实现拉格朗日插值法函数为: MATLAB中编程实现拉格朗日插值法函数为:
Language。 Language。 功能:求已知数据点的拉格朗日多项式; 调用格式:f= Language(x,y)或 Language(x,y,x0)。 调用格式:f= Language(x,y)或f= Language(x,y,x0)。 其中,x为已知数据点的x 其中,x为已知数据点的x 坐标向量; y为已知数据点的y 坐标向量; 为已知数据点的y x0为插值点的x坐标; x0为插值点的x f为求得的拉格朗日多项式或x0处的插值。 为求得的拉格朗日多项式或x0处的插值。
4.1 MATLAB中的插值函数 MATLAB中的插值函数
函数插值来源于函数的以下问题:只知道函 函数插值来源于函数的以下问题:只知道函 数在某区间有定义且已得到区间内一些离散 点的值,希望用简单的表达式近似给出函数 在此区间上的整体描述,并能与已知离散点 上的值相等。 插值法按插值函数的形式主要分为以下几种 形式: (1)代数多项式插值; (2)三角多项式插值; (3)有理分式插值。
例4-1 用interp1对sin函数进行分段线性插值。 interp1对sin函数进行分段线性插值 函数进行分段线性插值。
解:在MATLAB命令窗口中输入以下命令: 解:在MATLAB命令窗口中输入以下命令: >> x=0:2*pi; >> y=sin(x); >> xx=0:0.5:2*pi >> yy=interp1(x,y,xx); >> plot(x,y,'s',xx,yy) 注:例 注:例4-1中用默认的 (分段线性插值的linear) 分段线性插值的linear) 对已知的7 sin函数的 对已知的7个sin函数的 数据点进行插值,用 plot画出插值结果。从图中可以看出分段线性就是联结两个 plot画出插值结果。从图中可以看出分段线性就是联结两个 邻近的已知点的线性函数插值计算该区间内插值点上的函数 值。
‘nearest’ nearest’ ‘liner’ liner’ ‘spline’ spline’ ‘pchip’ pchip’ ‘cubic’ cubic’ 方法描述 最邻近插值:插值点处函数值取与插值点最邻近的已知点的函数值 分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函 数预测,MATLAB中interp1的默认方法 数预测,MATLAB中interp1的默认方法 样条插值:默认为三次样条插值。可用spline函数代替 样条插值:默认为三次样条插值。可用spline函数代替 三次Hermite多项式插值。可用pchip函数代替 三次Hermite多项式插值。可用pchip函数代替 同‘pchip’,三次Hermite多项式插值 pchip’,三次Hermite多项式插值
表4-2中各种方法中: (1)nearest方法速度最快,占用内存最小,但一般 nearest方法速度最快,占用内存最小,但一般 来说误差最大,插值结果最不光滑; (2)spline三次样条插值是所有插值方法中运行耗 spline三次样条插值是所有插值方法中运行耗 时最长的,其插值函数以及插值函数的一阶、二阶 导函数都连续,因此是最光滑的插值方法,占用内 cubic 存上比cubic方法小,但当已知数据点不均匀分布时 存上比cubic方法小,但当已知数据点不均匀分布时 可能出现异常结果。 (3)cubic三次多项式插值法中插值函数及其一阶导 cubic三次多项式插值法中插值函数及其一阶导 数都是连续的,因此其插值结果也比较光滑,运算 速度比spline方法略快,但占用内存最多。在实际 速度比spline方法略快,但占用内存最多。在实际 的使用中,应根据实际需求和运算条件选择合适的 算法。
数据插值与拟合
在工程实践与科学实验中, 在工程实践与科学实验中,常常需要从一组试验数 据之中找到自变量与因变量之间的关系,一般可 用一个近似函数表示。函数产生的办法因观测数 据的要求不同而异,数据插值与拟合是两种常用 据的要求不同而异,数据插值与拟合是两种常用 的方法。 4.1 MATLAB中的插值函数 MATLAB中的插值函数 4.2 拉格朗日插值法 4.3 利用均差的牛顿插值法 4.4 利用差分的牛顿插值法 4.5 Hermite插值 Hermite插值 4.6 spline三次样条插值 spline三次样条插值 4.7 多项式曲线拟合 4.8 最小二乘拟合
分段线性插值方法在速度和误差之间取得 了比较好的均衡,其插值函数具有连续性, 但在已知数据点处的斜率一般不会改变, 因此不是光滑的。分段线性插值方法是 MATLAB一维插值默认的方法。 MATLAB一维插值默认的方法。
来自百度文库
2.Spline(样条插值) 2.Spline(样条插值)
样条插值是用分段低次多项式去逼近函数。样条函 样条插值是用分段低次多项式去逼近函数。样条函 数可以给出光滑 的插值曲线,只要在插值区间端 点提供某些导数信息,样条插值可以适应不同光滑 需求。三次样条是使用最为广泛的样条插值,它在 需求。三次样条是使用最为广泛的样条插值,它在 每个子区间[x 每个子区间[xi,xi+1]上都是有二阶连续导数的三次多 项式,即
语法形式 y=interp1(x y=interp1(x,Y,xi) y=interp1(x y=interp1(x,Y,xi) y=interp1(x y=interp1(x,Y,xi,method) y=interp1(x y=interp1(x,Y,xi,method,’extrap’) ,method,’extrap’ y=interp1(x y=interp1(x,Y,xi,method,’extrap’,extrapval) ,method,’extrap’ y=interp1(x y=interp1(x,Y,xi,method,’pp’) ,method,’pp’ 说明 由已知点集( )插值计算x 由已知点集(x,Y)插值计算xi上的函数值 相当于x=1:length(Y interp(x 相当于x=1:length(Y)的interp(x,Y,xi) 用指定插值方法计算插值点x 用指定插值方法计算插值点xi上的函数值 对xi中超出已知点集的插值点用指定插值 方法计算函数值 用指定方法插值x 用指定方法插值xi上的函数值,超出已知 点集处函数值取extrapval 点集处函数值取extrapval 用指定方法插值,但返回结果为分段多 项式
解:在MATLAB命令窗口中输入以下命令: 解:在MATLAB命令窗口中输入以下命令:
>> x=[1 2 3 4 5 6 7]; >> y=[3.5 2.1 1.3 0.8 2.9 4.2 5.7]; >> xx=1:0.5:7; >> y1=interp1(x,y,xx,'nearest'); >> y2=interp1(x,y,xx,'spline'); >> y3=interp1(x,y,xx,'cubic'); >> plot(x,y,'o',xx,y1,'-',xx,y2,'-.',xx,y3,':') plot(x,y,'o',xx,y1,'-',xx,y2,'-
4.1.1 一元插值函数
MATLAB中的一元插值函数为interp1( ),它的功能是一维 MATLAB中的一元插值函数为interp1( ),它的功能是一维 数据插值(表格查找)。该命令对数据点之间进行计算内 插值,它出一元函数f(x)在中间点的数值,其中函数f(x)由 插值,它出一元函数f(x)在中间点的数值,其中函数f(x)由 所给数据决定。 一元插值函数interp1( )的几种调用格式如表4 一元插值函数interp1( )的几种调用格式如表4-1所示。 表4-1 一维插值插值函数interp1的语法格式 一维插值插值函数interp1的语法格式
代数多项式插值是最常用的插值方式,其内容也 是最丰富的,它又可分为以下几种插值方式: 非等距节点插值,包括拉格朗日插值、利用 (1)非等距节点插值,包括拉格朗日插值、利用 均差的牛顿插值和埃特金插值; (2)非等距节点插值,包括利用差分的牛顿插值 非等距节点插值,包括利用差分的牛顿插值 和高斯插值等; (3)在插值中增加了导数的Hermite(埃尔米特) )在插值中增加了导数的Hermite(埃尔米特) 插值; 插值; (4)分段插值,包括分段线性插值、分段Hermite 分段插值,包括分段线性插值、分段Hermite (埃尔米特)插值和样条函数插值; (5)反插值。 反插值。 按被插值函数的变量个数还可把插值法分为一元 按被插值函数的变量个数还可把插值法分为一元 插值和多元插值。 插值和多元插值。
n
由此整个区间[x 由此整个区间[xi,xi+1]上的插值函数为:
F ( x) = ∑ Fi li ( x)
i =1
其中 li (x) 定义如下:
x − xi −1 x − x , x ∈ [ xi −1 , xi ](i = 0略去) i i −1 x − xi +1 li ( x) = , x ∈ [ xi , xi +1 ](i = 0略去) xi − xi +1 x ∈ [ xi , xi +1 ] 0,
例4-2 用其他一维插值方法对以下7个离散数据点 用其他一维插值方法对以下7 (1,3.5)、(2,2.1)、(3,1.3)、(4.0.8)、(5,2.9)、(6,4.2)、 (1,3.5)、(2,2.1)、(3,1.3)、(4.0.8)、(5,2.9)、(6,4.2)、 (7,5.7)进行一维插值方法。 (7,5.7)进行一维插值方法。 进行一维插值方法
4.2 拉格朗日插值法
拉格朗日插值法是基于基函数的插值方法,插值多项 拉格朗日插值法是基于基函数的插值方法,插值多项 式可表示为
L( x) = ∑ yi li ( x)
i =0 n
其中li (x) 称为i次基函数: 称为i
( x − x0 ) L ( x − xi −1 )( x − xi +1 ) L ( x − xn ) li ( x) = ( xi − x0 ) L ( xi − xi −1 )( xi − xi +1 ) L ( xi − xn )
MATLAB中一维插值有多种算法,由interp1函数 MATLAB中一维插值有多种算法,由interp1函数 中的method指定。 MATLAB中一维插值的各种算 中的method指定。 MATLAB中一维插值的各种算 法如表4 法如表4-2所示。 表4-2 一维插值算法(method) 一维插值算法(method) method
相关文档
最新文档