COMPLEX ANALYSIS: Maple Worksheets, 2001
(c) John H. Mathews Russell W. Howell
mathews@fullerton.edu howell@westmont.edu

Complimentary software to accompany the textbook:

COMPLEX ANALYSIS: for Mathematics & Engineering, 4th Ed, 2001, ISBN: 0-7637-1425-9
Jones and Bartlett Publishers, Inc., 40 Tall Pine Drive, Sudbury, MA 01776
Tele. (800) 832-0034; FAX: (508) 443-8000, E-mail: mkt@jbpub.com, http://www.jbpub.com/


CHAPTER 6 COMPLEX INTEGRATION

Section 6.3 The Cauchy-Goursat Theorem

The Cauchy-Goursat theorem states that within certain domains the integral of an analytic function over a simple closed contour is zero. An extension of this theorem will allow us to replace integrals over certain complicated contours with integrals over contours that are easy to evaluate. We will show how to use the technique of partial fractions together with the Cauchy-Goursat theorem to evaluate certain integrals. In Section 6.4 we will see that the Cauchy-Goursat theorem implies that an analytic function has an antiderivative. To start with, we need to introduce a few new concepts.

 

We saw in Section 1.6 that each simple closed contour C divides the plane into two domains. One domain is bounded and is called the interior of C , and the other domain is unbounded and is called the exterior of C . This result is known as the Jordan Curve Theorem.

 

Reall that a domain D is a connected open set. In particular, if z[1] and z[2] are any pair of points in D , then they can be joined by a curve that lies entirely in D . A domain D is said to be simply connected if it has the property that any simple closed contour C contained in D has its interior contained in D . In other words, there are no "holes'' in a simply connected domain. A domain that is not simply connected is said to be a multiply connected domain .

 

Let the simple closed contour C have the parametrization `C: ` z(t) = x(t)+i*y(t) , for a `` <= `` t `` <= `` b. If C is parametrized so that the interior of C is kept on the left as z(t) moves around C , then we say that C is oriented in the positive (counterclockwise) sense; otherwise, C is oriented negatively . If C is positively oriented, then -C is negatively oriented.

 

 

Green's theorem, an important result from the calculus of real variables, tells us how to evaluate the line integral of real-valued functions.

 

 

