0

我已经测量了来自 MATLAB 的数据,我想知道如何最好地平滑数据?示例数据(第一列=x-data / 第二列=y-data):

    33400       209.11
    34066       210.07
    34732        212.3
    35398       214.07
    36064       215.61
    36730       216.95
    37396       218.27
    38062       219.52
    38728       220.11
    39394       221.13
    40060        221.4
    40726       222.5
    41392       222.16
    42058       223.29
    42724       222.77
    43390       223.97
    44056       224.42
    44722        225.4
    45388       225.32
    46054       225.98
    46720       226.7
    47386       226.53
    48052       226.61
    48718       227.43
    49384       227.84
    50050       228.41
    50716       228.57
    51382       228.92
    52048       229.67
    52714       230.02
    53380       229.54
    54046       231.19
    54712       231.00
    55378        231.5
    56044        231.5
    56710       231.79
    57376       232.26
    58042       233.12
    58708       232.65
    59374       233.51
    60040       234.16
    60706       234.21

第二列中的数据应该是单调的,但事实并非如此。怎么让它光滑?我可能自己发明了一个简短的算法,但我认为这是使用已建立和经过验证的算法的更好方法......你知道以某种方式整合大纲以使其成为单调曲线的好方法!?

提前致谢

4

1 回答 1

1

在您的情况下,单调总是在增加!

请参阅以下选项(1. Cobb-Douglas;2. 二次;3. 三次)

    clear all
    close all

    load needSmooth.dat % Your data

    x=needSmooth(:,1);
    y=needSmooth(:,2);
    n=length(x);

    % Figure 1
    logX=log(x);
    logY=log(y);
    Y=logY;
    X=[ones(n,1),logX];
    B=regress(Y,X);
    a=exp(B(1,1));
    b=B(2,1);
    figure(1)
    plot(x,y,'k*')
    hold
    for i=1:n-1
      plot([x(i,1);x(i+1,1)],[a*x(i,1)^b;a*x(i+1,1)^b],'k-')
    end    


    %Figure 2

    X=[ones(n,1),x,x.*x];
    Y=y;
    B=regress(Y,X);
    c=B(1,1);
    b=B(2,1);
    a=B(3,1);
    figure(2)
    plot(x,y,'k*')
    hold
    for i=1:n-1
      plot([x(i,1);x(i+1,1)],[c+b*x(i,1)+a*x(i,1)^2; c+b*x(i+1,1)+a*x(i+1,1)^2],'k-')
    end    

%Figure 3

X=[ones(n,1),x,x.*x,x.*x.*x];
Y=y;
B=regress(Y,X);
d=B(1,1);
c=B(2,1);
b=B(3,1);
a=B(4,1);
figure(3)
plot(x,y,'k*')
hold
for i=1:n-1
  plot([x(i,1);x(i+1,1)],[d+c*x(i,1)+b*x(i,1)^2+a*x(i,1)^3; d+c*x(i+1,1)+b*x(i+1,1)^2+a*x(i+1,1)^3],'k-')
end    

Matlab 中还有一些熟函数,例如“平滑”和“样条曲线”,它们也应该适用于您的情况,因为您的数据几乎是单调的。

于 2014-02-19T03:24:34.697 回答