diff --git a/doc/dynare.texi b/doc/dynare.texi index 74da5d5ccdaa21e095046c2e14d7ac990ebfd0b0..ba6d7bcc834448e7ce1088df3d763447c902d882 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -9023,6 +9023,26 @@ ans = <dates: 1950Q3, 1950Q4, 1960Q1> @sp 1 +@deftypefn{dates} {@var{C} =} ne (@var{A}, @var{B}) + +Overloads the Matlab/Octave @code{ne} (not equal, @code{~=}) operator. @dates objects @var{A} and @var{B} must have the same number of elements (say, @code{n}) or one of the inputs must be a single element @dates object. The returned argument is a @code{n} by @code{1} vector of zeros and ones. The i-th element of @var{C} is equal to @code{1} if and only if the dates @code{A(i)} and @code{B(i)} are different. + +@examplehead +@example +>> A = dates('1950Q1','1951Q2'); +>> B = dates('1950Q1','1950Q2'); +>> A~=B + +ans = + + 0 + 1 +@end example + +@end deftypefn + +@sp 1 + @deftypefn{dates} {@var{C} =} plus (@var{A}, @var{B}) Overloads the Matlab/Octave @code{plus} operator (@code{+}). If both input arguments are @dates objects, then the method combines A and B without removing repetitions. If @var{B} is a vector of integers, the @code{plus} operator shifts the @dates object by @var{B} periods forward. diff --git a/matlab/@dates/ne.m b/matlab/@dates/ne.m new file mode 100644 index 0000000000000000000000000000000000000000..a5bab143b67cbe3b761f25a9bcd1b26adb4f2111 --- /dev/null +++ b/matlab/@dates/ne.m @@ -0,0 +1,102 @@ +function C = ne(A,B) % --*-- Unitary tests --*-- + +% Overloads ~= operator for dates objects. +% +% INPUTS +% o A dates object with n or 1 elements. +% o B dates object with n or 1 elements. +% +% OUTPUTS +% o C column vector of max(n,1) elements (zeros or ones). + +% Copyright (C) 2013 Dynare Team +% +% This file is part of Dynare. +% +% Dynare 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 3 of the License, or +% (at your option) any later version. +% +% Dynare 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 Dynare. If not, see <http://www.gnu.org/licenses/>. + +if ~isequal(nargin,2) + error('dates::ne: I need exactly two input arguments!') +end + +if ~isdates(A) || ~isdates(B) + error(['dates::ne: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be dates objects!']) +end + +if ~isequal(A.freq,B.freq) + C = 0; + return +end + +if isequal(A.ndat, B.ndat) + C = transpose(any(transpose(ne(A.time,B.time)))); +else + if isequal(A.ndat,1) || isequal(B.ndat,1) + C = transpose(any(transpose(bsxfun(@ne,A.time,B.time)))); + else + C = 0; + end +end + +%@test:1 +%$ % Define some dates objects +%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; +%$ d2 = dates('1960Q1','1960Q2','1960Q3','1960Q4') ; +%$ d3 = dates('1950Q1','1960Q2','1950Q3','1960Q4') ; +%$ +%$ % Call the tested routine. +%$ t1 = d1~=d1; +%$ t2 = d1~=d2; +%$ t3 = d1~=d3; +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(t1,zeros(4,1)); +%$ t(2) = dyn_assert(t2,ones(4,1)); +%$ t(3) = dyn_assert(t3,[0; 1; 0; 1]); +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ % Define some dates objects +%$ d1 = dates('1950Q1') ; +%$ d2 = dates('1960Q1') ; +%$ d3 = dates('1960Q1') ; +%$ +%$ % Call the tested routine. +%$ t1 = d1~=d1; +%$ t2 = d1~=d2; +%$ t3 = d1~=d3; +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(t1,0); +%$ t(2) = dyn_assert(t2,1); +%$ t(3) = dyn_assert(t3,1); +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ % Define some dates objects +%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; +%$ d2 = dates('1950Q2') ; +%$ d3 = dates('1970Q1') ; +%$ +%$ % Call the tested routine. +%$ t1 = d1~=d2; +%$ t2 = d1~=d3; +%$ +%$ % Check the results. +%$ t(1) = dyn_assert(t1,[1; 0; 1; 1]); +%$ t(2) = dyn_assert(t2,ones(4,1)); +%$ T = all(t); +%@eof:3