⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 covm.m

📁 MATLAB的时间序列分析相关函数,涵盖对时间序列分析所需要所有重要函数
💻 M
字号:
function [CC,NN] = covm(X,Y,Mode);% COVM generates covariance matrix% X and Y can contain missing values encoded with NaN.% NaN's are skipped, NaN do not result in a NaN output. % The output gives NaN only if there are insufficient input data%% COVM(X,Mode);%      calculates the (auto-)correlation matrix of X% COVM(X,Y,Mode);%      calculates the crosscorrelation between X and Y%% Mode = 'M' minimum or standard mode [default]% 	C = X'*X; or X'*Y correlation matrix%% Mode = 'E' extended mode% 	C = [1 X]'*[1 X]; % l is a matching column of 1's% 	C is additive, i.e. it can be applied to subsequent blocks and summed up afterwards% 	the mean (or sum) is stored on the 1st row and column of C%% Mode = 'D' or 'D0' detrended mode%	the mean of X (and Y) is removed. If combined with extended mode (Mode='DE'), % 	the mean (or sum) is stored in the 1st row and column of C. % 	The default scaling is factor (N-1). % Mode = 'D1' is the same as 'D' but uses N for scaling. %% C = covm(...); % 	C is the scaled by N in Mode M and by (N-1) in mode D.% [C,N] = covm(...);%	C is not scaled, provides the scaling factor N  %	C./N gives the scaled version. %	$Revision: 1.18 $%	$Id: covm.m,v 1.18 2003/09/15 14:07:49 schloegl Exp $%	CopyLeft (C) 2000-2002 by Alois Schloegl <a.schloegl@ieee.org>	%    This program is free software; you can redistribute it and/or modify%    it under the terms of the GNU General Public License as published by%    the Free Software Foundation; either version 2 of the License, or%    (at your option) any later version.%%    This program is distributed in the hope that it will be useful,%    but WITHOUT ANY WARRANTY; without even the implied warranty of%    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the%    GNU General Public License for more details.%%    You should have received a copy of the GNU General Public License%    along with this program; if not, write to the Free Software%    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USAif nargin<3,        if nargin==2,		if isnumeric(Y),                        Mode='M';                else		        Mode=Y;                        Y=[];                end;        elseif nargin==1,                Mode = 'M';                Y = [];        elseif nargin==0,                error('Missing argument(s)');        end;end;        Mode = upper(Mode);[r1,c1]=size(X);if ~isempty(Y)        [r2,c2]=size(Y);        if r1~=r2,                error('X and Y must have the same number of observations (rows).');                return;        end;else        [r2,c2]=size(X);end;if (c1>r1) | (c2>r2),        warning('Covariance is ill-defined, because of too less observations (rows)');end;if ~isempty(Y),        if (~any(Mode=='D') & ~any(Mode=='E')), % if Mode == M        	NN = real(~isnan(X)')*real(~isnan(Y));	        X(isnan(X)) = 0; % skip NaN's	        Y(isnan(Y)) = 0; % skip NaN's        	CC = X'*Y;        else  % if any(Mode=='D') | any(Mode=='E'), 	        [S1,N1] = sumskipnan(X,1);                [S2,N2] = sumskipnan(Y,1);                                NN = real(~isnan(X)')*real(~isnan(Y));        	        if any(Mode=='D'), % detrending mode        		X  = X - ones(r1,1)*(S1./N1);                        Y  = Y - ones(r1,1)*(S2./N2);                        if any(Mode=='1'),  %  'D1'                                NN = NN;                        else   %  'D0'                                       NN = max(NN-1,0);                        end;                end;                                X(isnan(X)) = 0; % skip NaN's        	Y(isnan(Y)) = 0; % skip NaN's                CC = X'*Y;                                if any(Mode=='E'), % extended mode                        NN = [r1, N2; N1', NN];                        CC = [r1, S2; S1', CC];                end;	end;        else                if (~any(Mode=='D') & ~any(Mode=='E')), % if Mode == M        	tmp = real(~isnan(X));                NN  = tmp'*tmp; 
                X(isnan(X)) = 0; % skip NaN's	        CC = X'*X;        else  % if any(Mode=='D') | any(Mode=='E'), 	        [S,N] = sumskipnan(X,1);        	tmp = real(~isnan(X));                NN  = tmp'*tmp; 
                if any(Mode=='D'), % detrending mode	                X  = X - ones(r1,1)*(S./N);                        if any(Mode=='1'),  %  'D1'                                NN = NN;                        else  %  'D0'                                      NN = max(NN-1,0);                        end;                end;                                X(isnan(X)) = 0; % skip NaN's                CC = X'*X;                                if any(Mode=='E'), % extended mode                        NN = [r1, N; N', NN];                        CC = [r1, S; S', CC];                end;	endend;if nargout<2        CC = CC./NN; % unbiasedend;return; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -