# 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. Oct 21, 2020 at 15:02
• @DanielHuber: The Minkowski product is a subset of the complex plane. See Russian version of Wiki to this end. Oct 21, 2020 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.
– TDH
Oct 21, 2020 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. Oct 21, 2020 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. Oct 22, 2020 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}]]


– TDH
Oct 21, 2020 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. Oct 21, 2020 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. Oct 22, 2020 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. Oct 22, 2020 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. Oct 21, 2020 at 15:18
• @user64494 Here we use Cartesian Product to construct Minkowski product , just as your approach. Oct 21, 2020 at 15:23
• cvgmt (@ does not work), The Minkowski product under consideration is a subset of the comlex plane, not a list of domains. Oct 21, 2020 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 Oct 21, 2020 at 15:29
• cvgmt (@ does not work): Your claim 'Yes, it is the union of the list of domains" is ungrounded. Oct 21, 2020 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. Nov 3, 2020 at 17:09
• In any case, this is a direct and natural approach, so +1. Nov 3, 2020 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". Nov 3, 2020 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. Nov 4, 2020 at 7:46