Math 421  •  Fall 2010

Complex nth roots

14 September 2010

Copyright © 2004–2010 by Murray Eisenberg. All rights reserved.

Explanation:  In the section "Initialization" below, there's an Input cell consisting of the expression
	<<Presentations`
and I made that cell into an "initialization cell".  When you answered yes, that cell was evaluated automatically, and this in effect loaded the Presentations application packages.

This notebook discusses the n different nth roots of a nonzero complex number and, in particular, of "unity"—the complex number 1. The motivating examples concern cube roots.

Where did the cell brackets go?

When you look at this notebook, and many others involving the Presentations add-on, you may be surprised to see no cell brackets or group brackets along the right-hand edge of the window.

Actually, the brackets are there! They are just hidden until you move the mouse toward the right boundary of the notebook window. Try it!

The reason this happens is because of a special "style sheet" that has been applied to the notebooks, including this one. It keeps the cell brackets out-of-sight until you need them.

These notebooks also have, besides the "hidden" cell brackets on the right, triangular GroupOpener triangles ▸ to the left of section-type cell groups. With the triangle pointing rightward ▸ like that, the cell group is closed. By clicking on the triangle, the cell group opens (and the triangle turns to point downward ▾).
This action with the GroupOpener triangle is similar to what you may have seen elsewhere where + and - symbols are used to show "collapsed" and "opened" lists of items, for example, in a directory tree or outline.

Introduction: the nth roots of a complex number

For a positive integer n=1, 2, 3, …, a complex number w≠0 has n different complex roots z. That is, for a given w≠0, the equation (z^n)=w has n different solutions z. (In fact, as you shall see in this notebook, the roots can be calculated explicitly.)

This is the case, in particular, when w=1.  In this case, the n different values of z are called the nth roots of unity.

This notebook shows how to use Mathematica to calculate such roots as well as how to visualize them geometrically. It also includes material about expressing complex roots of unity in "polar form".

The motivating examples concern cube roots.

Prerequisites

Mathematica

Most of this notebook requires David Park's Mathematica add-on application Presentations. See the Math 421 notebook AboutPresentations.nb.

Before using Presentations, you need to load its packages. That initialization is done below, just before Presentations is first needed.

Before or while using Presentations with this notebook, you may find helpful the Math 421 notebook DrawingComplexObjects.nb.

The PresentationsPalette is useful for accessing the documentation and for forming templates of Presentations functions. (For graphics here, you may also find useful the separate ComplexGraphics palette. ) On PresentationsPalette:
	• templates of functions to create complex graphics objects are in Drawing ▸ Complex Graphics ▸ Primitives; and
	• templates of functions to create a drawing of complex graphics objects are in Drawing ▸ DrawingPaper ▸ Graphics (the one you’ll want is Draw2D).

Mathematics

You should already know the basics of the algebra of complex numbers—how to add and multiply them—and the representation of complex numbers by points in the plane.

Initialization

When you opened this notebook, it should have prompted you whether you want to evaluate Initialization Cells. You should have answered “yes.”
Check now whether you did so by looking at the Input cell that follows. At its left it should have a label such as In[1].
If you do not see such a label, then evaluate the following Input cell now. (Even if the cell was already evaluated, it won’t hurt if you evaluate it again.)

<<Presentations`

Finding the cube roots of unity

For an example, work with the cube roots of unity. By definition, a cube root of unity is a solution of the equation 
	(z^3)=1. 
Surely Mathematica can solve this equation directly. Try it:

Solve[(z^3)==1,z]

In the output, the purported cube roots are given by rules. Here are the cube roots themselves, obtained by successively replacing z by what each of the rules prescribes:

z/.Solve[(z^3)==1,z]

That does not seem especially useful! What are the solutions, really—in Cartesian a+b i form? Use ComplexExpand on the result of Solve:

cubeRootsUnity=ComplexExpand[z/.Solve[(z^3)==1,z]]

Exercise . Verify that the cube of each of these numbers really is 1.

How can you be sure that there are no more than just these three roots? This is a consequence of the Fundamental Theorem of Algebra. (See the notebook FactorTheorem.nb.)

Exercise . Find, similarly, the fourth roots of unity. Verify that the fourth power of each really is 1.

Visualizing the cube roots of unity

The graphics functions introduced below are used here just for visualizing the cube roots of unity. But they can be used more generally to visualize diverse sets of complex numbers.

