Main Content

求拟合的微分和积分

此示例说明如何在预测变量值处求拟合的一阶和二阶导数以及拟合的积分。

创建一个基线正弦信号:

xdata = (0:.1:2*pi)';
y0 = sin(xdata);

向该信号添加噪声:

noise = 2*y0.*randn(size(y0)); % Response-dependent noise
ydata = y0 + noise;

用自定义正弦模型对含噪数据进行拟合:

f = fittype('a*sin(b*x)');
fit1 = fit(xdata,ydata,f,'StartPoint',[1 1]);

求预测变量处拟合的导数:

[d1,d2] = differentiate(fit1,xdata);

绘制数据、拟合和导数:

subplot(3,1,1)
plot(fit1,xdata,ydata) % cfit plot method
subplot(3,1,2)
plot(xdata,d1,'m') % double plot method
grid on
legend('1st derivative')
subplot(3,1,3)
plot(xdata,d2,'c') % double plot method
grid on
legend('2nd derivative')

请注意,导数也可以用 cfit 绘图方法直接计算和绘制,如下所示。然而,plot 方法不返回关于导数的数据。

plot(fit1,xdata,ydata,{'fit','deriv1','deriv2'})

求预测变量处拟合的积分:

int = integrate(fit1,xdata,0);

绘制数据、拟合和积分:

subplot(2,1,1)
plot(fit1,xdata,ydata) % cfit plot method
subplot(2,1,2)
plot(xdata,int,'m') % double plot method
grid on
legend('integral')

请注意,积分也可以用 cfit 绘图方法直接计算和绘制,如下所示。然而,plot 方法不返回积分数据。

plot(fit1,xdata,ydata,{'fit','integral'})