以下列形式考虑一些数据
Sample = [1 2 3 4 5 6 7 8 9 10]';
Data = [10 10 10 10 8 5 2 1 0.6 0.4]';
现在我知道这个数据在用半月轴绘制时应该形成一条直线:
问题是样本号。由于所使用的仪器的限制,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--')
产生这个情节...
答案 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!
结果如下:
如果您不想绘制原始数据,请使用
figure;
semilogy(x,y,'ro');
hold on
semilogy(x,f1,'b--') % // also semilogy!
代替。