如何在MATLAB中生成具有特定趋势的数据

时间:2016-12-14 14:22:22

标签: matlab

我想测试Akaike标准(它是一个标准,给出了你在哪里得到时间序列的重大变化),但要做到这一点我需要生成数据,例如遵循正弦趋势,线性趋势具有正斜率或负斜率,恒定趋势等。到目前为止,我已经做了这个但是随机数,这是:

%Implementation of the Akaike method for Earth sciences.

N=100;
data=zeros(N,1);

for i=1:N
    data(i,1)=unifrnd(1,N);
end

%AIC=zeros(N-1,1);
data=rand(1,N);
for k=1:N
    %y=datasample(data,k);
    AIC(k,1)=k*log(var(data(1:k),1))+(N-k-1)*log(var(data(k+1:N),1));

end
AIC(1)=NaN;
%AIC(N-1)=[];AIC(N)=[];
%disp(AIC)
%plot(AIC)
subplot(2,1,1)
plot(data,'Marker','.')
subplot(2,1,2)
plot(AIC,'Marker','.')

那么,如何在MATLAB中生成不同趋势的不同数据?

提前多多感谢。

1 个答案:

答案 0 :(得分:1)

您可以做的是首先使用已知曲线开始,然后添加一些噪声或随机值,以便信号确实遵循趋势但是噪声很大。给定一组独立值,使用这些值生成正弦曲线的值,具有正斜率或负斜率的线和恒定值。

想到这样的事情:

X = 1 : N; % N is defined in your code
Y1 = sin(X) + rand(1, N); % Sinusoidal

slope1 = 2; intercept = 3;
Y2 = slope1*X + intercept + rand(1, N);  % Line with a positive slope

slope2 = -1; intercept2 = 0.5;
Y3 = slope2*X + intercept2 + rand(1, N); % Line with a negative slope

B = 2;
Y4 = B*ones(1, N) + rand(1, N); % Constant line 

rand是MATLAB中的一个函数,它在[0,1]之间统一生成浮点值。 Y1, Y2, Y3Y4是您所希望的趋势,它们遵循定义的曲线,但它们会添加一些随机值,这样您就不会完全获得所需的趋势,并且噪音的设计符合减少这些曲线与您定义的曲线的相似程度。增加随机值的大小以降低相似性。