function C = strass(A,B,nmin) % % Strassen matrix multiplication C=AB % A, B must be square and of even dimension % From Coleman and Van Loan % If n <= nmin, multiply is done conventionally % [n n ] = size(A); if n <= nmin C = A* B; % n is small, get C conventionally else m = n/2; u = 1:m; v = m+1:n; P1 = strass(A(u,u)+A(v,v), B(u,u)+B(v,v), nmin); P2 = strass(A(v,u)+A(v,v), B(u,u), nmin); P3 = strass(A(u,u), B(u,v)-B(v,v), nmin); P4 = strass(A(v,v), B(v,u)-B(u,u), nmin); P5 = strass(A(u,u)+A(u,v), B(v,v), nmin); P6 = strass(A(v,u)-A(u,u), B(u,u)+B(u,v), nmin); P7 = strass(A(u,v)-A(v,v), B(v,u)+B(v,v), nmin); C = [P1+P4-P5+P7 P3+P5; P2+P4 P1+P3-P2+P6]; end