# Inverse KroneckerProduct given other arguments

I'm having problems working out how to do the inverse of a two argument Kronecker Product, given one of the decomposed column vectors.

For example, say I have used the Kronecker Product on two column vectors, and subsequently transformed the components of the first vector, e.g:

KroneckerProduct[{{a}, {b}}, {{c}, {d}}]
% /. {a -> e, b -> f}


and now want to decompose my new vector back into {{e},{f}} and {{c},{d}}, given that I know the second vector was unchanged. How do I go about this? I have tried using the InverseFunction command, but to no avail.

• Welcome to Mathematica.SE! I suggest the following: 1) As you receive help, try to give it too, by answering questions in your area of expertise. 2) Read the faq! 3) When you see good questions and answers, vote them up by clicking the gray triangles, because the credibility of the system is based on the reputation gained by users sharing their knowledge. Also, please remember to accept the answer, if any, that solves your problem, by clicking the checkmark sign!
– user9660
Commented Mar 15, 2015 at 18:12

You can do this by projecting onto the two orthogonal vectors in the product space that have the second factor equal to the unchanged vector:

res =
KroneckerProduct[{{a}, {b}}, {{c}, {d}}] /. {a -> e, b -> f}

(* ==> {{c e}, {d e}, {c f}, {d f}} *)

p1 = KroneckerProduct[{{1}, {0}}, {{c}, {d}}/(c^2 + d^2)];
p2 = KroneckerProduct[{{0}, {1}}, {{c}, {d}}/(c^2 + d^2)]

(* ==> {{0}, {0}, {c/(c^2 + d^2)}, {d/(c^2 + d^2)}} *)

projector = {{1}, {0}}.Transpose[p1] + {{0}, {1}}.Transpose[p2]

(*
==> {{c/(c^2 + d^2), d/(c^2 + d^2), 0, 0}, {0, 0, c/(c^2 + d^2),
d/(c^2 + d^2)}}
*)

Simplify[projector.res]

(* ==> {{e}, {f}} *)


Here res is the vector in the product space that you start with. We want to extract the coefficients e and f, knowing they were created by a KroneckerProduct. Since the vector containing c and d is unchanged in the calculation, I define a properly normalized vector {{c}, {d}}/(c^2 + d^2) (which in the products p1, p2 would yield unity when dotted into res with a=1, b=0 or vice versa) and use it to find the coefficients we're looking for by projecting the 4D vector res onto the product of that unit vector with the two canonical unit vectors in the space of the first factor. These two 4D vectors are p1 and p2. The application of these two projections can be turned into a single matrix projector that multiplies the amplitudes along the directions of p1 and p2 by the unit vectors in the first space to which they correspond.

• If there is no direct inverse function then this is probably the best answer I'm going to get, so thank you! Commented Mar 15, 2015 at 18:44