2016-12-14 138 views
0

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

%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中有不同趋势的数据?

非常感谢。

+0

你为什么不从这些曲线开始,并添加一些噪音? – rayryeng

+0

如何添加噪音?你能否详细说明一下? :)谢谢 – Bicha

+0

'rand','randn'等 – rayryeng

回答

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是你期望的趋势,他们追随定义的曲线,但它们增加了一些随机值,这样你就不会完全得到你想要的趋势,而噪音的目的是减少这些曲线与曲线的相似程度定义。增加随机值的大小以降低相似度。

相关问题