matlab cftool光滑曲线导出为什么就不光滑了_MATLAB中数据插值和数据拟合的用法...

dce7d77fae4f78a484fb217bf49d914f.png

一、数据插值:

插值是在一组已知数据点的范围内添加新数据点的技术。可以使用插值来填充缺失的数据、对现有数据进行平滑处理以及进行预测等。MATLAB 中的插值技术可分为适用于网格上的数据点和散点数据点。从数学上来说,数据插值是一种函数逼近的方法。

数据插值的实现方法:

1、一维插值函数为interp1(),

调用格式:

y = interp1(X,Y,X1,method)

该式可以根据X,Y的值来计算函数在X1处的值。其中X,Y是两个等长的已知向量,分别表示采样点和采样值。X1是一个向量或标量,表示要插值的点。

method参数表示用于插值的方法,常用的取值由一下几种方法:
(1) linear: 线形插值,默认方法。将与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。

(2) nearest: 最近点插值。 选择最近样本点的值作为插值数据。

(3) pchip: 分段3次埃尔米特插值。采用分段三次多项式,除满足插值条件,还需满足在若干节点处相邻段插值函数的一阶导数相等,使得曲线光滑的同时,还具有保形性。

(4) spline: 3次样条插值。每一个分段你内构造一个三次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有连续的一阶和二阶导数。

>> 

a4ad6373afc4602c7f76be44c6ee64ae.png

以上四种方法的区别:

线形插值和最近点插值方法比较简单。其中线形插值方法的计算量与样本点n 无关。n越大,误差越小。

3次埃尔米特插值和3次样条插值都能保证曲线的光滑性。相比较而言,3次埃尔米特插值具有保形性,而3次样条插值要求其二阶导数也连续,所以插值函数的性态更好。

pchip和spline方法插值的区别​blog.csdn.net

MATLAB的二维插值函数为interp2(),

调用格式:y1 = interp2(X,Y,Z,X1,Y1,method)

其中X,Y两个向量,表示两个参数的采样点,Z是采样点对应的函数值。X1,Y1是连个标量或向量,表示要插值的点。指定的算法method计算二维插值。linear为双线性插值算法(默认算法),nearest为最临近插值,spline为三次样条插值,cubic为双三次插值。

关于数据插值下面有个优秀的总结:

插值与拟合​blog.csdn.net

MATLAB中拉格朗日插值的实现:

https://blog.csdn.net/m0_37395228/article/details/80874393​blog.csdn.net

MATLAB中牛顿插值的实现:

https://blog.csdn.net/wenyusuran/article/details/41725983​blog.csdn.net https://blog.csdn.net/m0_37395228/article/details/80875351​blog.csdn.net

二、曲线拟合:

曲线拟合是一种函数逼近的方法。可以分为线形拟合和非线性拟合。

曲线拟合的原理:对于y = f(x),通过构造一个函数g(x)取逼近未知函数f(x),使得误差在某种意义下达到最小。

一般使用多项式函数作为逼近函数,使用最小二乘法计算误差最小。

曲线拟合的实现方法:

使用polyfit()函数,其功能为求得最小二乘拟合多项式系数。

(1)线形曲线拟合:

调用格式:

(1) P= polyfit(X,Y,m)

(2) [P,S] = polyfit(X,Y,m)

(3) [P,S,mu] = polyfit(X,Y,m)

上述式子中的X,Y样本数据,m为拟合多项式的次数,一般为3次以内。

P为多项式的系数降幂向量,S为误差数据,mu是一个二元向量,mu(1)是mean(X), mu(2) 是std(X).

>> x = [1.0 1.5 2.0 2.5 3.0]';
>> y = [0.9 1.7 2.2 2.6 3.0]';
>> a = polyfit(x,y,1)          %次数1为一次线形拟合,相当于设定拟合函数为g(x) = a*x+b,求a和b

