# Plotting Minkowski product of two sets in complex 2D plane

I am trying to draw Minkowski product of two sets in complex 2D plane in Mathematica. While I can draw the individual complex 2d plane for these sets in Mathematica using ComplexRegionPlot, I do not know if there is a way to draw the corresponding Minkowski product.

For example, consider the following complex 2d regions \begin{align*} \mathcal{G}_{1} & =\left\{ z\in\mathbf{C}\mid\mathrm{Re}(z)\geq\vert z\vert^{2}\right\} ,\\ \mathcal{G}_{2} & =\left\{ z\in\mathbf{C}\mid\frac{3}{2}\mathrm{Re}(z)\geq\vert z\vert^{2}+\frac{1}{2}\right\} , \end{align*}

where their Minkowski product is

$$\mathcal{G}_{1}\cdot\mathcal{G}_{2}=\left\{ z_{1}z_{2} \in \mathbf{C} \mid z_{1}\in\mathcal{G}_{1},z_{2}\in\mathcal{G}_{2}\right\} ,$$

and I am trying to plot the complex region associated with this Minkowski product $$\mathcal{G}_{1}\cdot\mathcal{G}_{2}$$. Any help/suggestions will be much appreciated.

• You can not plot a 4 dimensional region in 3 dimensions. The best you can due is draw slices and use color for an additional dimension. – Daniel Huber Oct 21 at 15:02
• @DanielHuber: The Minkowski product is a subset of the complex plane. See Russian version of Wiki to this end. – user64494 Oct 21 at 15:30
• @DanielHuber, thanks for your comment. However, user64494 is indeed right in this case, the Minkowski product will lie in the complex plane because we are constructing the points in the new set $\mathcal{G}_1 \cdot \mathcal{G}_2$ by pointwise multiplication of the elements of the sets $\mathcal{G}_1$ and $\mathcal{G}_2$, and such points will also be complex numbers lying in the complex plane. – SDG Oct 21 at 15:48
• @user64494 There is a difference between Minkowski sum and Minkowski product. As I understand it, the "sum" is the sum of all elements of the two sets. However, the product is the set of all ordered pairs with elements of the two sets. Please correct me if I am wrong. – Daniel Huber Oct 21 at 15:58
• @DanielHuber: The Mincowsky product $\mathcal{G}_{1}\mathcal{G}_{}$ is the set $\{zw: z\in \mathcal{G}_{1},w \in \mathcal{G}_{2}\}\subset \mathbb{C}.$ This is a standard definition in group theory. Also look in Russian edition of Wiki and the cited article. – user64494 Oct 22 at 7:46

This can be done as follows. First, we switch to the reals. Second, we write down the definition of the Minkowski product for the specified case by ($$z=x+iy\in \mathcal{G}_{1},\,w=s+it\in \mathcal{G}_{2},\,zw=xs-yt+i(xt+ys)$$)

Exists[{x, y, s, t},a == x*s - y*t&& b == x*t + y*s&& x >= x^2 + y^2 &&3/2*s >= s^2 + t^2 + 1/2];


Then we find the conditions on $$a,b$$ by

r = Resolve[Exists[{x, y, s, t},a == x*s - y*t && b == x*t + y*s && x >= x^2 + y^2 &&
3/2*s >= s^2 + t^2 + 1/2], Reals];


At last, we draw the product by

Region[ImplicitRegion[r, {a, b}]] • user64494, thanks so much for your answer! – SDG Oct 21 at 15:49
• in your code, r , the third region, RegionPlot[(b^2 <= 1/64 && -3 a + 4 a^2 - 4 b^2 <= 0), {a, -1, 1}, {b, -1, 1}] is also a rectangle-like region. – cvgmt Oct 21 at 16:10
• @cvgmt: You are right. In fact, you obtain the same region, but on a longer and more complicated way. +1 for your answer. – user64494 Oct 22 at 7:40
• @user64494 Thanks! Since I want to do more general situation. Now I am trying to consider another method to avoid solve the equations. – cvgmt Oct 22 at 7:58

First we transform the complex to real.

