From 1f48a2bffe91faa50dcdd4b6c527ccecb5c20e9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?=
 <stephane.adjemian@univ-lemans.fr>
Date: Wed, 12 Dec 2012 14:58:59 +0100
Subject: [PATCH] Added overloaded mrdivide method in dynSeries class.

---
 matlab/@dynSeries/mrdivide.m | 167 +++++++++++++++++++++++++++++++++++
 1 file changed, 167 insertions(+)
 create mode 100644 matlab/@dynSeries/mrdivide.m

diff --git a/matlab/@dynSeries/mrdivide.m b/matlab/@dynSeries/mrdivide.m
new file mode 100644
index 000000000..e75144b86
--- /dev/null
+++ b/matlab/@dynSeries/mrdivide.m
@@ -0,0 +1,167 @@
+function A = mrdivide(B,C)
+%@info:
+%! @deftypefn {Function File} {@var{A} =} mrdivide (@var{B},@var{C})
+%! @anchor{@dynSeries/mrdivide}
+%! @sp 1
+%! Overloads the mrdivide method for the Dynare time series class (@ref{dynSeries}).
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item B
+%! Dynare time series object instantiated by @ref{dynSeries}.
+%! @item C
+%! Dynare time series object instantiated by @ref{dynSeries}.
+%! @end table
+%! @sp 1
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item A
+%! Dynare time series object.
+%! @end deftypefn
+%@eod:
+
+% Copyright (C) 2012 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/>.
+
+% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
+
+if isa(B,'dynSeries') && isa(C,'dynSeries')
+    % Element by element divisions of two dynSeries object
+    if ~isequal(B.vobs,C.vobs) && ~(isequal(B.vobs,1) || isequal(C.vobs,1))
+        error(['dynSeries::times: Cannot add ' inputname(1) ' and ' inputname(2) ' (wrong number of variables)!'])
+    end
+    if ~isequal(B.nobs,C.nobs)
+        error(['dynSeries::times: Cannot add ' inputname(1) ' and ' inputname(2) ' (wrong number of observations)!'])
+    end
+    if ~isequal(B.freq,C.freq)
+        error(['dynSeries::times: Cannot add ' inputname(1) ' and ' inputname(2) ' (frequencies are different)!'])
+    end
+    if ~isequal(B.init,C.init)
+        error(['dynSeries::times: Cannot add ' inputname(1) ' and ' inputname(2) ' (initial dates are different)!'])
+    end
+    A = dynSeries();
+    A.freq = B.freq;
+    A.init = B.init;
+    A.nobs = max(B.nobs,C.nobs);
+    A.vobs = max(B.vobs,C.vobs);
+    A.name = repmat({'--NA--'},A.vobs,1);
+    A.tex = repmat({'--NA--'},A.vobs,1);
+    A.data = bsxfun(@rdivide,B.data,C.data);
+elseif isnumeric(C) &&  isreal(C) && isequal(length(C),1) && isa(B,'dynSeries') 
+    % division of a dynSeries object by a real scalar.
+    A = dynSeries();
+    A.freq = B.freq;
+    A.init = B.init;
+    A.nobs = B.nobs;
+    A.vobs = B.vobs;
+    A.name = repmat({'--NA--'},A.vobs,1);
+    A.tex = repmat({'--NA--'},A.vobs,1);
+    A.data = B.data/C;    
+elseif isnumeric(B) && isreal(B) && isequal(length(B),1) && isa(C,'dynSeries')
+    % division of a real scalar by a dynSeries object.
+    A = dynSeries();
+    A.freq = C.freq;
+    A.init = C.init;
+    A.nobs = C.nobs;
+    A.vobs = C.vobs;
+    A.name = repmat({'--NA--'},A.vobs,1);
+    A.tex = repmat({'--NA--'},A.vobs,1);
+    A.data = B./C.data;
+else
+    error()
+end
+
+%@test:1
+%$ % Define a datasets.
+%$ A = rand(10,2); B = randn(10,1);
+%$
+%$ % Define names
+%$ A_name = {'A1';'A2'}; B_name = {'B1'};
+%$
+%$ t = zeros(4,1);
+%$
+%$ % Instantiate a time series object.
+%$ try
+%$    ts1 = dynSeries(A,[],A_name,[]);
+%$    ts2 = dynSeries(B,[],B_name,[]);
+%$    ts3 = ts1/ts2;
+%$    t(1) = 1;
+%$ catch
+%$    t = 0;
+%$ end
+%$
+%$ if length(t)>1
+%$    t(2) = dyn_assert(ts3.vobs,2);
+%$    t(3) = dyn_assert(ts3.nobs,10);
+%$    t(4) = dyn_assert(ts3.data,[A(:,1)./B, A(:,2)./B],1e-15);
+%$ end
+%$ T = all(t);
+%@eof:1
+
+%@test:2
+%$ % Define a datasets.
+%$ A = rand(10,2); B = pi;
+%$
+%$ % Define names
+%$ A_name = {'A1';'A2'};
+%$
+%$ t = zeros(4,1);
+%$
+%$ % Instantiate a time series object.
+%$ try
+%$    ts1 = dynSeries(A,[],A_name,[]);
+%$    ts2 = ts1/B;
+%$    t(1) = 1;
+%$ catch
+%$    t = 0;
+%$ end
+%$
+%$ if length(t)>1
+%$    t(2) = dyn_assert(ts2.vobs,2);
+%$    t(3) = dyn_assert(ts2.nobs,10);
+%$    t(4) = dyn_assert(ts2.data,A/B,1e-15);
+%$ end
+%$ T = all(t);
+%@eof:2
+
+%@test:3
+%$ % Define a datasets.
+%$ A = rand(10,2); B = pi;
+%$
+%$ % Define names
+%$ A_name = {'A1';'A2'};
+%$
+%$ t = zeros(4,1);
+%$
+%$ % Instantiate a time series object.
+%$ try
+%$    ts1 = dynSeries(A,[],A_name,[]);
+%$    ts2 = B/ts1;
+%$    t(1) = 1;
+%$ catch
+%$    t = 0;
+%$ end
+%$
+%$ if length(t)>1
+%$    t(2) = dyn_assert(ts2.vobs,2);
+%$    t(3) = dyn_assert(ts2.nobs,10);
+%$    t(4) = dyn_assert(ts2.data,B./A,1e-15);
+%$ end
+%$ T = all(t);
+%@eof:3
-- 
GitLab