今天分享一个如何用CurveFitting拟合一个由五万多个数据组成的特定公式的曲线
首先打开一个在桌面上名为laohua.xlsx的excel列表(文件所在位置很重要,放在桌面比较方便),它里面有两组数据分别为x和y,它们的数据长度都是57768,可见数据量的庞大,接下来我们要在matlab上按照一个特定公式y=alog(bx + 1) + c来拟合这条曲线。
首先要将这个二维数据导入到matlab中,导入代码如下,在matlab上可以生成图片观察
x=xlsread('C:\Users\Administrator\Desktop\laohua.xlsx','A1:A57768');%从桌面文件excle中读取x轴数据
y=xlsread('C:\Users\Administrator\Desktop\laohua.xlsx','B1:B57768');%从桌面文件excle中读取y轴数据
x1=1:1:57768;%新建一个横坐标
y1=smooth(y,10000);%平滑滤波
plot(x,y,'r*',x1,y1,'b-');
注意这里使用了平滑滤波。
接下来依次点击-APP-CurveFitting
由于有些图形过于复杂,在没有设置初始值的情况下直接使用CurveFitting会出现下面数据太过复杂报错的现象,所以我总结出一个策略,先用matlab平滑滤波,用滤波后的图形进行拟合,smooth(y1,10000)函数第二个参数取值越大曲线越光滑,光滑的曲线更容易拟合,一般来说,数据量较小的曲线直接采用滤波后曲线进行拟合就可以了,但复杂曲线由于数据量庞大,简单的滤波也不能拟合出来。
对于数据量庞大的复杂曲线来说,我们用滤波后曲线拟合的目的是得到一些初始参数,有了初始参数后在原图形上再进行拟合,成功几率将大大增加。
1.在Xdata和Ydata中选择滤波后的图形x1,y1。
2.选择CustomEquation后输入我们想要的特定公式
我们在结果这个地方发现系统依然报错,没有给出我们的公式,这是因为尽管我们已经平滑了曲线,但是由于没有设置初始参数,5万多个数据依然过于庞大,数据过于复杂导致的拟合失败。
解决办法:
数据量太大不能拟合,那我们就截取一些散点来减少数据量进行拟合吧,这样做的目的是找一些初始参数方便matlab做更简单的工作。
我们稍微变一下刚才的代码
x=xlsread('C:\Users\Administrator\Desktop\laohua.xlsx','A1:A57768');