Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2023.1.0 - Русский


corr

корреляция, ковариация

Синтаксис

[cov,Mean] = corr(x,[y],nlags)
[cov,Mean] = corr('fft',xmacro,[ymacro],n,sect)

[w,xu] = corr('updt',x1,[y1],w0)
[w,xu] = corr('updt',x2,[y2],w,xu)
...
wk = corr('updt',xk,[yk],w,xu)

Аргументы

x

вещественный вектор/

y

вещественный вектор, значение по умолчанию x.

nlags

целое число, желаемое количество коэффициентов корреляции.

xmacro

внешняя программа scilab (см. ниже).

ymacro

внешняя программа scilab (см. ниже), значение по умолчанию xmacro.

n

целое число, общий размер последовательности (см. ниже).

sect

размер секций последовательности (см. ниже).

xi

вещественный вектор.

yi

вещественный вектор, значение по умолчанию xi.

cov

вещественный вектор, коэффициенты корреляции

Mean

вещественное число или вектор, всреднее значение x и, если указано, y

Описание

corr(x,y,…) вычисляет cov(m)=sum_{k=1}^{n-m} (x(k)-mean(x))(y(m+k)-mean(y)) / n, где m = 0, …, nlag-1.

Обратите внимание, что, если последовательности x и y разные, то corr(x,y,…) отличается от corr(y,x,…).

Короткие последовательности

[cov,Mean]=corr(x,[y],nlags) возвращает первые nlags коэффициентов корреляции и Mean = mean(x) (среднее арифметическое [x,y], если y является аргументом. Последовательность x (соответственно y) предполагается вещественной, и x и y одинакового размера n.

Длинные последовательности

[cov,Mean]=corr('fft',xmacro,[ymacro],n,sect), где xmacro - это:

  • функция типа [xx]=xmacro(sect,istart), которая возвращает вектор xx размером nsect, содержащий часть последовательности с индексами от istart до istart+sect-1;

  • fortran-подпрограмма или C-процедура, которая выполняет то же вычисление (для примера см. исходный код dgetx).

n - общий размер последовательности. sect - размер секций последовательности. sect должен быть кратным степени 2. cov имеет размерность sect. Вычисление производится с помощью БПФ.

Обновляющий метод
[w,xu]=corr('updt',x1,[y1],w0)
[w,xu]=corr('updt',x2,[y2],w,xu)
 ...
wk=corr('updt',xk,[yk],w,xu)

С этим синтаксисом вычисление обновляется при каждом вызове corr.

w0 = zeros(1, 2 * nlags);
nlags = power of 2.

x1,x2,... - это части x такие, что x=[x1,x2,...] и размеры xi кратны степени 2. Чтобы получить nlags коэффициентов, должно быть выполенно заключительное БПФ c=fft(w,1)/n; cov=c(1nlags) (n - это размер x (y)). Предупреждение: этот синтаксис предполагает, что xmean = ymean = 0.

Примеры

x = %pi/10:%pi/10:102.4*%pi;
rand('seed');
rand('normal');
y = [.8 * sin(x) + .8 * sin(2*x) + rand(x); .8 * sin(x) + .8 * sin(1.99*x) + rand(x)];
c = [];
for j = 1:2
    for k = 1:2
        c = [c; corr(y(k, :), y(j, :), 64)];
    end
end
c = matrix(c, 2, 128);
cc = [];
for j = 1:64
    cc = [cc; c(:, (j - 1) * 2 + 1:2 * j)];
end

rand('seed');
rand('normal');
x = rand(1, 256);
y = -x;
deff('[z] = xx(inc, is)','z = x(is:is+inc-1)');
deff('[z] = yy(inc, is)','z = y(is:is+inc-1)');
[c, mxy] = corr(x, y, 32);
x = x - mxy(1) * ones(x);
y = y - mxy(2) * ones(y);  //centring
c1 = corr(x, y, 32);
c2 = corr(x, 32);
norm(c1 + c2, 1)
[c3, m3] = corr('fft', xx, yy, 256, 32);
norm(c1 - c3, 1)
[c4, m4] = corr('fft', xx, 256, 32);
norm(m3, 1)
norm(m4, 1)
norm(c3 - c1, 1)
norm(c4 - c2, 1)
x1 = x(1:128);
x2 = x(129:256);
y1 = y(1:128);
y2 = y(129:256);
w0 = zeros(1, 64);
[w1, xu] = corr('u', x1, y1, w0);
w2 = corr('u', x2, y2, w1, xu);
zz = real(fft(w2, 1)) / 256;
c5 = zz(1:32);
norm(c5 - c1, 1)
[w1, xu] = corr('u', x1, w0);
w2 = corr('u', x2, w1, xu);
zz = real(fft(w2, 1)) / 256;
c6 = zz(1:32);
norm(c6 - c2, 1)

// тест для внешней программы Fortran или C
deff('[y] = xmacro(sec, ist)','y = sin(ist:(ist+sec-1))');
x = xmacro(100, 1);
[cc1, mm1] = corr(x, 2^3);
[cc, mm] = corr('fft', xmacro, 100, 2^3);
[cc2, mm2]=corr('fft', 'corexx', 100, 2^3);
[max(abs(cc - cc1)), max(abs(mm - mm1)), max(abs(cc - cc2)), max(abs(mm - mm2))]

deff('[y] = ymacro(sec, ist)','y = cos(ist:(ist+sec-1))');
y = ymacro(100, 1);
[cc1, mm1] = corr(x, y, 2^3);
[cc, mm] = corr('fft', xmacro, ymacro, 100, 2^3);
[cc2, mm2] = corr('fft', 'corexx', 'corexy', 100, 2^3);
[max(abs(cc - cc1)), max(abs(mm - mm1)), max(abs(cc - cc2)), max(abs(mm - mm2))]

Смотрите также

  • xcorr — Computes discrete auto or cross correlation
  • xcov — Computes discrete auto or cross covariance
  • correl — correlation of two variables
  • cov — Sample covariance matrix
  • covar — covariance of two variables
Report an issue
<< convol2d correlation_convolution hank >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon May 22 12:41:13 CEST 2023