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.