Kronecker product decomposition

How can I decompose a matrix Z into two matrices X and Y as below:

$$Z=X\otimes Y$$

in which $\otimes$ is the kroncker product. Is there any function in matlab or any other library which decomposes the kroncker product?

• I assume that you found Matlab's kron with a basic Google search? – horchler Jan 10 '16 at 21:17
• i didn't get your mean. i am using the matrix normal distribution in the normal format, in this distribution kroncker product is used. i wanna convert a normal distribution to the matrix-normal format, so i should know how to inverse the kroncker product. – sahar Jan 12 '16 at 7:28

• Not every matrix $Z$ can be decomposed like this (as a Kronecker product), so it makes sense you would not have a proof. Your answer might be more useful to Readers if you edited it to include an explanation of what assumptions are needed to get your "matlab code" to succeed. – hardmath Feb 1 '16 at 14:53
 %implemented by Sahar %use the below codes for decomposition % A1=[4 1 7;1 10 3; 5 9 2]; % B1=[2 2 3 ;2 5 1; 7 1 4]; % C=kron(A1,B1); % [outA,outB]=decomposeKronecker(A1,B1,C)
 
function [outA,outB]=decomposeKronecker(A1,B1,C) C=triu(C); A_sym = sym('A', size(A1)); B_sym = sym('B', size(B1)); C_sym=kron(A_sym,B_sym); C_sym=triu(C_sym); indx=find(C_sym); equations=(C_sym(indx)==C(indx)); result=solve( equations); A = sym('A',size(A1)); A=triu(A); A_tril_sym=transpose(triu(A,1)); A=A+A_tril_sym; outA=subs(A,result); B = sym('B',size(B1)); B=triu(B); B_tril_sym=transpose(triu(B,1)); B=B+B_tril_sym; outB=subs(B,result); kron(outA,outB) end