Mou Code

Divacon Trace Output


mm411

-- source -- -- Matrix Multiplication by PDC, Mou 1991 Algo.4.11 -- Consider A as a side-by-side of two submatrices, B as a stack of two. -- then C = [ A0 B0 + A1 B1 ] (1x1 blocks) -- -- Definitions: -- N = 4 -- split vert, split horiz, associate all combinations, choose the useful d = sel(1,0,0,1) @ outer @ (d_lr(1), d_lr (0)) -- sum correspondents h_mm = [+] -- stop at vectors, make an outer product matrix to add baseq = AND @ (iscol,isrow) mm411 = PDC(d,id,id,h_mm,baseq,outerProduct) -- -- Application -- A = randMat(N,N,fourth_roots(),seed=42) B = randMat(N,N,fourth_roots(),seed=43) trace(mm411, A, B) -- end source -- -- trace: mm411([[ 1, 1, -1, 1.0j] [[ 1, -1, 1.0j, -1.0j] [ 1.0j, 1.0j, 1, 1] [ -1, 1, -1.0j, -1.0j] [-1.0j, 1, 1, 1] [ 1, -1.0j, -1, -1.0j] [ 1.0j, 1.0j, 1, 1.0j]] [-1.0j, 1.0j, 1, 1]]) -- mm411([[ 1, 1, -1, 1.0j] [[ 1, -1, 1.0j, -1.0j] [ 1.0j, 1.0j, 1, 1] [ -1, 1, -1.0j, -1.0j] [-1.0j, 1, 1, 1] [ 1, -1.0j, -1, -1.0j] [ 1.0j, 1.0j, 1, 1.0j]] [-1.0j, 1.0j, 1, 1]]) divide d -> ( ( [[ 1, 1] [[ 1, -1, 1.0j, -1.0j] [ 1.0j, 1.0j] [-1, 1, -1.0j, -1.0j]] [-1.0j, 1] [ 1.0j, 1.0j]] ), ( [[-1, 1.0j] [[ 1, -1.0j, -1, -1.0j] [ 1, 1] [-1.0j, 1.0j, 1, 1]] [ 1, 1] [ 1, 1.0j]] ) ) mm411([[ 1, 1] [[ 1, -1, 1.0j, -1.0j] [ 1.0j, 1.0j] [-1, 1, -1.0j, -1.0j]] [-1.0j, 1] [ 1.0j, 1.0j]] ) divide d -> ( ( [[ 1] [[1, -1, 1.0j, -1.0j]] [ 1.0j] [-1.0j] [ 1.0j]] ), ( [[ 1] [[-1, 1, -1.0j, -1.0j]] [1.0j] [ 1] [1.0j]] ) ) mm411([[ 1] [[1, -1, 1.0j, -1.0j]] [ 1.0j] [-1.0j] [ 1.0j]] ) ⇣ atom; basef -> [[ 1, -1, 1.0j, -1.0j] [ 1.0j, -1.0j, -1.0, 1.0] [-1.0j, 1.0j, 1.0, -1.0] [ 1.0j, -1.0j, -1.0, 1.0]] mm411([[ 1] [[-1, 1, -1.0j, -1.0j]] [1.0j] [ 1] [1.0j]] ) ⇣ atom; basef -> [[ -1, 1, -1.0j, -1.0j] [-1.0j, 1.0j, 1.0, 1.0] [ -1, 1, -1.0j, -1.0j] [-1.0j, 1.0j, 1.0, 1.0]] post [+] -> [[ 0, 0, 0.0, -2.0j] [ 0.0, 0.0, 0.0, 2.0] [-1.0-1.0j, 1.0+1.0j, 1.0-1.0j, -1.0-1.0j] [ 0.0, 0.0, 0.0, 2.0]] combine id_ -> [[ 0, 0, 0.0, -2.0j] [ 0.0, 0.0, 0.0, 2.0] [-1.0-1.0j, 1.0+1.0j, 1.0-1.0j, -1.0-1.0j] [ 0.0, 0.0, 0.0, 2.0]] mm411([[-1, 1.0j] [[ 1, -1.0j, -1, -1.0j] [ 1, 1] [-1.0j, 1.0j, 1, 1]] [ 1, 1] [ 1, 1.0j]] ) divide d -> ( ( [[-1] [[1, -1.0j, -1, -1.0j]] [ 1] [ 1] [ 1]] ), ( [[1.0j] [[-1.0j, 1.0j, 1, 1]] [ 1] [ 1] [1.0j]] ) ) mm411([[-1] [[1, -1.0j, -1, -1.0j]] [ 1] [ 1] [ 1]] ) ⇣ atom; basef -> [[-1, 1.0j, 1, 1.0j] [ 1, -1.0j, -1, -1.0j] [ 1, -1.0j, -1, -1.0j] [ 1, -1.0j, -1, -1.0j]] mm411([[1.0j] [[-1.0j, 1.0j, 1, 1]] [ 1] [ 1] [1.0j]] ) ⇣ atom; basef -> [[ 1.0, -1.0, 1.0j, 1.0j] [-1.0j, 1.0j, 1, 1] [-1.0j, 1.0j, 1, 1] [ 1.0, -1.0, 1.0j, 1.0j]] post [+] -> [[ 0.0, -1.0+1.0j, 1.0+1.0j, 2.0j] [1.0-1.0j, 0.0, 0, 1.0-1.0j] [1.0-1.0j, 0.0, 0, 1.0-1.0j] [ 2.0, -1.0-1.0j, -1.0+1.0j, 0.0]] combine id_ -> [[ 0.0, -1.0+1.0j, 1.0+1.0j, 2.0j] [1.0-1.0j, 0.0, 0, 1.0-1.0j] [1.0-1.0j, 0.0, 0, 1.0-1.0j] [ 2.0, -1.0-1.0j, -1.0+1.0j, 0.0]] post [+] -> [[ 0.0, -1.0+1.0j, 1.0+1.0j, 0.0] [1.0-1.0j, 0.0, 0.0, 3.0-1.0j] [ -2.0j, 1.0+1.0j, 1.0-1.0j, -2.0j] [ 2.0, -1.0-1.0j, -1.0+1.0j, 2.0]] combine id_ -> [[ 0.0, -1.0+1.0j, 1.0+1.0j, 0.0] [1.0-1.0j, 0.0, 0.0, 3.0-1.0j] [ -2.0j, 1.0+1.0j, 1.0-1.0j, -2.0j] [ 2.0, -1.0-1.0j, -1.0+1.0j, 2.0]] -- result: [[ 0.0, -1.0+1.0j, 1.0+1.0j, 0.0] [1.0-1.0j, 0.0, 0.0, 3.0-1.0j] [ -2.0j, 1.0+1.0j, 1.0-1.0j, -2.0j] [ 2.0, -1.0-1.0j, -1.0+1.0j, 2.0]] --
Your thoughts?
(will not be shared or abused)
Comment:
                                        Feedback is welcome.
Copyright © 2025 Thomas C. Veatch. All rights reserved.
Created: May 2026