changeset 388:288138d9586d feature/beams

Add function to multiply blockmatrices.
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 09 Jan 2017 11:20:28 +0100
parents 45c69aff2f41
children 42c89b5eedc0
files +blockmatrix/multiply.m +blockmatrix/multiplyTest.m
diffstat 2 files changed, 74 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
diff -r 45c69aff2f41 -r 288138d9586d +blockmatrix/multiply.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/+blockmatrix/multiply.m	Mon Jan 09 11:20:28 2017 +0100
@@ -0,0 +1,17 @@
+function C = multiply(A, B)
+    [n_a, m_a] = size(A);
+    [n_b, m_b] = size(B);
+
+    assert(m_a == n_b, 'Dimensions do not agree.')
+
+    C = cell(n_a, m_b);
+
+    for i = 1:n_a
+        for j = 1:m_b
+            C{i,j} = sparse(size(A{i,1},1), size(B{1,j},2));
+            for k = 1:n_b
+                C{i,j} = C{i,j} + A{i,k}*B{k,j};
+            end
+        end
+    end
+end
diff -r 45c69aff2f41 -r 288138d9586d +blockmatrix/multiplyTest.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/+blockmatrix/multiplyTest.m	Mon Jan 09 11:20:28 2017 +0100
@@ -0,0 +1,57 @@
+function tests = multiplyTest()
+    tests = functiontests(localfunctions);
+end
+
+
+function testMultiply(testCase)
+    a11 = [
+        0.8147    0.1270;
+        0.9058    0.9134;
+    ];
+    a12 = [
+        0.6324    0.2785    0.9575;
+        0.0975    0.5469    0.9649;
+    ];
+    a21 = [
+        0.1576    0.9706;
+    ];
+    a22 = [
+        0.9572    0.4854    0.8003;
+    ];
+    A = {
+        a11 a12;
+        a21 a22;
+    };
+
+    b11 = [
+        0.1419    0.9157    0.9595;
+        0.4218    0.7922    0.6557;
+    ];
+    b12 = [
+        0.0357    0.9340;
+        0.8491    0.6787;
+    ];
+    b21 = [
+        0.7577    0.6555    0.0318;
+        0.7431    0.1712    0.2769;
+        0.3922    0.7060    0.0462;
+    ];
+    b22 = [
+        0.0971    0.3171;
+        0.8235    0.9502;
+        0.6948    0.0344;
+    ];
+
+    B = {
+        b11 b12;
+        b21 b22;
+    };
+
+
+    C = {
+        a11*b11 + a12*b21, a11*b12 + a12*b22;
+        a21*b11 + a22*b21, a21*b12 + a22*b22;
+    };
+
+    testCase.verifyEqual(blockmatrix.multiply(A,B), C);
+end
\ No newline at end of file