MATLAB拟合曲线的方法有很多,针对不同的函数类型应选用合适的拟合方法。
按照拟合方法来进行划分,一般可将待拟合的函数分为曲线/曲面拟合与多元函数拟合。
曲线/曲面拟合
cftool工具箱使用
曲线曲面拟合多是基于cftool拟合工具箱使用,使用非常方便,但只能对拟合一元、二元函数(当然,可以通过适当的变换对函数进行处理,使其能够在cftool中进行处理)。cftool工具一方面可以在MATLAB的APP中使用,同样也可以在命令窗口中使用。
下面结合MATLAB命令与工具箱选项进行说明:
拟合方法:
主要是指拟合所采用的函数,如线性拟合,多项式拟合,以及自定义函数拟合等等。具体如下:
- Custom Equations 用户自定义函数
- Expotential e指数函数
- Fourier 傅立叶函数,含有三角函数
- Gaussian 正态分布函数,高斯函数
- Interpolant 插值函数,含有线性函数,移动平均等类型的拟合
- Polynomial 多项式函数
- Power 幂函数
- Rational 有理函数
- Smooth Spline (光滑插值或者光滑拟合,不太清楚)
- Sum of sin functions 正弦函数类
- Weibull 威布尔函数
稳健性Robust:
- off:关闭,即采用传统的最小二乘方法进行拟合
- LAR:Least Absolute Residual(最小绝对残差),以残差平方最小为目标进行拟合。
- Bisquare:根据距离拟合线的距离加权,有些异常值权重为0,相当于对其进行剔除。
拟合效果评估:
拟合工具箱对应函数的使用与可视化
拟合工具箱主要涉及的函数有:fit fitype等。 这里以一元线性拟合为例进行说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 | %MATLAB拟合工具箱的使用 xdata = x_fit_4;ydata = y_fit_4; % f = fittype('k*x+b') %采用自定义函数 [fit1, estimate1] = fit(xdata,ydata,'poly1') % 针对原始数据的拟合 fdata = feval(fit1, xdata); % 求得拟合数据 I = abs(fdata-ydata) > 1.5*std(ydata);% 剔除点计算方法outliers = excludedata(xdata, ydata, 'indices', I) % 找到对应的剔除数据点 [fit2, estimate2] = fit(xdata, ydata, 'poly1',... 'Exclude', outliers) % 针对剔除异常点后的拟合 [fit3, estimate3] = fit(xdata, ydata, 'poly1',... 'Robust', 'on') % 采用稳健性拟合 plot(fit1,'r-',xdata,ydata,'k.',outliers,'m*') % 绘制拟合曲线,原始数据,剔除数据点。 hold on plot(fit2,'c--') plot(fit3,'b:') |
输出结果如下:
fit1 =
Linear model Poly1:
fit1(x) = p1x + p2
Coefficients (with 95% confidence bounds):
p1 = 1.545 (1.156, 1.933)
p2 = 4.901 (3.619, 6.184)
estimate1 = 包含以下字段的 struct:
sse: 454.1470
rsquare: 0.5046
dfe: 62
adjrsquare: 0.4966
rmse: 2.7065
fit2 =
Linear model Poly1:
fit2(x) = p1x + p2
Coefficients (with 95% confidence bounds):
p1 = 1.517 (1.186, 1.847)
p2 = 4.718 (3.625, 5.812)
estimate2 = 包含以下字段的 struct:
sse: 317.3518
rsquare: 0.5838
dfe: 60
adjrsquare: 0.5768
rmse: 2.2998
fit3 =Linear model Poly1:
fit3(x) = p1*x + p2
Coefficients (with 95% confidence bounds):
p1 = 1.513 (1.145, 1.881)
p2 = 4.712 (3.498, 5.927)
estimate3 = 包含以下字段的 struct:
sse: 407.4742
rsquare: 0.5555
dfe: 62
adjrsquare: 0.5484
rmse: 2.5636
进一步采用绘图窗口的Prediction bounds for function 绘图选项可以得到函数拟合的边界图如下:
多元函数拟合
多元函数的拟合,建议一般先将其转换为线性拟合方式,具体参考我的另外一篇博客
MATLAB求解模型待定系数
参考文献
拟合工具箱的使用