【问题标题】:How to generate data with a specific trend in MATLAB如何在 MATLAB 中生成具有特定趋势的数据
【发布时间】:2016-12-14 14:22:22
【问题描述】:

我想测试 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 中生成具有不同趋势的不同数据?

非常感谢。

【问题讨论】:

  • 你为什么不从这些曲线开始并添加一些噪音呢?
  • 如何添加噪音?你能详细说明一下吗? :) 谢谢
  • randrandn
  • X = B*ones(1, N) 其中B 是您的常数值。
  • 我已经为你添加了答案。这应该会更清楚。

标签: matlab


【解决方案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 是你想要的趋势,它们遵循定义的曲线,但它们添加了一些随机值,这样你就不会完全得到你想要的趋势,噪音旨在降低这些曲线的相似程度到您定义的曲线。增加随机值的大小以降低相似度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多