корреляция, ковариация
[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.
целое число, желаемое количество коэффициентов корреляции.
внешняя программа scilab (см. ниже).
внешняя программа scilab (см. ниже), значение по умолчанию xmacro.
целое число, общий размер последовательности (см. ниже).
размер секций последовательности (см. ниже).
вещественный вектор.
вещественный вектор, значение по умолчанию xi.
вещественный вектор, коэффициенты корреляции
вещественное число или вектор, всреднее значение 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))] | ![]() | ![]() |