Mercurial > hg > ltpda
diff m-toolbox/classes/@ssm/blockMatAdd.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@ssm/blockMatAdd.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,61 @@ +% adds corresponding matrices of same sizes or empty inside cell array +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: blockMatAdd adds corresponding matrices of same sizes or empty inside +% cell array +% +% CALL: [cell3] = ssm.blockMatAdd(cell1,cell2) +% +% INPUTS: +% cell1 - cell array of matrices representing a matrix by blocs. +% blocs may be empty +% cell2 - cell array of matrices representing a matrix by blocs. +% blocs may be empty +% +% OPTIONNAL INPUTS: +% isnotempty_1 - logical array tells ~isequal(cell1{ii,jj},[]) +% isnotempty_2 - logical array tells ~isequal(cell2{ii,jj},[]) +% +% OUTPUTS: +% cell3 - cell array of matrices representing a matrix by blocs. +% blocs may be empty +% +% NOTE : function is private to the ssm class +% +% VERSION: '$Id: blockMatAdd.m,v 1.4 2010/08/27 13:02:45 adrien Exp $' +% +% TO DO : +% check ME in case of mixed symbolic and double +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function a = blockMatAdd(varargin) + a=varargin{1}; + b =varargin{2}; + Nrow = size(a,1); + Ncol = size(a,2); + if nargin ==4 + error('please remove the emptiness array as arguments, as they are not used anymore') + else + for ii=1:Nrow + for jj=1:Ncol + if min(jj,Nrow)==min(ii,Ncol) + % if we are on the extended diagonal, matrices should be there, add! + try + a{ii,jj} = a{ii,jj} + b{ii,jj}; + catch ME + a{ii,jj} = sym(a{ii,jj}) + sym(b{ii,jj}); + end + elseif ~isequal(a{ii,jj}, []) && ~isequal(b{ii,jj}, []) + % if both matrices are non-empty + try + a{ii,jj} = a{ii,jj} + b{ii,jj}; + catch ME + a{ii,jj} = sym(a{ii,jj}) + sym(b{ii,jj}); + end + elseif ~isequal(b{ii,jj}, []) + % if only the b is not empty + a{ii,jj} = b{ii,jj}; + end + end + end + end +end