利用nlinfit函数实现数据非线性拟合

所谓“拟合”,指的是在已有一组实验数据的前提下,研究这组数据有怎样的函数关系——最终结果是从这一组看似漫无规律的数据点中“找出”能用数学表达式表示的规律。

用数学语言描述的拟合定义如下:

非线性拟合

一个典型的数据拟合过程包括以下几个步骤:

  1. 有一组实验/实测数据;
  2. 根据数据,猜测其有怎样的发展规律(例如总趋势是指数增长还是对数下降?),并写出一个含有待定系数的数学表达式;
  3. 利用MATLAB nlinfit函数,算出待定系数的数值,即得到拟合的规律

听起来不难,但有几个问题需要解决:

如何猜出来数据的规律?

方法一,看数据点的发展规律符合哪种特殊类型的函数

2014-12-09_150431 2014-12-09_150441

方法二,用“机理描述”的方法,推导出一个“概念数学模型”,当然这个“概念模型”也是要带参数、满足数据发展规律的。

实例分析

简单数据组合(x,y),显函数y=f(x)形式的拟合

x=[ 0,47,93,140,186,279,372,465,558,651];

y=[18.98,27.35,34.86,38.52,38.44,37.73,38.43,43.87,42.77,46.22];

plot(x,y,'*')

b0=[43,0.6,0.1]; %初始参数值

fun=inline('b(1)*(1-b(2)*exp(-b(3)*x))','b','x');

[b,r,j]=nlinfit(x,y,fun,b0);

b %最佳参数

R=sum(r.^2) %误差平方和

y1=42.6643*(1-0.5483*exp(-0.0099*x));

plot(x,y,'*',x,y1,'-or')

2014-12-09_163657

 

语法说明

非线性拟合命令:[beta,r,J] = nlinfit(x,y,fun,beta0)

x,y为原始数据,fun是在M文件中定义的函数,beta0是函数中参数的初始值;beta为参数的最优值,r是各点处的拟合残差,J为雅克比矩阵的数值.

初始参数b0怎么求得?

首先看有几个待定系数,有几个待定系数,就将几组的实验数据带入方程中,结果必然是解一个可以求出一组参数的方程组,于是,各个参数的初始值就是这么来的了。

 

长河

在曾经的博客时代,是“首个桥隧工程领域独立博主”,目前是一名默默耕耘的普通高校教师。一家之言,仅供参考,未必成熟、绝不权威。

相关推荐

Matlab的三种循环

看到了举举兄的博客,总结得不错,我也来搜藏一下,我在这里只留下干货,如果您想看实例,请移步到他的博客地址:http: ...

3 条评论

  1. 第一次来你博客哦,文章不错,赞一个。求认识,求回访啊,www.aiyw.net

  2. seo

    不错的 顶一个

  3. seo

    楼主文章不错啊!加油哈~路过顶个~

发表评论

您的电子邮件地址不会被公开,必填项已用*标注。