корреляция, ковариация
[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 = 0*ones(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);cov=[]; for j=1:64,cov=[cov;c(:,(j-1)*2+1:2*j)];end; rand('unif') 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); //центровка 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=0*ones(1:64); //32 coeffs [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) rand('unif') // тест для внешней программы 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))] | ![]() | ![]() |