1

我想推断我拥有的一些数据,如下图所示。蓝线是原始数据,红线是我想要的外推。

在此处输入图像描述

为了使用回归分析,我使用了函数polyfit

sizespecial = size(i_C); 
endgoal = sizespecial(2); 
plothelp = 1:endgoal;

reg1 = polyfit(plothelp,i_C,2);
reg2 = polyfit(plothelp,i_D,2);

wherei_Ci_D是表示原始数据的向量。我使用以下代码扩展了数据:

plothelp=1:endgoal+11; 

for in = endgoal+1:endgoal+11
    i_C(in) = (reg1(1)*(in^2))+(reg1(2)*in)+reg1(3);
    i_D(in) = (reg2(1)*(in^2))+(reg2(2)*in)+reg2(3);
end

但是,我现在输出的图表是:

在此处输入图像描述

我不明白为什么要引入额外的缺口(红色圆圈)。请随时要求我澄清有关此问题的任何细节,并感谢您的所有回答。

4

1 回答 1

3

在此处输入图像描述

我想正在发生的是,您正在尝试对所有数据拟合二阶多项式。我的猜测是,这个多项式看起来很像我用橙色绘制的曲线。如果您按照马特评论中的建议,并在原始数据上绘制您的回归多项式(不仅仅是外推部分),您应该确认这一点。

通过拟合更高阶的多项式,您可能会获得更好的结果。您的数据有两个拐点,因此三阶多项式可能会很好地工作。然而,在高阶多项式上进行外推的一个危险是,它们可能在您的数据域之外产生相当大的变化,并产生意想不到的疯狂结果。

减轻这种情况的一种方法是对x系列的最终数据点执行线性回归。这些是图中以黄色突出显示的点。您可以将其调整x为一个参数,使其尽可能多地覆盖曲线的近似线性最终部分。我画的红线将是仅对这些数据(而不是整个数据集)执行的线性回归的结果

另一种选择可能是拟合样条曲线并对其进行推断。您可以使用interp1指定'spline'或的函数'pchip'

但是,最佳选择很大程度上取决于您要解决的问题的性质。

于 2016-02-22T09:01:05.567 回答