a =

    1.0200    0.0400           %此处两个值为上述g(x)的a和b值

>> xi = 1:0.1:3;
>> yi = polyval(a,xi);         %polyval()函数相当于已知自变量xi和函数a求函数值
>> plot(x,y,'o',xi,yi);

a0f0b039705df1dfe06f93ac464c0326.png
上述拟合之后的曲线和原数据点的分布关系如图
>> x = [1.2 3.3 4.5 7.8 9.9  6.7 10.3 13.2 ];
>> y = [2.3 4.5 6.7 7.3 7.6  8.6  9.8 11.2 ];
>> [p,s,mu] = polyfit(x,y,1)

p =

    2.6369    7.2500           %该处显示拟合函数为g(x) = 2.6369*x+7.2500


s = 

  包含以下字段的 struct:

        R: [2×2 double]
       df: 6
    normr: 2.7837


mu =

    7.1125
    3.9991

(2) 非线性曲线拟合:

1、fit():

对于非线性拟合时需要使用fittype()函数,该函数可以指定所要构造的拟合函数

如下面的例子中 ,我们想使用g(x)来拟合曲线,先使用fittype()函数将其指定该p,然后调用fit()函数来拟合

>> x = [1.0 1.5 2.0 2.5 3.0]';
>> y = [0.9 1.7 2.2 2.6 3.0]';
>> p = fittype('a*x+b*sin(x)+c');
>> f = fit(x,y,p)
f = 

     General model:
     f(x) = a*x+b*sin(x)+c
     Coefficients (with 95% confidence bounds):
       a =       1.249  (0.9856, 1.512)      %此处a,b,c为上述拟合函数的系数最优值
       b =      0.6357  (0.03185, 1.24)      %此处括号里显示的为置信区间。详见下文链接。
       c =     -0.8611  (-1.773, 0.05094)
>>plot(f,x,y);

v2-8132ecd6253ae0f79458a7f2614e4e98_b.jpg

由于曲线拟合只是对于曲线的逼近,其值并不一定确定,在逼近的时候会有误差,置信区间实质上反应了值摆动的一个可能的范围。

置信区间_百度百科​baike.baidu.com
a43678d3f0a84cf13a11921997b26c5a.png

2、nlinfit():

调用格式:

f = nlinfit(x,y,fun,f0):

上式中,x和y为观察数据的自变量和因变量,fun为待拟合的模型表达式,可以为y = f(x)的M文件的函数名,或者由inline()函数表示,y0是模型初始参数的估计值,计算后获得的返回值y为最小二乘法估计得出的模型最佳系数。

[y,r,J] = nlinfit(x,y,fun,y0):

曲线拟合后的返回参数r为拟合的残差,而J为残差r对a的Jacobi向量构成的矩阵。

[……] = nlinfit(x,y,fun,y0,options):

参数options对拟合过程进行设置,其中包括Maxlter(最大迭代次数)、TolFun(函数参数平方和允许值)、TolX(拟合系数允许的误差值)和Display(控制拟合过程的显示,其中off表示不现实输出、iter显示每次迭代的结果、final只显示最终结果、notify只在函数不收敛的时候显示结果)

3、lsqcurvefit():

调用格式:

[a,rnorm,r,exitflag] = lfqcurvefit(fun,a0,X,Y,lb,ub,options):

其中fun为待拟合的模型表达式,可以为y = f(x)的M文件函数名,或者由inline()函数表示,a0为模型系数的初始估计值,lb和ub分别为拟合系数的预估下界和上界,参数options用于拟合过程设置,同函数nlinfit(),函数返回的参数中a为拟合估计系数,rnorm为误差平方和,r为拟合模型的残差,exitflag为运行情况。

--------------------------------------------------------------------------------

本文部分数据、代码和方法介绍来源于网络。

本文仅供大家参考学习,欢迎指正!

更多MATLAB学习资源请入QQ群:953314432。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值