Section 36-07.mws

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

w = f(z) = z+1/z

that is,

> f := z -> z+1/z;

f := proc (z) options operator, arrow; z+1/z end pr...

>

is of special interest in the application of complex variables to plane fluid flows. The real and imaginary parts of

f(z) = u+i*v

are respectively

u(x,y) = x+x/(x^2+y^2)

v(x,y) = y-y/(x^2+y^2)

that is,

> U := unapply(evalc(Re(f(x+I*y))),x,y);
V := unapply(evalc(Im(f(x+I*y))),x,y);

U := proc (x, y) options operator, arrow; x+x/(x^2+...

V := proc (x, y) options operator, arrow; y-y/(x^2+...

>

The w -plane image of z = exp(i*theta) , the unit circle in the z -plane, is w = 2*cos(theta) , which we can see by the following Maple calculation of f(exp(i*theta)) .

> w = simplify(evalc(f(exp(I*theta))));

w = 2*cos(theta)

>

As theta varies through any range of 2*Pi , w varies between -2 and 2 . Hence, the unit circle in the z -plane maps to the segment -2 <= u `` <= 2 in the w -plane. The unit circle in the z -plane becomes a slit in the w -plane. Figure 36.26 shows what the map does to the rest of the z -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 z -plane, to plot data-structures in the w -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]);

[Maple Plot]

>

(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
z -plane. Their location is determined, and on that basis, assigned a color. Then, the z -plane graph of these points is transformed, or mapped, to its w -plane counterpart.

The interior of the unit circle in the z -plane maps onto the w -plane. The upper-half of the unit disk maps onto the lower-half of the w -plane, while the lower-half of the unit disk maps onto the upper-half of the w -plane. In addition, the upper-half of the z -plane exterior to the unit circle maps onto the upper-half of the w -plane, and the lower-half of the z -plane exterior to the unit circle maps onto the lower-half of the w -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 z -plane map to all of the upper-half of the w -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 -2 <= u `` <= 2 in the w -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);

[Maple Plot]

>

The lower-half of the z -plane outside the unit circle maps to all of the lower-half of the w -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);

[Maple Plot]

>

The upper-half of the interior of the unit circle maps to the lower-half of the w -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);

[Maple Plot]

>

Finally, the lower-half of the z -plane interior to the unit circle maps to the upper-half of the w -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);

[Maple Plot]

>

Thus, the upper-half of the z -plane exterior to the unit circle, and the lower-half of the z -plane interior to the unit circle, both map to the upper-half of the w -plane. A more static graphic for this conclusion is provided by the following figures. First, a representation of the z -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]);

[Maple Plot]

>

The image of that portion of the z -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 w -plane. As well, the green crosses from the lower half-plane map to the upper-half of the w -plane.

> display([p6,p8],view=[-5..5,0..6], labels=[u,v], labelfont=[TIMES,BOLD,14], xtickmarks=4, ytickmarks=[0,2,4,6]);

[Maple Plot]

>

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]);

[Maple Plot]

>

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 z = 1 in their interiors, and which pass through z = -1 , to "airfoils" in the w -plane. Figure 36.27 shows on the left, the circle through z = -1 , with center ``(1/5,1/5) and radius sqrt(17)/5 . 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);

[Maple Plot]

>

The following animation shows, on the left, circles in the z -plane, and, on the right, their images in the w -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);

[Maple Plot]

>

The circles shown have centers at ``(t,t) , where 1/10 <= t `` <= 1 , and have corresponding radii r = sqrt((t-1)^2+t^2) . These circles satisfy the constraints of passing through z = -1 and containing z = 1 in their interiors.

A more general version of the Joukowski airfoil is possible if the Joukowski map is defined by

f(z) = z+k^2/z

where k*`>`*0 . In this case, circles passing through z = -k and containing z = k in their interiors are mapped to Joukowski airfoils.

If the circle passes through z = k and contains z = -k 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

w = f(z) = z+1/z

for z . Since this map is two-to-one, we obtain

z = 1/2 ( w + sqrt(w^2-4) )

that is,

> solve(w=f(z),z);

1/2*w+1/2*sqrt(w^2-4), 1/2*w-1/2*sqrt(w^2-4)

>

and define the inverse by

g(w) = 1/2 ``(w+sqrt(w^2-4))

with the square root defined so that its discontinuity is along the line segment -2 <= u `` <= 2 , v = 0 , where w = u+i*v . The principal square root does not satisfy this constraint, as shown in Figure 26.28 where, under z = g(w) , the inverse images of the circles abs(w-2) = 1 and abs(w-2) = 5 can be seen. The image of the smaller circle (which cuts through the segment -2 <= u `` <= 2 , v = 0 ) is on the left, and it is continuous. The image of the larger circle (which does not pass between u = + 2, v = 0 ) is on the right, and it is discontinuous!

To construct Figure 36.28, we define g(w) as

> G := w -> (w+sqrt(w^2-1))/2;

G := proc (w) options operator, arrow; 1/2*w+1/2*sq...

>

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);

[Maple Plot]

>

The appropriate definition of the square root is

sqrt(w^2-4) = sqrt(abs(w^2-4))*exp(i*[Arg(w-2)+Arg(...

where Arg(w) is the principal argument, so that -Pi < theta `` <= Pi . Figure 36.29, with alpha = Arg(w+2) , and beta = Arg(w-2) , interprets this definition geometrically. It is motivated by write sqrt(w^2-4) as the product sqrt(w-2)*sqrt(w+2) , and so that the square roots in the product are given by

sqrt(eta) = sqrt(abs(eta))*exp(i*theta/2)

where theta = Arg(eta) , is the principal value of the argument function, so that -Pi < theta `` <= Pi . 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]);

[Maple Plot]

>

This branch of the square root is relatively easy to construct in Maple by using the argument function, Maple's implementation of Arg(eta) , 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;

g := proc (w) options operator, arrow; 1/2*w+1/2*sq...

>

That this branch of the inverse function has a branch cut along -2 <= u `` <= 2, v = 0 , is seen from the following figure which shows in the z -plane, the pre-images of points along the circles w = 2+r*exp(i*theta), r = 1, 5 .

> 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);

[Maple Plot]

>

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.