Theorem 6.4 (Green's Theorem)

 

Let C be a simple closed contour with positive orientation, and let R be the domain that forms the interior of C .

If P and Q are continuous and have continuous partial derivatives at all points on C and R , then

int(P(x,y),x = C .. ` `)+int(Q(x,y),y = C .. ` `) =... .

 

We are now ready to state the main result of this section.

 

Theorem 6.5 (Cauchy-Goursat Theorem) Let f(z) be analytic in a simply connected domain D .

If C is a simple closed contour that lies in D , then int(f(z),z = C .. ` `) = 0 .

 

 

Load Maple's "redidue" procedure.
Make sure this is done only ONCE during a Maple session.

> readlib(residue):

 

Example 6.12, Page 229. Let us recall that exp(z) , cos(z) , and z^n , where n is a positive
integer, are all entire functions and have continuous derivatives. For illustration set
n = 5 ,
and choose the contour to be the unit circle
C : abs(z) = 1 with positive orientation.
The Cauchy-Goursat theorem implies that for any simple closed contour we have:
(a) int(exp(z),z = C .. `   `) = 0 , (b) int(cos(z),z = C .. `   `) = 0 , (c) int(z^5,z = C .. `   `) = 0

(a) First, consider int(exp(z),z = C .. `   `) = 0 , which can be verified with the computation:

> dz :='dz':f:='f':F:='F':g:='g':t:='t':T:='T':z:='z':Z:='Z':z1:='z1':
f := z -> exp(z):
`f(z) ` = f(z);
z := t -> exp(I*t):
`C: z(t) ` = z(t);
`f(z(t)) ` = f(z(t));
z1 := t -> subs(T=t,diff(z(T), T)):
`dz = z '(t) dt ` = z1(t), `dt`;
Int(f(z),z=C..``) = Int(f(z(t))*z1(t),t=0..2*pi);
`The anti-derivative is:`;
g := t -> simplify(subs(T=t,int(f(z(T))*z1(T), T))):
`g(t) ` = g(t);
g1 := g(2*Pi):
g0 := g(0):
`g(2*Pi) ` = expand(g1),` and `,`g(0) ` = expand(g0);
`g(2*Pi) - g(0) ` = expand(g1 - g0);
Int(f(z),z=C..``) = expand(g1 - g0);

`f(z) ` = exp(z)

`C:  z(t) ` = exp(I*t)

`f(z(t)) ` = exp(exp(I*t))

`dz = z '(t) dt ` = I*exp(I*t), dt

Int(exp(z),z = C .. ``) = Int(I*exp(exp(I*t))*exp(I...

`The anti-derivative is:`

`g(t)  ` = exp(exp(I*t))

`g(2*Pi) ` = exp(1), `  and  `, `g(0) ` = exp(1)

`g(2*Pi) - g(0)  ` = 0

Int(exp(z),z = C .. ``) = 0

 

(b) Second, int(cos(z),z = C .. `   `) = 0 , c an be verified with the computation:

> dz :='dz':f:='f':F:='F':g:='g':t:='t':T:='T':z:='z':Z:='Z':z1:='z1':
f := z -> cos(z):
`f(z) ` = f(z);
z := t -> exp(I*t):
`C: z(t) ` = z(t);
`f(z(t)) ` = f(z(t));
z1 := t -> subs(T=t,diff(z(T), T)):
`dz = z '(t) dt ` = z1(t), `dt`;
Int(f(z),z=C..``) = Int(f(z(t))*z1(t),t=0..2*pi);
`The anti-derivative is:`;
g := t -> simplify(subs(T=t,int(f(z(T))*z1(T), T))):
`g(t) ` = g(t);
g1 := g(2*Pi):
g0 := g(0):
`g(2*Pi) ` = expand(g1),` and `,`g(0) ` = expand(g0);
`g(2*Pi) - g(0) ` = expand(g1 - g0);
Int(f(z),z=C..``) = expand(g1 - g0);

`f(z) ` = cos(z)

`C:  z(t) ` = exp(I*t)

`f(z(t)) ` = cos(exp(I*t))

`dz = z '(t) dt ` = I*exp(I*t), dt

Int(cos(z),z = C .. ``) = Int(I*cos(exp(I*t))*exp(I...

`The anti-derivative is:`

`g(t)  ` = sin(exp(I*t))

`g(2*Pi) ` = sin(1), `  and  `, `g(0) ` = sin(1)

`g(2*Pi) - g(0)  ` = 0

Int(cos(z),z = C .. ``) = 0

 

(c) Third, int(z^5,z = C .. `   `) = 0 , c an be verified with the computation:

> dz :='dz':f:='f':F:='F':g:='g':t:='t':T:='T':z:='z':Z:='Z':z1:='z1':
f := z -> z^5:
`f(z) ` = f(z);
z := t -> exp(I*t):
`C: z(t) ` = z(t);
`f(z(t)) ` = f(z(t));
z1 := t -> subs(T=t,diff(z(T), T)):
`dz = z '(t) dt ` = z1(t), `dt`;
Int(f(z),z=C..``) = Int(f(z(t))*z1(t),t=0..2*pi);
`The anti-derivative is:`;
g := t -> simplify(subs(T=t,int(f(z(T))*z1(T), T))):
`g(t) ` = g(t);
g1 := g(2*Pi):
g0 := g(0):
`g(2*Pi) ` = expand(g1),` and `,`g(0) ` = expand(g0);
`g(2*Pi) - g(0) ` = expand(g1 - g0);
Int(f(z),z=C..``) = expand(g1 - g0);

`f(z) ` = z^5

`C:  z(t) ` = exp(I*t)

`f(z(t)) ` = exp(I*t)^5

`dz = z '(t) dt ` = I*exp(I*t), dt

Int(z^5,z = C .. ``) = Int(I*exp(I*t)^6,t = 0 .. 2*...

`The anti-derivative is:`

`g(t)  ` = 1/6*exp(6*I*t)

`g(2*Pi) ` = 1/6, `  and  `, `g(0) ` = 1/6

`g(2*Pi) - g(0)  ` = 0

Int(z^5,z = C .. ``) = 0

 

 

We want to be able to replace integrals over certain complicated contours with integrals that are easy to evaluate. If C[1] is a simple closed contour that can be "continuously deformed" into another simple closed contour C[2] without passing through a point where f is not analytic, then the value of the contour integral of f over C[1] is the same as the value of the integral of f over C[2] . To be precise, we state the following result.

 

 

Theorem 6.6 (Deformation of Contour)

Let C[1] and C[2] be two simple closed positively oriented contours such that C[1] lies interior to C[2] .

If f(z) is analytic in a domain D that contains both C[1] and C[2] and the region between them, then

 

int(f(z),z = C[1] .. ` `) = int(f(z),z = C[2] .. ` ... .

 

 

We now state an important result that is implied by the deformation of contour theorem. This result will occur several times in the theory to be developed and is an important tool for computations. You may want to compare the proof of this corollary with your solution to Exercise 6.2.23.

 

 

Corollary 6.1 Let z[0] denote a fixed complex value. If C is a simple closed contour with positive orientation such that z[0] lies interior to C , then

int(1/(z-z[0]),z = C .. ` `) = 2*pi*i ,

and

int(1/((z-z[0])^n),z = C .. ` `) = 0 , where n is any integer except n = 1 .

 

 

Extra Eample, Page 232. Let z[0] denote a fixed complex value. If C is a
simple closed contour with positive orientation such that
z[0] lies interior to C , then
(a) int(1/(z-z[0]),z = C .. `   `) = 2*pi*i and
(b) int(1/((z-z0)^n),z = C .. `   `) = 0 , where n <> 1 is an integer.

For illustration, we use a circle of radius 1 centered at z[0] .
(a) Show that int(1/(z-z[0]),z = C .. `   `) = 2*pi*i .

> dz :='dz':f:='f':F:='F':g:='g':t:='t':
T:='T':z:='z':Z:='Z':z0:='z0':z1:='z1':
f := z -> 1/(z - z0):
`f(z) ` = f(z);
z := t -> z0 + exp(I*t):
`C: z(t) ` = z(t);
`f(z(t)) ` = f(z(t));
z1 := t -> subs(T=t,diff(z(T), T)):
`dz = z '(t) dt ` = z1(t), `dt`;
Int(f(z),z=C..``) = Int(f(z(t))*z1(t),t=0..2*pi);
`The anti-derivative is:`;
g := t -> simplify(subs(T=t,int(f(z(T))*z1(T), T))):
`g(t) ` = g(t);
g1 := g(2*Pi):
g0 := g(0):
`g(2*Pi) ` = expand(g1),` and `,`g(0) ` = expand(g0);
`g(2*Pi) - g(0) ` = expand(g1 - g0);
Int(f(z),z=C..``) = expand(g1 - g0);

`f(z) ` = 1/(z-z0)

`C:  z(t) ` = z0+exp(I*t)

`f(z(t)) ` = 1/exp(I*t)

`dz = z '(t) dt ` = I*exp(I*t), dt

Int(1/(z-z0),z = C .. ``) = Int(I,t = 0 .. 2*pi)

`The anti-derivative is:`

`g(t)  ` = I*t

`g(2*Pi) ` = 2*I*Pi, `  and  `, `g(0) ` = 0

`g(2*Pi) - g(0)  ` = 2*I*Pi

Int(1/(z-z0),z = C .. ``) = 2*I*Pi

 

(b) Show that int(1/((z-z0)^5),z = C .. `   `) = 0
For illustration, we use a circle of radius 1 centered at z[0] .

> dz :='dz':f:='f':F:='F':g:='g':t:='t':
T:='T':z:='z':Z:='Z':z0:='z0':z1:='z1':
f := z -> 1/(z - z0)^5:
`f(z) ` = f(z);
z := t -> z0 + exp(I*t):
`C: z(t) ` = z(t);
`f(z(t)) ` = f(z(t));
z1 := t -> subs(T=t,diff(z(T), T)):
`dz = z '(t) dt ` = z1(t), `dt`;
Int(f(z),z=C..``) = Int(f(z(t))*z1(t),t=0..2*pi);
Int(f(z),z=C..``) = Int(simplify(f(z(t))*z1(t)),t=0..2*pi);
`The anti-derivative is:`;
g := t -> simplify(subs(T=t,int(f(z(T))*z1(T), T))):
`g(t) ` = g(t);
g1 := g(2*Pi):
g0 := g(0):
`g(2*Pi) ` = expand(g1),` and `,`g(0) ` = expand(g0);
`g(2*Pi) - g(0) ` = expand(g1 - g0);
Int(f(z),z=C..``) = expand(g1 - g0);

`f(z) ` = 1/((z-z0)^5)

`C:  z(t) ` = z0+exp(I*t)

`f(z(t)) ` = 1/(exp(I*t)^5)

`dz = z '(t) dt ` = I*exp(I*t), dt

Int(1/((z-z0)^5),z = C .. ``) = Int(I/exp(I*t)^4,t ...

Int(1/((z-z0)^5),z = C .. ``) = Int(I*exp(-4*I*t),t...

`The anti-derivative is:`

`g(t)  ` = -1/4*exp(-4*I*t)

`g(2*Pi) ` = -1/4, `  and  `, `g(0) ` = -1/4

`g(2*Pi) - g(0)  ` = 0

Int(1/((z-z0)^5),z = C .. ``) = 0

 

 

The deformation of contour theorem is an extension of the Cauchy-Goursat theorem to a doubly connected domain in the following sense. Let D be a domain that contains C[1] and C[2] and the region between them. Then the contour C = C[2]-C[1] is a parametrization of the boundary of the region R that lies between C[1] and C[2] so that the points of R lie to the left of C as a point z moves around C . Hence C is a positive orientation of the boundary of R , and Theorem 6.6 implies that int(f(z),z = C .. ` `) = 0 .

 

 

We can extend Theorem 6.6 to multiply connected domains with more than one "hole." The proof, which is left for the reader, involves the introduction of several cuts and is similar to the proof of Theorem 6.6.

 

 

Theorem 6.7 (Extended Cauchy-Goursat Theorem)

Let C, C[1], C[2], `...`, C[n] be simple closed positively oriented contours with the property that C[k] lies interior to C for k = 1, 2, `...`, n and the set of interior to C[k] has no points in common with the set interior to C[j] if k <> j . Let f(z[0]) be analytic on a domain D that contains all the contours and the region between C and C[1]+C[2]+`...`+C[n] , then

int(f(z),z = C .. ` `) = sum(int(f(z),z = C[k] .. `... .

 

Example 6.14, Page 233. Show that int(2*z/(z^2+2),z = C .. `   `) = 4*pi*i ,
where
C is the circle C : abs(z) = 2 taken with positive orientation.

> f:='f': F:='F': z:='z':
f := z -> 2*z/(z^2 + 2):
`f(z) ` = f(z);

`f(z) ` = 2*z/(z^2+2)

 

First, split the function up into partial fractions involving linear terms in the denominators. Don't worry
about the subroutine. It splits
f(z) up into partial fractions. The result will be an equivalent function F(z) .
The list of terms added to form
F(z) have singularities in the same order in the list of points Z .

> Zn := sort([solve(denom(f(z))=0, z)]):
Rn := array(1..nops(Zn)):
Sn := array(1..nops(Zn)):
F1 := 0:
for i from 1 to nops(Zn) do
if i=1 then p:=1 fi;
if 1<i and Zn[i-1]=Zn[i] then
p := p+1 else p := 1 fi;
Rn[i] := residue((z-Zn[i])^(p-1)*f(z), z=Zn[i]);
Sn[i] := Rn[i]/(z-Zn[i])^p;
F1 := F1 + Rn[i]/(z-Zn[i])^p;
od:
Z := array(1..nops(F1)):
R := array(1..nops(F1)):
S := array(1..nops(F1)):
p := 1:
for i from 1 to nops(Zn) do
if Sn[i]<>0 then
Z[p]:=Zn[i]; R[p]:=Rn[i]; S[p]:=Sn[i]; p:=p+1 fi;
od:
`f(z) ` = f(z);
`f(z) ` = F1;
print(`singularities =`, Z);

`f(z) ` = 2*z/(z^2+2)

`f(z) ` = 1/(z-I*sqrt(2))+1/(z+I*sqrt(2))

`singularities =`, vector([I*sqrt(2), -I*sqrt(2)])

Determine which singularities lie inside C : abs(z) = 2 .

> print(z[1]=Z[1], abs(z[1])<2, evalb(evalf(abs(Z[1]))<2));
print(z[2]=Z[2], abs(z[2])<2, evalb(evalf(abs(Z[2]))<2));

z[1] = I*sqrt(2), abs(z[1]) < 2, true

z[2] = -I*sqrt(2), abs(z[2]) < 2, true

 

Since both singularities lie inside C , add the corresponding term in the
sum forming
f(z) times constant in the numerator that term times 2*pi*i .

> val := 2*Pi*I*numer(S[1]) + 2*Pi*I*numer(S[2]):
Int(f(z),z=C..``) = val;

Int(2*z/(z^2+2),z = C .. ``) = 0

 

Example 6.15, Page 234. Show that int(2*z/(z^2+2),z = C .. `   `) = 2*pi*i ,
where
C is the circle C : abs(z-i) = 1 taken with positive orientation.

> f:='f': F:='F': z:='z':
f := z -> 2*z/(z^2 + 2):
`f(z) ` = f(z);

`f(z) ` = 2*z/(z^2+2)

First, split the function up into partial fractions involving linear terms in the denominators. Don't worry
about the subroutine. It splits
f(z) up into partial fractions. The result will be an equivalent function F(z) .
The list of terms added to form
F(z) have singularities in the same order in the list of points Z

> Zn := sort([solve(denom(f(z))=0, z)]):
Rn := array(1..nops(Zn)):
Sn := array(1..nops(Zn)):
F1 := 0:
for i from 1 to nops(Zn) do
if i=1 then p:=1 fi;
if 1<i and Zn[i-1]=Zn[i] then
p := p+1 else p := 1 fi;
Rn[i] := residue((z-Zn[i])^(p-1)*f(z), z=Zn[i]);
Sn[i] := Rn[i]/(z-Zn[i])^p;
F1 := F1 + Rn[i]/(z-Zn[i])^p;
od:
Z := array(1..nops(F1)):
R := array(1..nops(F1)):
S := array(1..nops(F1)):
p := 1:
for i from 1 to nops(Zn) do
if Sn[i]<>0 then
Z[p]:=Zn[i]; R[p]:=Rn[i]; S[p]:=Sn[i]; p:=p+1 fi;
od:
`f(z) ` = f(z);
`f(z) ` = F1;
print(`singularities =`, Z);

`f(z) ` = 2*z/(z^2+2)

`f(z) ` = 1/(z-I*sqrt(2))+1/(z+I*sqrt(2))

`singularities =`, vector([I*sqrt(2), -I*sqrt(2)])

 

Determine which singularities lie inside C : abs(z-i) = 1 .

> print(z[1]=Z[1], abs(z[1]-I)<2,
evalb(evalf(abs(Z[1]-I))<1));
print(z[2]=Z[2], abs(z[2]-I)<2,
evalb(evalf(abs(Z[2]-I))<1));

z[1] = I*sqrt(2), abs(z[1]-I) < 2, true

z[2] = -I*sqrt(2), abs(z[2]-I) < 2, false

 

Since only the first singularity lies inside C , add the first term in the sum
forming
f(z) times constant in the numerator that term times 2*pi*i .

Remark. Sometimes Maple will form the list of values in a different order.

It is always necessary to visually inspect the above results before proceeding.


> val := 2*Pi*I*numer(S[1]):
Int(f(z),z=C..``) = val;

Int(2*z/(z^2+2),z = C .. ``) = -2*I*Pi

 

Example 6.16, Page 234. Show that int((z-2)/(z^2-2),z = C .. `   `) = -6*pi*i ,
where
C is the figure eight shown in the text on page 135.

> f:='f': F:='F': z:='z':
f := z -> (z - 2)/(z^2 - z):
`f(z) ` = f(z);

`f(z) ` = (z-2)/(z^2-z)

 

First, split the function up into partial fractions involving linear terms in the denominators. Don't worry
about the subroutine. It splits
f(z) up into partial fractions. The result will be an equivalent function F(z) .
The list of terms added to form
F(z) have singularities in the same order in the list of points Z

> Zn := sort([solve(denom(f(z))=0, z)]):
Rn := array(1..nops(Zn)):
Sn := array(1..nops(Zn)):
F1 := 0:
for i from 1 to nops(Zn) do
if i=1 then p:=1 fi;
if 1<i and Zn[i-1]=Zn[i] then
p := p+1 else p := 1 fi;
Rn[i] := residue((z-Zn[i])^(p-1)*f(z), z=Zn[i]);
Sn[i] := Rn[i]/(z-Zn[i])^p;
F1 := F1 + Rn[i]/(z-Zn[i])^p;
od:
Z := array(1..nops(F1)):
R := array(1..nops(F1)):
S := array(1..nops(F1)):
p := 1:
for i from 1 to nops(Zn) do
if Sn[i]<>0 then
Z[p]:=Zn[i]; R[p]:=Rn[i]; S[p]:=Sn[i]; p:=p+1 fi;
od:
`f(z) ` = f(z);
`f(z) ` = F1;
print(`singularities =`, Z);

`f(z) ` = (z-2)/(z^2-z)

`f(z) ` = 2*1/z-1/(z-1)

`singularities =`, vector([0, 1])

 

Determine which singularities corresponds to the contour C[1] and C[2] . The second term will correspond
to the singularity at
z = 1 used with contour C[2] and the first term corresponds to the singularity at z = 0
used with contour
C[1] . Since C[2] has positive orientation, we add the second term in the sum forming
f(z) times constant in the numerator of that term times 2*pi*i . And since the C[1] has negative orientation,
we subtract the first term in the sum forming
f(z) times constant in the numerator of that term times 2*pi*i .

Remark. Sometimes Maple will form the list of values in a different order.

It is always necessary to visually inspect the above results before proceeding.

 

> val := 2*Pi*I*numer(S[2]) - 2*Pi*I*numer(S[1]):
Int(f(z),z=C..``) = val;

Int((z-2)/(z^2-z),z = C .. ``) = -6*I*Pi

 

End of Section 6.3.