From 7d1899df208f22266a8952c4ffe9f69c4632c4ca Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Mon, 22 Jul 2013 17:02:13 -0400 Subject: [PATCH] dynSeries: fix scalar subtraction for octave --- matlab/@dynSeries/minus.m | 53 +++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/matlab/@dynSeries/minus.m b/matlab/@dynSeries/minus.m index ccd44f92e..52bb647a8 100644 --- a/matlab/@dynSeries/minus.m +++ b/matlab/@dynSeries/minus.m @@ -40,33 +40,38 @@ function A = minus(B,C) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -if isscalar(B) - assert(isa(C, 'dynSeries')); - b(1:size(C)) = B; - BB = dynSeries(b, C.time(1)); - BB.freq = C.freq; - BB.time = C.time; - BB.nobs = C.nobs; - BB.vobs = C.vobs; - BB.name = cell(BB.vobs,1); - BB.tex = cell(BB.vobs,1); - BB.name(1) = {num2str(B)}; - A = BB - C; +if isnumeric(B) && isreal(B) && isequal(length(B),1) && isa(C,'dynSeries') + keyboard + A = dynSeries(); + A.freq = C.freq; + A.init = C.init; + A.time = C.time; + A.nobs = C.nobs; + A.vobs = C.vobs; + A.name = cell(A.vobs,1); + A.tex = cell(A.vobs,1); + for i=1:A.vobs + A.name(i) = {['minus(' num2str(B) ',' C.name{i} ')']}; + A.tex(i) = {['(' num2str(B) '-' C.tex{i} ')']}; + end + A.data = bsxfun(@minus, B, C.data); return; end -if isscalar(C) - assert(isa(B, 'dynSeries')); - c(1:size(C)) = C; - CC = dynSeries(C, B.time(1)); - CC.freq = B.freq; - CC.time = B.time; - CC.nobs = B.nobs; - CC.vobs = B.vobs; - CC.name = cell(CC.vobs,1); - CC.tex = cell(CC.vobs,1); - CC.name(1) = {num2str(C)}; - A = B - CC; +if isnumeric(C) && isreal(C) && isequal(length(C),1) && isa(B,'dynSeries') + A = dynSeries(); + A.freq = B.freq; + A.init = B.init; + A.time = B.time; + A.nobs = B.nobs; + A.vobs = B.vobs; + A.name = cell(A.vobs,1); + A.tex = cell(A.vobs,1); + for i=1:A.vobs + A.name(i) = {['minus(' B.name{i} ',' num2str(C) ')']}; + A.tex(i) = {['(' B.tex{i} '-' num2str(C) ')']}; + end + A.data = bsxfun(@minus, B.data, C); return; end