matlab中的自定义自相关函数

时间:2014-01-14 10:01:38

标签: matlab

美好的一天, 我有一个数据集,我想在其上执行特定的自动关联功能:

i = \frac{1}{N} \sum\limits_{i=1}^n{S(j)S(j+1)}

但是,我真的不知道如何实现这一点。

我拥有的数据是一个包含1行和400列的数组。所以我只想编写一个完全符合上述内容的脚本,从i = 0开始它应该将元素1与元素1相乘,元素2与元素2相等,一直到400.然后,它应该乘以元素1表示元素2,2表示3表示,依此类推。

我也想对它进行标准化,使得第一个点等于1.

现在我看到了这个问题,即应该为n = infinity做到这一点。这意味着如果j+i相当快,j+i > 400元素将不存在。我不知道如何处理。

我知道我应该尝试自己编写一个脚本,而不仅仅是问你该怎么做。但是,我担心我上周才开始使用MatLab,而且我仍然非常缺乏经验。

到目前为止,我所想到的是,为了规范化,只需将每个元素除以第一个元素的值。这样,第一个等于1,我想这就是我所需要的。我可以在最后一直这样做。

到目前为止我想出的是

for n = 0:399
correlation(n) = 0;
for m = 1:400
correlation(n) = correlation (n) + dataset(1,m)*dataset(1,m+n);
end
end

在这里,我没有考虑到数组只有400列,因为我真的不知道如何。但如果原则上有无限列,这是正确的想法吗? (除了循环永远不会结束的事实,因为它是无限的,但在理论上)

也许像

for n = 0:399
correlation(n+1) = 0;
for m = 1:400
    if m+n < 401
correlation(n+1) = correlation (n+1) + dataset(1,m)*dataset(1,m+n);
    end
end
end
correlation = correlation ./ correlation(1,1);
plot(x,correlation, 'b')

会奏效吗?它给我一个从1到大约0的图表。我只是不确定这是否有意义,以及是否有可能更有效地做到这一点。

1 个答案:

答案 0 :(得分:0)

  

我拥有的数据是一个包含1行和400列的数组。所以我只想编写一个完全符合上述条件的脚本,从i = 0开始它应该将元素1与元素1相乘,元素2与元素2相乘,一直到400.然后,它应该将元素1与元素2,2与三,等等。

如果我正确理解了这个部分,你想要将每个可能的数据集组合相乘。这可以通过Kronecker张量积来完成。有关详细信息,请参阅Mathworks

所以你可以用以下方式来表达它:

MultipliedDataSet = kron(dataset,dataset')

其中dataset'是原始数据的转置版本。希望我理解正确,并希望它有所帮助。