


cuts a matrix into blocks stored inside cell array
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DESCRIPTION: cell_recut cuts a matrix into blocks stored inside cell
array. Blocks with zeros are nullified, except in the diagonal (to
preserve information on matrix size)
CALL: [cell3] = ssm.cell_recut(mat1,rowsizes,colsizes)
INPUTS:
mat1 - numeric array to be cut in pieces
rowsizes - vector giving block height
colsizes - vector giving block width
OUTPUTS:
cell3 - cell array of matrices representing a matrix by blocs.
blocs may be empty
***** There are no parameters *****
VERSION: '$Id: $'
HISTORY:
07-08-2008
TO DO :
check ME in case of mixed symbolic and double
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
to deal with matrices whose size is not defined

0001 % cuts a matrix into blocks stored inside cell array 0002 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0003 % 0004 % DESCRIPTION: cell_recut cuts a matrix into blocks stored inside cell 0005 % array. Blocks with zeros are nullified, except in the diagonal (to 0006 % preserve information on matrix size) 0007 % 0008 % CALL: [cell3] = ssm.cell_recut(mat1,rowsizes,colsizes) 0009 % 0010 % INPUTS: 0011 % mat1 - numeric array to be cut in pieces 0012 % rowsizes - vector giving block height 0013 % colsizes - vector giving block width 0014 % 0015 % OUTPUTS: 0016 % cell3 - cell array of matrices representing a matrix by blocs. 0017 % blocs may be empty 0018 % 0019 % ***** There are no parameters ***** 0020 % 0021 % VERSION: '$Id: $' 0022 % 0023 % 0024 % HISTORY: 0025 % 07-08-2008 0026 % 0027 % TO DO : 0028 % check ME in case of mixed symbolic and double 0029 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0030 function a_out = cell_recut(a, rowsizes, colsizes) 0031 % to deal with matrices whose size is not defined 0032 rowsizes = max(zeros(size(rowsizes)), rowsizes); 0033 colsizes = max(zeros(size(colsizes)), colsizes); 0034 rowrank = cumsum([1 rowsizes]); 0035 colrank = cumsum([1 colsizes]); 0036 Nrow = length(rowsizes); 0037 Ncol = length(colsizes); 0038 a_out = cell(Nrow, Ncol); 0039 for i=1:Nrow 0040 for j=1:Ncol 0041 rowmin = rowrank(i); 0042 rowmax = rowrank(i+1)-1; 0043 colmin = colrank(j); 0044 colmax = colrank(j+1)-1; 0045 0046 if rowmax >= rowmin && colmax >=colmin 0047 if isa(a, 'sym') 0048 try 0049 a_out{i,j} = double(a(rowmin:rowmax, colmin:colmax)); 0050 if ~(i==j) && norm(a_out{i,j})==0 0051 a_out{i,j}=[]; 0052 end 0053 catch 0054 a_out{i,j} = a(rowmin:rowmax, colmin:colmax); 0055 end 0056 elseif ~norm(a(rowmin:rowmax, colmin:colmax))==0 0057 a_out{i,j} = double(a(rowmin:rowmax, colmin:colmax)); 0058 elseif i==j 0059 a_out{i,j} = zeros(rowsizes(i), colsizes(j)); 0060 end 0061 elseif i==j 0062 a_out{i,j} = zeros(rowsizes(i), colsizes(j)); 0063 end 0064 end 0065 end 0066 end