expr1 = Block[{z = x + I*y}, (Re[z] >= Abs[z]^2 // ComplexExpand)]
reg1 = ImplicitRegion[expr1, {x, y}]
expr2 = Block[{w = u + I*v}, (3/2 Re[w] >= Abs[w]^2 + 1/2 //
ComplexExpand)];
reg2 = ImplicitRegion[expr2, {u, v}]
expr = Thread[{p,q} == ((x + I*y) (u + I*v) // ReIm // ComplexExpand)]


the results are

x >= x^2 + y^2
ImplicitRegion[x >= x^2 + y^2, {x, y}]
(3 u)/2 >= 1/2 + u^2 + v^2
ImplicitRegion[(3 u)/2 >= 1/2 + u^2 + v^2, {u, v}]
{p == u x - v y, q == v x + u y}


and then we construct a Cartesian Procuct of the two region reg1 and reg2

reg = ImplicitRegion[
x >= x^2 + y^2 && (3 u)/2 >= 1/2 + u^2 + v^2, {x, y, u, v}];


and Map the reg according the (p == u x - v y && q == v x + u y)

That is

reg = ImplicitRegion[
x >= x^2 + y^2 && (3 u)/2 >= 1/2 + u^2 + v^2, {x, y, u, v}];
sol = Resolve[
Exists[{x, y, u, v},
Element[{x, y, u, v}, reg], (p == u x - v y && q == v x + u y)],
Reals]
RegionPlot[List @@ sol // Evaluate, {p, -1, 1}, {q, -1, 1}] • Sorry, but Minkowski product is not a Cartesian product (see link.springer.com/article/10.1023/A:1014737602641 ). This is not it though you are on the right way. – user64494 Oct 21 at 15:18
• @user64494 Here we use Cartesian Product to construct Minkowski product , just as your approach. – cvgmt Oct 21 at 15:23
• cvgmt (@ does not work), The Minkowski product under consideration is a subset of the comlex plane, not a list of domains. – user64494 Oct 21 at 15:26
• @user64494 Yes, it is the union of the list of domains. Since I want to display the method,so I use List @@ sol  instead of sol – cvgmt Oct 21 at 15:29
• cvgmt (@ does not work): Your claim 'Yes, it is the union of the list of domains" is ungrounded. – user64494 Oct 21 at 15:36

I don't know how robust it is, but you could try using ParametricRegion. For example:

R = ParametricRegion[
{
{x u - y v, x v + y u}, (* Re/Im parts the product *)
{x, y} ∈ ImplicitRegion[x > x^2 + y^2, {x, y}] &&
{u, v} ∈ ImplicitRegion[3/2 x > x^2 + y^2 + 1/2, {x, y}]
},
{x, y, u, v}
]


ParametricRegion[{{x u - y v, y u + x v}, {x, y} ∈ ImplicitRegion[x > x^2 + y^2, {x, y}] && {u, v} ∈ ImplicitRegion[(3 x)/2 > 1/2 + x^2 + y^2, {x, y}]}, {x, y, u, v}]

Discretizing the region:

BoundaryDiscretizeRegion[R]


[warning snipped] This can be made into a function. Define a wrapper representing a complex region ComplexRegion, and define a function that converts this into an ImplicitRegion:

convertToImplicitRegion[ComplexRegion[bool_, z_Symbol]] := Module[
{x = Unique[], y = Unique[]},

ImplicitRegion[
ComplexExpand[bool /. z -> x + I y],
{x, y}
]
]

convertToImplicitRegion[reg_] := If[RegionQ[reg],
reg,
$Failed ]  Then, define a function that creates the ParametricRegion and discretizes it: Options[MinkowskiProduct] = Options[BoundaryDiscretizeRegion]; MinkowskiProduct[c1_, c2_, opts:OptionsPattern[]] := Module[ {i1, i2, x, y, u, v}, i1 = convertToImplicitRegion[c1]; i2 = convertToImplicitRegion[c2]; Quiet[ BoundaryDiscretizeRegion[ ParametricRegion[ { {x u - y v, x v + y u}, {x,y} ∈ i1 && {u,v} ∈ i2 }, {x, y, u, v} ], opts ], BoundaryDiscretizeRegion::brepl ] /; !MemberQ[{i1, i2},$Failed]
]


MinkowskiProduct[
ComplexRegion[Re[z] > Abs[z]^2, z],
ComplexRegion[3/2 Re[z] > Abs[z]^2 + 1/2, z],
Axes -> True
] And another example:

MinkowskiProduct[
ComplexRegion[Re[z] > Abs[z]^2, z],
ComplexRegion[0 < Re[z] < 1 && 0 < Im[z] < 1, z],
Axes -> True
] • Unfortunately, Region[ParametricRegion[{{x u - y v, x v + y u},{x, y} \[Element] ImplicitRegion[x > x^2 + y^2, {x, y}] && {u, v} \[Element] ImplicitRegion[3/2 x > x^2 + y^2 + 1/2, {x, y}]}, {x, y, u, v}]] fails, so you need in discretization. – user64494 Nov 3 at 17:09
• In any case, this is a direct and natural approach, so +1. – user64494 Nov 3 at 17:18
• I'd like to quote the linked article: " In certain applications, the availability of exact Minkowski products is a useful alternative to the naive bounding approximations that are customarily employed in "complex circular arithmetic". – user64494 Nov 3 at 18:53
• Your another example can be done analytically by splitting cases, e.g. Exists[{x, y, s, t}, a == x*s - y*t && b == x*t + y*s && x >= x^2 + y^2 && t <= 1 && s == 0 && t >= 0] and so on. – user64494 Nov 4 at 7:46