前言:需要对多组数据同时进行非线性拟合加快数据处理速度,MATLAB和Origin都可以完成这项目标,但需要借助速度和精度两个指标综合衡量选择哪种方式进行批量的非线性拟合。
MATLAB批量拟合方法
对一组数据进行非线性拟合时,可以用多种非线性函数进行拟合,这里选择lsqcurvefit函数。对标Origin拟合条件,设置
options = optimoptions('lsqcurvefit','Algorithm','levenberg-marquardt','MaxIter',500, 'TolFun', 1e-9);
b0=[0; 0; 0.001; 0; 0.01; 0]; % 初值
L=[0; 0; 0.001; 0; 0.01; 0]; % 下界
U=[0.01; 0.01; 0.01; 0.01; 0.1; 0.01]; % 上界
当对多组数据同时拟合多条非线性曲线时,最初想过使用MATLAB的矩阵运算优势进行批量快速拟合,但似乎不太可行,还是只能使用for循环,但传统的for循环迭代时间长,故使用了开启并行池的方法加速拟合速度,效果是显而易见的,速度上远超Origin,精度和Origin几乎相当。开启并行池的方法为
parfor i=1:length(x(1,:))
[b(:,i),~]=lsqcurvefit(fun,b0,x(:,i),y(:,i),L,U,options);
end
Origin批量拟合方法
1. 数据需要按照x-y1-y2等形式粘贴到book中,只有一个x轴(MATLAB不受此约束);
2. 以散点图形式画图;
3. 分析--拟合--非线性拟合;
4. 设置选项:(右边)函数选择(选择自己要拟合的函数)--(左边)数据选择--输入数据--添加没被选中的数据集--多数据拟合模式(全局拟合);
5. 参数选项:点击需要共享的参数(也可以不点击);
6. 拟合。
该方式在共享参数多的时候速度较慢,共享参数少的时候速度明显加快,但是还是不如MATLAB的并行运算。