You'll need a number of computational and graphics functions that are not already built-in objects in Mathematica. They are defined in David Park's Presentations application.

<<Presentations`

Drawing roots of unity as points in the plane

Below is the drawing we shall eventually produce. The code to create the drawing in this final form appears later. We shall develop the code step-by-step.

The immediate aim is to convert each of the cube roots of unity into an (x,y)-coordinate pair and then surround it with the Mathematica graphics primitive Point to produce a graphics object capable of being displayed. The Presentations function ComplexPoint does both of those things at once:

For example, among the cube roots of unity found earlier…

cubeRootsUnity

the third of the three cube roots of unity found earlier is:

cubeRootsUnity[[3]]

Make that cube root a graphics object:

ComplexPoint[cubeRootsUnity[[3]]]

Make a drawing of that cube root of unity in the complex plane by using the Presentations function Draw2D:

Draw2D[{
(* Set color and point size for plotting point *)
Red,PointSize[Large],
(* Draw points *)
ComplexPoint[cubeRootsUnity[[3]]]
},
Axes->True,AxesLabel->{"Real","Imaginary"}]

To draw all three roots, you could turn them into graphics objects one-by-one, by forming:

Table[ComplexPoint[cubeRootsUnity[[k]]],{k,1,3}]

A more direct, "functional", way to accomplish the same thing is to use Mathematica’s Map function:

Map[ComplexPoint,cubeRootsUnity]

And a terser way to accomplish the same thing is:

ComplexPoint/@cubeRootsUnity

It is often a good idea to use such an abbreviated form for Map. especially when the Map[func,lis] expression, with its brackets, would be nested inside another expression’s brackets.

Here is a drawing of all three cube roots of unity in the complex plane:

Draw2D[{
(* Set color and point size for plotting point *)
Red,PointSize[Large],
(* Draw points *)
ComplexPoint/@cubeRootsUnity
},
Axes->True,AxesLabel->{"Real","Imaginary"}]

The preceding input cell included comments, enclosed in (* … *) pairs, just to help you understand what the various expressions do that constitute the entries in the (list) argument to Draw2D. Ordinarily such “obvious” comments are not needed. (Mathematica documentation is more usually written in text cells.)  
But it is still helpful to break the entire expression into separate lines to show successive graphics directives—color and point size specifications, for example—and graphics primitives—ComplexPoints, etc.—to which those directives apply. Here's the same expression as before, but with the comments now omitted:

Draw2D[
{
Red,PointSize[Large],
ComplexPoint/@cubeRootsUnity
},
Axes->True,AxesLabel->{"Real","Imaginary"}]

Notice that the entire argument to the function Draw2D is a list (with a {} pair). That list is followed by some options, such as Axes->True, that affect the overall drawing.

Other named alternatives for the PointSize directive are Medium, Small, and Tiny. For more precise control, you can specify the point size by a number, which specifies the size as a fraction of the total width of the drawing.

Exercise . Experiment with the effects of the following:
	(a) Changing the argument to PointSize
	(b) Changing, the color from Red to something else pretty. Note: The named colors Red, Blue, Green,Orange, Yellow,Purple,Brown, Cyan, Magenta, Pink, among others, are built-in and immediately available.  
	Additional named colors are available. Use the Color Schemes palette to find them. Using the Presentations function Legacy, you may easily access the Named colors in the Legacy group. For example
	(c) Try changing the color to Legacy[IndianRed]. So as to avoid nested brackets, you can use instead the prefix form, Legacy@IndianRed.
More information about selecting colors appears in notebook DrawingComplexObjects.nb.

The drawings so far are rather large. To change the overall size of a drawing, include in Draw2D an option of the form
	ImageSize->72×inches
where inches is the number of inches you want for the width of the plot. (Mathematica measures the width in "printer's points". There are 72 printer's points to the inch. So setting ImageSize to 3.5×72, for example, sets it to 3.5 inches.

Draw2D[
{
Red,PointSize[Large],
ComplexPoint/@cubeRootsUnity
},
Axes->True,AxesLabel->{"Real","Imaginary"},
ImageSize->3.5 72]

It would be a good idea to label the entire drawing with a caption. The PlotLabel option is used for that:

Draw2D[
{
Red,PointSize[Large],
ComplexPoint/@cubeRootsUnity
},
Axes->True,AxesLabel->{"Real","Imaginary"},
PlotLabel->"The cube roots of unity",
ImageSize->3.5 72]

To annotate the display, you may include text at any locations by invoking the Presentations function ComplexText. This function is used in the form
	ComplexText[txt,z]
where txt is the text you want to display and z is the complex number in the plane where (the center of) the text is to be displayed.

For example, create a label for the root 1=1+0 i of unity like this…

ComplexText[cubeRootsUnity[[1]],cubeRootsUnity[[1]]]

…and include that label like this:

Draw2D[
{
Cyan,PointSize[Large],
ComplexPoint/@cubeRootsUnity,
Black,
ComplexText[cubeRootsUnity[[1]],cubeRootsUnity[[1]]]
},
Axes->True,AxesLabel->{"Real","Imaginary"},
PlotLabel->"The cube roots of unity",
ImageSize->3.5 72]

The point color there was changed to Cyan so you can see that, unfortunately, the label was displayed directly over the point. Ordinarily you will want to use some "offset" to move the text away from the point…

Δz=-0.08+0.2I;
ComplexText[cubeRootsUnity[[1]], cubeRootsUnity[[1]] +Δz]

…and include that in the ComplexText item of the Draw2D expression, where the original Red point color has been restored:

Draw2D[
{
Red,PointSize[Large],
ComplexPoint/@cubeRootsUnity,
Black,
ComplexText[cubeRootsUnity[[1]],cubeRootsUnity[[1]]+Δz]
},
Axes->True,AxesLabel->{"Real","Imaginary"},
PlotLabel->"The cube roots of unity",
ImageSize->3.5 72]

Form labels for all three points at once by using Map, like this:

Map[ComplexText[#,#+Δz]&,cubeRootsUnity]

In the preceding Input cell, the expression ComplexText[#,#+Δz]& is a pure function, sometimes called an “anonymous function.”. It’s a function that has no name but that you can use “on the fly”—without having to make a separate definition of a named function such as: 
myText[cmplxNum_]:=ComplexText[cmplxNum,cmplxNum+Δz]
Notice the ampersand & at the end of ComplexText[#,#+Δz& as well as the use of the Slot symbol # there. When you use this pure function, the Slot symbol # gets replaced with an actual value.

Do the same thing, but more succinctly, with the /@ abbreviation for using Map:

ComplexText[#,#+Δz]&/@cubeRootsUnity

Then here's the display of the three cube roots of unity with each labeled with its value (and the point color changed to the Legacy color IndianRed):

Draw2D[
{
Legacy@IndianRed,PointSize[Large],
Map[ComplexPoint,cubeRootsUnity],
Black,
ComplexText[#,#+Δz]&/@ cubeRootsUnity
},
Axes->True,AxesLabel->{"Real","Imaginary"},
PlotLabel->"The cube roots of unity",
ImageSize->3.5 72]

Oops! One of the text labels is clipped at the top, and two are clipped at the left edge of the drawing. What's more, the whole plot has the origin off-center. To fix all this at the same time, include the PlotRange option to Draw2D. The value of PlotRange specifies the graphics "window" (just like for a calculator plot) and is used in the form:
	{{xmin,xmax},{ymin,ymax}}
You'll often need to do some figuring and some experimenting to adjust the value for PlotRange so as to provide appropriate dimensions. (Good graphics takes work—no matter how good the software creating it!)

Draw2D[
{
Legacy@IndianRed,PointSize[Large],
ComplexPoint/@cubeRootsUnity,
Black,
(ComplexText[#,#+Δz]&)/@ cubeRootsUnity
},
PlotRange->{{-1.25,1.25},{-1.25,1.25}},
Axes->True,AxesLabel->{"Real","Imaginary"},
PlotLabel->"The cube roots of unity",
ImageSize->3.5 72]

That’s looking really nice now.

When the entire Draw2D expression such as the preceding one gets too long for your comfort, you may want to define the graphics objects separately and then reference those names within the argument of the Draw2D expression. For example:

pts=ComplexPoint/@cubeRootsUnity;
Δz=-0.01+0.2I;
ptLabels=ComplexText[#,#+Δz]&/@ cubeRootsUnity;

Draw2D[
{
Legacy@IndianRed,PointSize[Large],
pts,
Black,
ptLabels
}, 
PlotRange->{{-1.25,1.25},{-1.25,1.25}},
Axes->True,AxesLabel->{"Real","Imaginary"},
PlotLabel->"The cube roots of unity",
ImageSize->3.5 72]

Perhaps two further refinements: (1) Make the drawing label stand out better by using a larger font size and bold face; for that, use the Mathematica function Style. (2) Change the background color of the drawing so as to make the whole thing stand out better against the notebook background; for that use the option Background.

pts=ComplexPoint/@cubeRootsUnity;
Δz=-0.01+0.2I;
ptLabels=ComplexText[#,#+Δz]&/@ cubeRootsUnity;

Draw2D[
{
Legacy@IndianRed,PointSize[Large],
pts,
Black,
ptLabels
}, 
PlotRange->{{-1.25,1.25},{-1.25,1.25}},
Axes->True,AxesLabel->{"Real","Imaginary"},
PlotLabel->Style["The cube roots of unity",14,Bold],
Background->Legacy@AliceBlue,
ImageSize->3.5 72]

In this example, it’s probably not useful to have all the shorter tick marks on the axes between the ones at -1.0, -0.5, 0, 0.5, and 1.0. Change that by directly specifying where ticks should go with the Ticks option:

pts=ComplexPoint/@cubeRootsUnity;
Δz=-0.01+0.2I;
ptLabels=ComplexText[#,#+Δz]&/@ cubeRootsUnity;

Draw2D[
{
Legacy@IndianRed,PointSize[Large],
pts,
Black,
ptLabels
}, 
PlotRange->{{-1.25,1.25},{-1.25,1.25}},
Axes->True,AxesLabel->{"Real","Imaginary"},
Ticks->{{-1,-1/2,0,1/2,1},{-1,-1/2,0,1/2,1}},
PlotLabel->Style["The cube roots of unity",14,Bold],
Background->Legacy@AliceBlue,
ImageSize->3.5 72]

Exercise . Having to specify the coordinates explicitly like that twice, in a nested list, is unpleasant. To create an equally-spaced list of numbers, there’s an alternative, with the function Range. To figure out how Range works, read its documentation and try each of the following:
	Range[10]
	Range[0,10]
	Range[0,10,2]
	Range[-10,10,5]
	Range[-10,10,1/5]
Now redo the previous exercise, but using a suitable Range expression in place of each of the lists {-1,-1/2,0,1/2,1} in the value of the Ticks option.

Exercise . You can change the style of all text appearing in a drawing—including point labels, axes labels, and even axes tick marks—by using the Draw2D option BaseStyle.
(a) Try, for example, using a BaseStyle value for font size 13 points and bold face.
You may still override the BaseStyle for individual kinds of text in a drawing. Thus you may adjust the style for just the point labels or just the axes labels, by using Style. But to override the BaseStyle for tick labels, you need to use the TicksStyle option.
(b) Make the label for the whole drawing italic as well as bold.

Exercise . (a) Change the axes labels from “Real” and “Imaginary” to “x” and “y”.
Look carefully at the result. You should see that those letters appear in the drawing upright rather than Italic. Single-letter mathematical names are traditionally set in italic.
(b) Make the axes labels appear in italic, as x and y.
(c) Just as the labels for the cube roots of unity were automatically typeset in a traditional mathematical format (using square-root signs and a horizontal fraction line), if you use AxesLabel->{x,y} with no quotes around the x and the y, then you’ll automatically get italic x and y in the drawing. Try it.
(d) Why might it be a bad idea to do what you tried in (c)? (Hint: Suppose x was a name to which you had already assigned some value.)

Exercise . Draw the fourth roots of unity in the complex plane. Include nice point labels and an overall label for the drawing.

Plotting roots of unity as vertices of a triangle

The relevant graphics primitive from Presentations here is ComplexLine. An expression of the form
	ComplexLine[{z1,z2}]
represents the line segment from the complex number z1 to the complex number z2. More generally, an expression of the form
	ComplexLine[{z1,z2,…,zn}]
represents the "broken line"—the polygonal curve—with vertices the complex numbers z1,z2,…,zn. For example:

ComplexLine[cubeRootsUnity]

The result of ComplexLine[{z1,z2,…,zn}] is the same as that of
	Line[{ToCoordinates[z1],ToCoordinates[z2],…, ToCoordinates[zn]}]
where the Presentations function ToCoordinates converts a complex number to the corresponding list of its real and imaginary parts. The function Line is a built-in Mathematica graphics primitive.

Here is the plot of that polygonal line:

Draw2D[
{
Blue,
ComplexLine[cubeRootsUnity]
},
Axes->True,ImageSize->3 72]

To close up such a polygonal curve to form a polygon, you need to append the first point to the end of the list. The first point is:

First[cubeRootsUnity]

To avoid nested brackets when you put that expression inside Append, use the prefix (@) form:

First@cubeRootsUnity

Append[cubeRootsUnity,First@cubeRootsUnity]

ComplexLine[Append[cubeRootsUnity,First@cubeRootsUnity]]

Draw2D[
{
Blue,ComplexLine[Append[cubeRootsUnity,First@cubeRootsUnity]]
},
Axes->True,ImageSize->3 72]

To thicken the line segments in the triangle so as to make them more visible, include the Thick graphics directive (or a Thickness[size] directive) before the ComplexLine object, like this:

Draw2D[
{
Blue,Thick,ComplexLine[Append[cubeRootsUnity,First@cubeRootsUnity]]
},
Axes->True,ImageSize->3 72]

Exercise . (a) Include the cube roots of unity themselves (as the vertices) to the preceding drawing of the triangle. Choose different colors for the triangles’s sides and its vertices. And make the vertices bigger, to better distinguish them from the sides.
(b) Include text labels for the vertices as well as a label for the overall drawing.

Be sure to do the following mathematical exercise now.

Exercise . What kind of triangle is the one having the cube roots of unity as its vertices?  Be as specific as you can. Base you answer, at least in the first instance, upon what you see in the drawing.

Interlude: the principal argument of a complex number

The notions of polar representation and principal argument of a complex number, introduced below, are discussed in greater detail in notebook CartesianPolarForms.nb.

Polar representations and arguments of a complex number

A complex number z=a+b i is represented by the point (a,b) in the plane. The numbers a and b are the usual Cartesian (rectangular) coordinates of that point. Such a point can also be described by polar coordinates r and θ with a=r cos θ and b=r sin θ. In other words, the complex number z  has a polar representation—more properly called a trigonometric representation—
	z=r cos θ+i r sin θ
with r≥ 0.  (The number r=0 if and only if z=0.)  See the following drawing.

Code to produce that drawing appears in Appendix , below. The output from the code was then copied and pasted into an Input cell.

For example, the third cube root of unity (Subscript[ω, 3]) found above was:

(Subscript[ω, 3])=cubeRootsUnity[[3]]

Since cos 2π/3=-1/2 and sin 2π/3=(Sqrt[3])/2, this cube root of unity (Subscript[ω, 3]) has the following polar representation:

Cos[(2/3)π]+I Sin[(2/3)π]

And that means that θ=2π/3 is an argument of the cube root of unity (Subscript[ω, 3]).

Exercise . Find two other arguments of (Subscript[ω, 3]), one positive and the other negative.

Exercise . Find an argument for each of the other two cube roots of unity.

Exercise . An earlier exercise asked you to say, from what you saw in the graphics display, what kind of triangle it is that has the cube roots of unity as its vertices. Use the results already obtained in this section to confirm mathematically what you said.

The principal argument of a complex number

When z=r cos θ+i r sin θ with r>0, necessarily,
 	r=|z|, 
 as the following Mathematica computation indicates. (The second argument to Simplify indicates that the simplification is to be done using the assumption that r > 0.)

Clear[z,r,θ]
z=r Cos[θ]+I r Sin[θ]
Simplify[ComplexExpand[Abs[z]],r>0 ]
Clear[z,r,θ]

Because cos and sin are periodic, a single point (a,b) in the plane has infinitely many different polar coordinates. But when (a, b) ≠ (0, 0), that is, when the complex number z =a+b i≠0, then the point has unique polar coordinates r and θ for which
	z=r cos θ+i r sin θ,		r>0, 		-π<θ≤π.
This unique θ in the half-open, half-closed interval (-π,π] is called the principal argument of z.

The Mathematica function Arg finds the principal argument.  For example:

Arg[(Subscript[ω, 3])]

Thus the principal argument of (Subscript[ω, 3])=-1/2+i (Sqrt[3])/2 is the number θ=2π/3.

⚠ Caution: You may be accustomed to selecting polar coordinates θ with 0≤θ <2π.  However, in complex analysis -π<θ≤π is the convention usually adopted for the principal argument; that is the convention used by Mathematica.

Exercise . Check that neither of the other two arguments θ  of (Subscript[ω, 3]) that you found in Exercise  satisfies the condition -π<θ≤π required to be the principal argument.

Exercise . Find the principal arguments of the other two of the three cube roots of unity.

Please do not proceed to the next section until you have done the preceding exercise!

The primitive cube root of unity

The principal arguments of the three cube roots of unity are:

Arg[cubeRootsUnity]

The smallest strictly positive one of these three arguments is the third one, 2π/3.  And that is the principal argument of 
	(Subscript[ω, 3])=cos 2π/3+i sin 2ℼ/3.

This root with the smallest strictly positive principal argument is called the primitive cube root of unity.

According to the theory of nth roots of unity:

Here are those three powers of (Subscript[ω, 3]):

cubeRoots=Expand[((Subscript[ω, 3])^({0, 1, 2}))]

Exercise . Verify that the set of three cube roots of unity appearing in the list cubeRootsUnity is exactly the same as the set of powers of the primitive cube root of unity appearing in the list cubeRoots. Do this by evaluating a single equation in Mathematica that has result True. (Hint:The difficulty is that Mathematica lists give their entries in some particular order, whereas a set need not have any particular order for its members. Try the Mathematica function Sort.)

Roots of other complex numbers

Example: Find the cube roots of 2+2i.

One way to find these cube roots is simply to solve the corresponding cubic equation (z^3)==2+2i, as usual using ComplexExpand so as to obtain actual complex numbers in x+i y form:

newRoots=ComplexExpand[z/.Solve[(z^3)==2+2I,z]]

According to the theory, you only need one of the three cube roots of 2+2i  in order to find them all. Here's the last of the three:

ζ=Last[newRoots]

Then all the cube roots of 2+2i are, according to the theory, the products of that one cube root and the cube roots of unity. And the cube roots of unity are just the powers of the primitive cube root of unity (Subscript[ω, 3]). So again the three cube roots of 2+2i are:

rootsAgain=ComplexExpand[ζ ((Subscript[ω, 3])^({0,1,2}))]

Just to be convinced that the theory really is correct, check that these numbers all do have 2+2i as their cubes:

Simplify[(rootsAgain^3)]

Exercise . Find the cube roots of 2-11i. Use one of them together with powers of the cube root of unity to find them all again.

Exploration: fourth, fifth, sixth, … roots of unity

Exercise . (a) Repeat for fourth roots of unity the calculations done above for cube roots of unity. How many do you obtain?
(b) Plot the fourth roots of unity as points in the plane and as the vertices of some polygon. What do you observe about this polygon?

Exercise . (a) Repeat for fifth roots of unity the calculations done above for cube roots of unity. How many do you obtain?
(b) Plot the fifth roots of unity as points in the plane and as the vertices of some polygon.  What do you observe about this polygon?

Exercise . (a) Repeat for sixth roots of unity the calculations done above for cube roots of unity. How many do you obtain?
(b) Plot the sixth roots of unity as points in the plane and as the vertices of some polygon. What do you observe about this polygon?

Exercise . What does the evidence obtained so far suggest as to: 
	(a) how many nth roots of unity there are; and
	(b) the configuration of these nth roots of unity as points in the complex plane?

Exercise . Use Manipulate to create a dynamic drasing of the nth roots of unity, and with the primitive  nth root of unity highlighted so as to be distinguished from the others, where the control changes the value of n, starting at n=2. (For help about Manipulate with complex graphics, see the section "Making dynamic drawings by using Manipulate" in notebook DrawingComplexObjects.nb.)

Appendices

Appendix : Plotting roots of unity as vectors from the origin

Instead of viewing the cube roots of unity just as points, you can also represent them by vectors—arrows drawn from the origin to those points. The Presentations graphics function ComplexArrow creates such vectors. This function takes as argument a list of two complex numbers that prescribe the tail and the head of the arrow, respectively.

Consider, for example, the third cube root of unity  (in the order that the three cube roots of unity were found)…

cubeRootsUnity[[3]]

…and form the arrow from the origin to that cube root of unity:

ComplexArrow[{0,cubeRootsUnity[[3]]}]

As you see, ComplexArrow creates an equivalent object with head Arrow. The function Arrow is a built-in Mathematica object. And what the Presentations function ComplexArrow does is to apply ToCoordinates to each of the complex number arguments—here 0 and -1/2 + i (Sqrt[3])/2—to convert them into the corresponding (x,y)-coordinate pairs {0,0} and {-1/2,(Sqrt[2])/2} required by Arrow. In other words,
	ComplexArrow[{0,cubeRootsUnity[[3]]}]
gives the same result as
	Arrow[{ToCoordinates[0],ToCoordinates[cubeRootsUnity[[3]]]}]

Plot that vector:

Draw2D[
{
Blue,Arrowheads[Large],
ComplexArrow[{0,cubeRootsUnity[[3]]}]
},
Axes->True,ImageSize->3 72]

The following forms the list of vectors to all three cube roots of unity:

Map[ComplexArrow[{0,#}]&,cubeRootsUnity]

To shorten such expressions, especially when they are part of larger expressions (such as Draw2D commands), you may use the special input form 
	func/@list, 
to mean:
	Map[func,list] 
For example:

ComplexArrow[{0,#}]&/@cubeRootsUnity

And finally here's the desired plot of the vectors representing all three cube roots of unity:

Draw2D[
{
Blue,Thick,Arrowheads[Large],
ComplexArrow[{0,#}]&/@cubeRootsUnity
},
Axes->True,ImageSize->3 72]

Exercise . What are the angles (in radians) between the arrows?

It's easy to plot both the points and the vectors in the same graphics display:

Draw2D[
{
Legacy@IndianRed,PointSize[Large],
ComplexPoint/@cubeRootsUnity,
Blue,Thick,Arrowheads[Large],
ComplexArrow[{0,#}]& /@ cubeRootsUnity
},
PlotRange->{{-1.2,1.2},{-1.2,1.2}},
Axes->True,AxesLabel->{"Real","Imaginary"},PlotLabel->"Cube roots of unity",
ImageSize->3 72]

A slightly different way to indicate the graphics primitives is by using the Mathematica function Directive. The Directive construction just used is a handy way of combining several graphics directives in order to make clear that they are going to be applied together to the graphics objects that follow (until some new directives override them).

Draw2D[
{
Directive[Legacy@IndianRed,PointSize@Large],
ComplexPoint/@cubeRootsUnity,
Directive[Blue,Thick,Arrowheads@Large],
ComplexArrow[{0,#}]& /@ cubeRootsUnity
},
PlotRange->{{-1.2,1.2},{-1.2,1.2}},
Axes->True,AxesLabel->{"Real","Imaginary"},PlotLabel->"Cube roots of unity",ImageSize->3 72]

Exercise . Include text labels for the three points in the preceding display .

Exercise . In a single Draw2D display, show the cube roots of unity, the triangle having them as vertices, and arrows going from the origin to these vertices.

Exercise . Repeat the preceding exercise but with the sixth roots of unity. (See the Exploration section.) What are the angles (in radians) between the arrows?

Appendix : Creating a polar representation drawing

The following Input cell produces as output the polar representation drawing displayed earlier. The methods used are discussed in notebook DrawingComplexObjects.nb.

Clear[r,arg,x,y,z]

z=4+3I;
(* xval=Re[pt];yval=Im[pt];*)
{x,y}={Re[z],Im[z]};
{r,arg}={Abs[z],Arg[z]};
labels={
ComplexText[TraditionalForm@HoldForm[θ],0.675r Exp[0.5I arg]],
ComplexText[TraditionalForm@HoldForm[r],0.5z+0.25I],
ComplexText[TraditionalForm@HoldForm[z==x+y I==r Cos[θ]+r Sin[θ]I],z+0.5+0.5I],
ComplexText[TraditionalForm@HoldForm[x==r Cos[θ]], x-0.4I],
ComplexText[TraditionalForm@HoldForm[y==r Sin[θ]],y I-1.8]
};

Draw2D[
{
(* Arrow to point z *) 
Legacy@SlateBlue,
ComplexArrow[{0,z-0.05-0.05I}],
(* Angle indicating argument θ *)
Legacy@DeepNaplesYellow,
ComplexCurve[0.75r Exp[I θ],{θ,0,arg}],
(* Point z *)
Red,PointSize[0.025],
ComplexPoint[z],
(* Projections to x- and y-axes *)
Legacy@SlateBlue, Dashed, 
ComplexLine[{z,x}],ComplexLine[{z,y I}], 
(* x- and y-coordinates *)
Red,
ComplexPoint/@{x,y I},
(* Label angle, arrow, point, x- and y-coordinates *)
Black,
labels
},
PlotRange->{{-3.5,8.35},{-1.5,4}},
Axes->True,Ticks->{None,None},
BaseStyle->14,Background->Legacy@AliceBlue,
ImageSize-> 4.45 72]

Clear[r,arg,x,y,z]