Unit 7: Complex Variables
Chapter 36: Applications
Section 36.7: the Joukowski map
Copyright
Copyright * 2001 by Addison Wesley Longman, Inc.
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of the publisher. Printed in the United States of America.
Initializations
> restart;
>
with(plots):
with(plottools):
Warning, the name changecoords has been redefined
>
The Forward Map
The Joukowski map
=
that is,
> f := z -> z+1/z;
>
is of special interest in the application of complex variables to plane fluid flows. The real and imaginary parts of
are respectively
that is,
>
U := unapply(evalc(Re(f(x+I*y))),x,y);
V := unapply(evalc(Im(f(x+I*y))),x,y);
>
The
-plane image of
, the unit circle in the
-plane, is
, which we can see by the following Maple calculation of
.
> w = simplify(evalc(f(exp(I*theta))));
>
As
varies through any range of
,
varies between
and
. Hence, the unit circle in the
-plane maps to the segment
in the
-plane. The unit circle in the
-plane becomes a slit in the
-plane. Figure 36.26 shows what the map does to the rest of the
-plane.
To construct Figure 36.26, we need the Maple function
> F := transform((x,y)->[U(x,y),V(x,y)]):
>
which transforms plot data-structures in the
-plane, to plot data-structures in the
-plane.
>
for k from 1 to 6 do L||k:=NULL;od:
for k from -10 to 10 do
for j from -10 to 10 do
p:=.3*k+.3*j*I;
if Im(p)>0 then L5:=L5,p elif Im(p)<0 then L6:=L6,p;fi;
if abs(p)>=1.2 and Im(p)>0 then L1:=L1,p;
elif abs(p)<.8 and Im(p)>0 then L2:=L2,p;
elif abs(p)<.8 and Im(p)<0 then L3:=L3,p;
elif abs(p)>=1.2 and Im(p)<0 then L4:=L4,p;fi;
od:od:
pp1 := complexplot([L1],style=point, symbol=cross, color=cyan):
pp2 := complexplot([L2],style=point, symbol=POINT, color=black):
pp3 := complexplot([L3],style=point, symbol=cross, color=cyan):
pp4 := complexplot([L4],style=point, symbol=POINT, color=black):
pp5 := circle([0,0],1,color=red,thickness=3):
pp6 := complexplot([L5],style=point, symbol=cross, color=cyan):
pp7 := complexplot([L6],style=point, symbol=POINT, color=black):
pp8 := line([-2,0],[2,0],color=red,thickness=3):
pp9 := subs(AXESLABELS("","",DEFAULT)=AXESLABELS("",""), display([pp||(6..8)],scaling=constrained, title="w-plane")):
pp10 := subs(AXESLABELS("","",DEFAULT)=AXESLABELS("",""), display([pp||(1..5)],scaling=constrained, title="z-plane")):
pp11 := display(array([pp10,pp9]),xtickmarks=[-3,-2,2,3], ytickmarks=[-3,3]):
pp12 := textplot({[0,-12,`z-plane`],[30,-12,`w-plane`]}, font=[TIMES,ROMAN,10]):
display([pp11,pp12]);
>
(The extra coding for two components of Figure 36.26 circumvent a display/array bug introduced in Maple 6.)
Points are selected on a grid in the
-plane. Their location is determined, and on that basis, assigned a color. Then, the
-plane graph of these points is transformed, or mapped, to its
-plane counterpart.
The interior of the unit circle in the
-plane maps onto the
-plane. The upper-half of the unit disk maps onto the lower-half of the
-plane, while the lower-half of the unit disk maps onto the upper-half of the
-plane. In addition, the upper-half of the
-plane exterior to the unit circle maps onto the upper-half of the
-plane, and the lower-half of the
-plane exterior to the unit circle maps onto the lower-half of the
-plane. Thus, the Joukowski map is not one-to-one, and the inverse mapping is multiple-valued.
The following animation shows that points outside the unit circle and in the upper-half of the
-plane map to all of the upper-half of the
-plane. The animation shows the image of a semicircle of increasing radius, starting with a radius of 1. Hence, the first image is just the slit
in the
-plane.
>
p1 := t -> arc([0,0],t,0..Pi,color=red,thickness=3):
display([seq(F(p1(k/2)),k=2..10)], insequence=true, scaling=constrained, labels=[u,v], labelfont=[TIMES,ITALIC,12], xtickmarks=5, ytickmarks=5);
>
The lower-half of the
-plane outside the unit circle maps to all of the lower-half of the
-plane, as suggested by the following animation.
>
p2 := t -> arc([0,0],t,Pi..2*Pi,color=green,thickness=3):
display([seq(F(p2(k/2)),k=2..10)], insequence=true, scaling=constrained, labels=[u,`v `], labelfont=[TIMES,ITALIC,12], xtickmarks=5, ytickmarks=5);
>
The upper-half of the interior of the unit circle maps to the lower-half of the
-plane, as suggested by the following animation.
>
p3 := t -> arc([0,0],t,0..Pi,color=blue,thickness=3):
display([seq(F(p3(k/10)),k=2..10)], insequence=true, scaling=constrained, labels=[u,v], labelfont=[TIMES,ITALIC,12], xtickmarks=5, ytickmarks=5);
>
Finally, the lower-half of the
-plane interior to the unit circle maps to the upper-half of the
-plane, as suggested by the following animation.
>
p4 := t -> arc([0,0],t,Pi..2*Pi,color=black,thickness=3):
display([seq(F(p4(k/10)),k=2..10)], insequence=true, scaling=constrained, labels=[u,v], labelfont=[TIMES,ITALIC,12], xtickmarks=5, ytickmarks=5);
>
Thus, the upper-half of the
-plane exterior to the unit circle, and the lower-half of the
-plane interior to the unit circle, both map to the upper-half of the
-plane. A more static graphic for this conclusion is provided by the following figures. First, a representation of the
-plane is constructed, with the "upper-exterior" and the "lower-interior" appropriately differentiated.
>
qf := NULL:
qp := NULL:
for k from -40 to 40 do
for j from -10 to 0 do
p := .1*k+.1*j*I;
if p<>0 and abs(p)<=1 then qf:=qf,f(p);qp:=qp,p;fi;
od:
od:
p5 := complexplot([qp],style=point, symbol=cross, scaling=constrained, color=green):
p6 := complexplot([qf],style=point, symbol=cross, scaling=constrained, color=green):
qf := NULL:
qp := NULL:
for k from -20 to 20 do
for j from 0 to 20 do
p := .1*k+.1*j*I;
if evalf(abs(p)>1) then qf:=qf,f(p);qp:=qp,p;fi;
od:
od:
p7 := complexplot([qp],style=point, symbol=circle, scaling=constrained, color=red):
p8 := complexplot([qf],style=point, symbol=circle, scaling=constrained, color=red):
display([p5,p7], labels=[x,y], xtickmarks=4, ytickmarks=[-1,0,2], labelfont=[TIMES,BOLD,14]);
>
The image of that portion of the
-plane depicted in this figure is given in the following figure. The red circles from the upper half-plane map to the upper-half of the
-plane. As well, the green crosses from the lower half-plane map to the upper-half of the
-plane.
> display([p6,p8],view=[-5..5,0..6], labels=[u,v], labelfont=[TIMES,BOLD,14], xtickmarks=4, ytickmarks=[0,2,4,6]);
>
Rather than repeat the same demonstration for the "lower-exterior" and the "upper-interior," we provide Figure 36.26 which shows the both pairs of regions and their images under the Joukowski map. Although presented above, it is repeated here for convenience.
>
for k from 1 to 6 do L||k:=NULL;od:
for k from -10 to 10 do
for j from -10 to 10 do
p:=.3*k+.3*j*I;
if Im(p)>0 then L5:=L5,p elif Im(p)<0 then L6:=L6,p;fi;
if abs(p)>=1.2 and Im(p)>0 then L1:=L1,p;
elif abs(p)<.8 and Im(p)>0 then L2:=L2,p;
elif abs(p)<.8 and Im(p)<0 then L3:=L3,p;
elif abs(p)>=1.2 and Im(p)<0 then L4:=L4,p;fi;
od:od:
pp1 := complexplot([L1],style=point, symbol=cross, color=cyan):
pp2 := complexplot([L2],style=point, symbol=POINT, color=black):
pp3 := complexplot([L3],style=point, symbol=cross, color=cyan):
pp4 := complexplot([L4],style=point, symbol=POINT, color=black):
pp5 := circle([0,0],1,color=red,thickness=3):
pp6 := complexplot([L5],style=point, symbol=cross, color=cyan):
pp7 := complexplot([L6],style=point, symbol=POINT, color=black):
pp8 := line([-2,0],[2,0],color=red,thickness=3):
pp9 := subs(AXESLABELS("","",DEFAULT)=AXESLABELS("",""), display([pp||(6..8)],scaling=constrained, title="w-plane")):
pp10 := subs(AXESLABELS("","",DEFAULT)=AXESLABELS("",""), display([pp||(1..5)],scaling=constrained, title="z-plane")):
pp11 := display(array([pp10,pp9]),xtickmarks=[-3,-2,2,3], ytickmarks=[-3,3]):
pp12 := textplot({[0,-12,`z-plane`],[30,-12,`w-plane`]}, font=[TIMES,ROMAN,10]):
display([pp11,pp12]);
>
The inverse map is examined in the last part of this section. Prior to that, however, we examine Joukowski airfoils, the reason why the Joukowski map appears so often in the literature of planar flows.
>
The Joukowski Airfoil
The Joukowski map takes circles which contain
in their interiors, and which pass through
, to "airfoils" in the
-plane. Figure 36.27 shows on the left, the circle through
, with center
and radius
. On the right in Figure 36.27 is the image of this circle under the Joukowski map.
>
p9 := t -> circle([t,t],sqrt(2*t^2+2*t+1),color=black):
R1 := rectangle([-1.5,3.5],[3.5,-1.5],color=white):
R2 := rectangle([-2,3.2],[3.6,-1],color=white):
for k from 1 to 10 do
qq := p9(.1*k):
pc||k := display([qq,R1],xtickmarks=[-2,-1,1,2,3], ytickmarks=[-1,1,2,3]):
pj||k := display(array([pc||k,display([F(qq),R2])]), xtickmarks=[-2,-1,1,2,3], ytickmarks=[-1,1,2,3]);
od:
display([pj2],scaling=constrained);
>
The following animation shows, on the left, circles in the
-plane, and, on the right, their images in the
-plane.
>
p9 := t -> circle([t,t],sqrt(2*t^2+2*t+1),color=black):
R1 := rectangle([-1.5,3.5],[3.5,-1.5],color=white):
R2 := rectangle([-2,3.2],[3.6,-1],color=white):
for k from 1 to 10 do
qq := p9(.1*k):
pc||k := display([qq,R1],xtickmarks=[-2,-1,1,2,3], ytickmarks=[-1,1,2,3]):
pj||k := display(array([pc||k,display([F(qq),R2])]), xtickmarks=[-2,-1,1,2,3], ytickmarks=[-1,1,2,3]);
od:
display([pj||(1..10)],insequence=true,scaling=constrained);
>
The circles shown have centers at
, where
, and have corresponding radii
. These circles satisfy the constraints of passing through
and containing
in their interiors.
A more general version of the Joukowski airfoil is possible if the Joukowski map is defined by
where
. In this case, circles passing through
and containing
in their interiors are mapped to Joukowski airfoils.
If the circle passes through
and contains
in its interior, the airfoil will face in the opposite direction.
>
The Inverse Map
The inverse of the Joukowski map is obtained by solving the equation
=
for
. Since this map is two-to-one, we obtain
(
+
)
that is,
> solve(w=f(z),z);
>
and define the inverse by
with the square root defined so that its discontinuity is along the line segment
,
, where
. The principal square root does not satisfy this constraint, as shown in Figure 26.28 where, under
, the inverse images of the circles
and
can be seen. The image of the smaller circle (which cuts through the segment
,
) is on the left, and it is continuous. The image of the larger circle (which does not pass between
=
+
2,
) is on the right, and it is discontinuous!
To construct Figure 36.28, we define
as
> G := w -> (w+sqrt(w^2-1))/2;
>
where, by default, Maple will use the principal square root. Using this function, we obtain Figure 36.28 by executing the following Maple commands.
>
p10 := complexplot(G(2+exp(I*t)),t=-Pi..Pi,view=[0..2.7,-1.5..1.5], color=cyan, thickness=3, xtickmarks=[0,1,2], ytickmarks=[-1,1]):
p11 := complexplot(G(2+5*exp(I*t)),t=-Pi..Pi, style=point, numpoints=300, color=black,symbol=diamond, xtickmarks=[-2,2,4,6], ytickmarks=[-2,2]):
p12 := textplot({[1.5,.25,`x`],[.1,1.4,`y`]}):
p13 := textplot({[7.6,.4,`x`],[.15,5.5,`y`]}):
p14 := display([p10,p12],title=`g applied to |w - 2| = 1`):
p15 := display([p11,p13],title=`g applied to |w - 2| = 5`):
display(array([p14,p15]),scaling=constrained);
>
The appropriate definition of the square root is
where
is the principal argument, so that
. Figure 36.29, with
, and
, interprets this definition geometrically. It is motivated by write
as the product
, and so that the square roots in the product are given by
where
, is the principal value of the argument function, so that
. Thus, we have Figure 36.29.
>
p16 := plot([[-2,0],[3,2],[2,0]],color=black):
p17 := textplot({[-1.3,.14,`a`],[2.25,.15,`b`]}, font=[SYMBOL,10]):
p18 := textplot({[3.1,2,`w`],[2.8,1,`w - 2`], [1.1,1.5,`w + 2`]}):
display([p||(16..18)],scaling=constrained, xtickmarks=[-2,0,2], ytickmarks=[-2,0,3]);
>
This branch of the square root is relatively easy to construct in Maple by using the
argument
function, Maple's implementation of
, the principal argument function. We therefore have
> g := w -> (w+sqrt(abs(w^2-4))*exp(I*(argument(w-2)+argument(w+2))/2))/2;
>
That this branch of the inverse function has a branch cut along
, is seen from the following figure which shows in the
-plane, the pre-images of points along the circles
.
>
p19 := complexplot(g(2+exp(I*t)),t=-Pi..Pi,view=[0..2.7,-1.5..1.5], style=point, numpoints=300, color=black,symbol=diamond, xtickmarks=[0,1,2], ytickmarks=[-1,1]):
p20 := complexplot(g(2+5*exp(I*t)),t=-Pi..Pi,color=black, thickness=3, xtickmarks=[-2,2,4,6], ytickmarks=[-2,2]):
p21 := textplot({[1.5,.25,`x`],[.1,1.4,`y`]}):
p22 := textplot({[7.5,.3,`x`],[.15,5.5,`y`]}):
p23 := display([p19,p21], scaling=constrained):
p24 := display([p20,p22], scaling=constrained):
display(array([p23,p24]),scaling=constrained);
>
The discontinuous curve on the left is the pre-image of the circle which has radius 1 and which passes through the branch cut. The continuous curve on the right is the pre-image of the circle which has radius 5 and which encloses, but does not cross, the branch cut.