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 = 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))]
Смотрите также
Report an issue | ||
<< convol2d | correlation_convolution | hank >> |