Mercurial > repos > public > sbplib
changeset 579:a5f1b0267dba feature/grids
Be less strict about what is considered a block matrix
Empty blocks of different sizes are now allowed as well as empty block dimensions
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 07 Sep 2017 09:21:04 +0200 |
parents | 1fe16b34f114 |
children | 00261f8d7e15 |
files | +blockmatrix/fromMatrixTest.m +blockmatrix/getDivision.m +blockmatrix/getDivisionTest.m +blockmatrix/isBlockmatrix.m +blockmatrix/isDivision.m +blockmatrix/isDivisionTest.m +blockmatrix/toMatrixTest.m +blockmatrix/zero.m +blockmatrix/zeroTest.m |
diffstat | 9 files changed, 77 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/+blockmatrix/fromMatrixTest.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/fromMatrixTest.m Thu Sep 07 09:21:04 2017 +0200 @@ -46,6 +46,20 @@ [23 5; 4 6; 10 12; 11 18], [7 14 16; 13 20 22; 19 21 3; 25 2 9]; }; }, + { + { + magic(3), + {[1 0 2],[1 2 0]} + }, + mat2cell(magic(3),[1 0 2],[1 2 0]) + }, + { + { + zeros(0,1), + {0,1}, + }, + {zeros(0,1)} + }, }; for i = 1:length(cases) out = convertToFull(blockmatrix.fromMatrix(cases{i}{1}{:}));
--- a/+blockmatrix/getDivision.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/getDivision.m Thu Sep 07 09:21:04 2017 +0200 @@ -16,7 +16,7 @@ m = zeros(1,size(C,2)); for j = 1:size(C,2) for i = 1:size(C,1) - if isempty(C{i,j}) + if isNullMatrix(C{i,j}) continue end m(j) = size(C{i,j},2); @@ -28,10 +28,15 @@ n = zeros(1,size(C,1)); for i = 1:size(C,1) for j = 1:size(C,2) - if isempty(C{i,j}) + if isNullMatrix(C{i,j}) continue end n(i) = size(C{i,j},1); end end -end \ No newline at end of file +end + +function b = isNullMatrix(A) + [n, m] = size(A); + b = n == 0 && m == 0; +end
--- a/+blockmatrix/getDivisionTest.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/getDivisionTest.m Thu Sep 07 09:21:04 2017 +0200 @@ -56,6 +56,18 @@ }, {[2 1], 2} }, + { + {zeros(3,0)}, + {3, 0}, + }, + { + {zeros(3,0), zeros(3,0)}, + {3, [0, 0]}, + }, + { + {zeros(3,0); zeros(2,0)}, + {[3 2],0}, + }, }; for i = 1:length(cases)
--- a/+blockmatrix/isBlockmatrix.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/isBlockmatrix.m Thu Sep 07 09:21:04 2017 +0200 @@ -4,7 +4,7 @@ return end - % Make sure all blocks are numerica matrices + % Make sure all blocks are numerical matrices for i = 1:length(bm) if ~isnumeric(bm{i}) b = false;
--- a/+blockmatrix/isDivision.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/isDivision.m Thu Sep 07 09:21:04 2017 +0200 @@ -21,11 +21,11 @@ function b = isDivisionVector(v) if isempty(v) - b = false; + b = true; return end - if any(v <= 0) + if any(v < 0) b = false; return end
--- a/+blockmatrix/isDivisionTest.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/isDivisionTest.m Thu Sep 07 09:21:04 2017 +0200 @@ -4,14 +4,16 @@ function testIsDivision(testCase) cases = { + {[1 2] ,false}, % Must be a cell array + {{[1 2 3]} ,false}, % Must have two vectors + {{[],[]}, true} % No blocks is a valid blockmatrix + {{[1 2],[]} ,true}, + {{[],[1 2]} ,true}, {{[2 2 2],[1 2]} ,true}, - {{[1 2],[1 0]} ,false}, - {{[0 2],[1 1]} ,false}, - {{[1 2],[]} ,false}, + {{[1 2],[1 0]} ,true}, + {{[0 2],[1 1]} ,true}, {{[1 2],[1]} ,true}, {{[1 2],[1], [1 2 3]} ,false}, - {{[1 2 3]} ,false}, - {[1 2] ,false}, }; for i = 1:length(cases)
--- a/+blockmatrix/toMatrixTest.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/toMatrixTest.m Thu Sep 07 09:21:04 2017 +0200 @@ -51,6 +51,22 @@ [2 2 1; 2 1 2], }, + { + {zeros(0,0)}, + [], + }, + { + {zeros(3,0), zeros(3,0)}, + zeros(3,0), + }, + { + {zeros(3,0); zeros(2,0)}, + zeros(5,0), + }, + { + {zeros(0,3), zeros(0,2)}, + zeros(0,5), + }, }; for i = 1:length(cases)
--- a/+blockmatrix/zero.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/zero.m Thu Sep 07 09:21:04 2017 +0200 @@ -1,6 +1,6 @@ % Creates a block matrix according to the division with zeros everywhere. function bm = zero(div) - if ~blockmatrix.isDivision(div); + if ~blockmatrix.isDivision(div) error('div is not a valid division'); end
--- a/+blockmatrix/zeroTest.m Thu Sep 07 09:18:55 2017 +0200 +++ b/+blockmatrix/zeroTest.m Thu Sep 07 09:21:04 2017 +0200 @@ -32,6 +32,22 @@ {[1 2],[2 1]}, {[0 0],[0];[0 0; 0 0],[0; 0]}; }, + { + {[3],[0]}, + {zeros(3,0)}, + }, + + { + {[0],[3]}, + {zeros(0,3)}, + }, + { + {[0 2],[0 3]}, + { + zeros(0,0), zeros(0,3); + zeros(2,0), zeros(2,3); + }, + }, }; for i = 1:length(cases)