数据外推,如何删除废话数据?

时间:2014-11-13 07:06:26

标签: matlab extrapolation

以下列形式考虑一些数据

Sample = [1 2 3 4 5 6 7 8 9 10]';
Data = [10 10 10 10 8 5 2 1 0.6 0.4]';

现在我知道这个数据在用半月轴绘制时应该形成一条直线:

example plot

问题是样本号。由于所使用的仪器的限制,1,2,3和4全部最大为10。所以我想做的是为样本5:10拟合一条直线,然后使用它来推断回来,这样我就可以估算出1,2,3和4的值。

我对如何在MATLAB中执行此操作感到困惑,我的尝试如下:

Sample = [1 2 3 4 5 6 7 8 9 10]';
Data = [10 10 10 10 8 5 2 1 0.6 0.4]';

Sample(1:4) = [];
Data(1:4) = [];

x = Sample;
y = Data;

p = polyfit(x,y,0);
x1 = Sample;
f1 = polyval(p,x1);

figure;
semilogy(Sample,Data,'ro');
hold on
plot(x1,f1,'b--')

产生这个情节...

plot2

1 个答案:

答案 0 :(得分:3)

您将直线拟合到指数数据,因此必须在该数据的对数上应用polyfit。然后对polyval的结果应用exp()。最后,还可以使用semilogy()将行添加到半决赛图中。 我也删除了不需要的变量。我保留它以便您可以看到所有数据/样本值,但拟合会忽略前4个值,如您所愿。

Sample = [1 2 3 4 5 6 7 8 9 10]';
Data = [10 10 10 10 8 5 2 1 0.6 0.4]';

% // Data for fit: indx 5 to end
x = Sample(5:end);
y = Data(5:end);

p = polyfit(x,log(y),1); % // fit of logarithmic data
f1 = exp(polyval(p,x)); % // apply exp() function

figure;
semilogy(Sample,Data,'ro');
hold on
semilogy(x,f1,'b--') % // also semilogy!

结果如下:

enter image description here

如果您不想绘制原始数据,请使用

figure;
semilogy(x,y,'ro');
hold on
semilogy(x,f1,'b--') % // also semilogy!

代替。