自相关系数的公式用C/C++实现
时间: 2024-03-27 13:36:52 浏览: 18
自相关系数的公式是:
$R(k) = \frac{\sum_{i=1}^{n-k}(x_i - \bar{x})(x_{i+k} - \bar{x})}{\sum_{i=1}^{n}(x_i - \bar{x})^2}$
其中,$x$ 是一个长度为 $n$ 的序列,$k$ 是滞后步数,$\bar{x}$ 是 $x$ 的平均值。
以下是 C/C++ 实现:
```c++
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<double> autocorrelation(vector<double> x) {
int n = x.size();
vector<double> R(n);
double mean = 0;
for (int i = 0; i < n; i++) {
mean += x[i];
}
mean /= n;
for (int k = 0; k < n; k++) {
double numerator = 0;
double denominator = 0;
for (int i = 0; i < n - k; i++) {
numerator += (x[i] - mean) * (x[i+k] - mean);
denominator += pow(x[i] - mean, 2);
}
R[k] = numerator / denominator;
}
return R;
}
int main() {
// example usage
vector<double> x = {1, 2, 3, 4, 5};
vector<double> R = autocorrelation(x);
for (int i = 0; i < R.size(); i++) {
cout << "R(" << i << ") = " << R[i] << endl;
}
return 0;
}
```