function Multiply(m,n,p) % Multiply, 9/9/2023. % Matrix Multiplication. % % Multiply(m,n,p) % [m-by-n] * [n-by-p] % % '|' Rows or columns % '/' Slow or fast % 'S' Subscript or Magic square % 'm' Row dimension % 'n' Inner dimension % 'p' Column dimension % '#' Animation % % See: https://blogs.mathworks.com/cleve/2023/09/10/exploring-matrices % Copyright 2016-2023 Cleve Moler if nargin == 0 mfigure m = 4; n = 4; p = 1; minit(m,n,p) elseif nargin == 1 fud = get(gcf,'userdata'); m = fud{1}; n = fud{2}; p = fud{3}; HA = fud{4}; HB = fud{5}; HC = fud{6}; else mfigure minit(m,n,p) fud = get(gcf,'userdata'); HA = fud{4}; HB = fud{5}; HC = fud{6}; end if nargin ~= 1 return end speed = get(findobj('callback',@mspeedcb),'value') == 1; if speed paws = 0.1; else paws = 0.5; end for i = 1:m for k = 1:p set(HC(i,k),'userdata',0, ... 'string','0') end end pause(paws) mx = get(findobj('callback',@mxcb),'value') == 1; objs = findobj('callback',@mroccb); ijk = get(objs(end),'string'); switch ijk case {'|―#','|'} for k = 1:p for j = 1:n for i = 1:m core(i,j,k) if mx, break, end end pause(paws) if mx, break, end end if mx, break, end end case {'―|#','―'} for k = 1:p for i = 1:m for j = 1:n core(i,j,k) end pause(paws) if mx, break, end end end case '#|―' for j = 1:n for i = 1:m for k = 1:p core(i,j,k) end pause(paws) if mx, break, end end end case '#―|' for i = 1:m for j = 1:n for k = 1:p core(i,j,k) end pause(paws) if mx, break, end end end case '|#―' for j = 1:n for k = 1:p for i = 1:m core(i,j,k) end pause(paws) if mx, break, end end end case '―#|' for i = 1:m for k = 1:p for j = 1:n core(i,j,k) end pause(paws) if mx, break, end end end end function core(i,j,k) set(HC(i,k),'backgroundcolor',gold) set(HA(i,j),'backgroundcolor',gold) set(HB(j,k),'backgroundcolor',gold) aij = get(HA(i,j),'userdata'); bjk = get(HB(j,k),'userdata'); cik = get(HC(i,k),'userdata'); cik = cik + aij*bjk; set(HC(i,k),'userdata',cik, ... 'string',num2str(cik)) pause(paws) set(HC(i,k),'backgroundcolor','w') set(HA(i,j),'backgroundcolor','w') set(HB(j,k),'backgroundcolor','w') end end