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,…)
вычисляет
,
где 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))]
Смотрите также
Report an issue | ||
<< convol2d | correlation_convolution | hank >> |