0

考虑以下形式的一些数据

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--')

这产生了这个情节......

情节2

4

1 回答 1

3

您正在将一条直线拟合到指数数据,因此您必须应用该polyfit数据的对数。然后应用于exp()polyval 的结果。最后,还用于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!

反而。

于 2014-11-13T07:26:40.907 回答