Picard Iterates

Section 2.1 in Borrelli/Coleman

February 19, 1999

Richard Hitt

Introduction

This section discusses the existence and uniqueness of solutions to first order initial value problems of the form [Maple Math] , [Maple Math] .

Theorem: If [Maple Math] and [Maple Math] are both continuous throughout a closed rectangle [Maple Math] in the plane, and if [Maple Math] is a point in the interior of [Maple Math] , then the IVP

[Maple Math] [Maple Math]

has a solution on some [Maple Math] -interval containing [Maple Math] in its interior (existence). Furthermore, the IVP has no more that one solution on any [Maple Math] -interval containing [Maple Math] in its interior (uniqueness).

The proof of this theorem is carried out by constructing a sequence of functions that converges to the solution of the IVP. Although the proof requires some more advance mathematics that we consider in this course (Cauchy sequences in a complete metric space), it is instructive to examine how the approximating functions are constructed.

If we integrate both sides of the differential equation from [Maple Math] to [Maple Math] , we get a corresponding integral equation

[Maple Math]


where the dummy variable
[Maple Math] is used to avoid confusion with the limit of integration [Maple Math] . This integral formulation can be used to construct a sequence of approximate solutions to the IVP. The idea is that given an initial guess of the approximate solution to the IVP, say [Maple Math] , an infinite sequence of functions, [Maple Math] , can be constructed according to the rule

[Maple Math]

These functions are called Picard's iterates and the method itself is called Picard's Method.

Getting started

Every Maple worksheet should begin by re-initializing the Maple "kernel" and loading the additional packages that we are most likely to use.

> restart;

> with( plots ):

> with( DEtools ):

Example 1

In this example we will use the Picard method to construct the first few Picard iterates for the most basic IVP we have:

[Maple Math] [Maple Math]

We begin by making the simplest guess possible that also satisfies the initial condition:

> phi[0] := t -> 1;

[Maple Math]

Next we form [Maple Math] using the above formula

> phi[1] := 1 + int(phi[0](s), s=0..t );

[Maple Math]

This sets [Maple Math] equal to an algebraic expression. In Maple's eyes, to make it into a function we have to do

> phi[1] := unapply(phi[1],t);

[Maple Math]

Continuing, we can combine both of these steps into one step.

[Maple Math]

> phi[2] := unapply( 1 + int(phi[1](s), s=0..t), t);

[Maple Math]

This process continues indefinitely. It can be automated slightly with a loop to capture the first 6, say, iterates.

> for i from 1 to 6 do
phi[i] := unapply( 1 + int( phi[i-1](s), s=0..t), t);
od;

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

Note that in this example, each [Maple Math] is obtained from the previous one by the addition of a single term. Does this look familiar?

Each new term is of the form [Maple Math] . This makes the Picard iterates the sequence of partial sums for the Maclaurin series for [Maple Math] . Thus, the sequence of Picard iterates converges to [Maple Math] which is the solution to the IVP.

Let's look at all this graphically.

> plot({exp(t), seq(phi[i](t), i=0..6)},t=-3..2);

[Maple Plot]

Another Example

Let

> f := (t,y) -> 2*t - y^2;

[Maple Math]

Form the IVP

[Maple Math] [Maple Math]

We can begin the Picard method in Maple again. This time we will take what we did in the previous section and wrap it up in a procedure for handling the Picard calculations. This Maple code defines a procedure called picard (what else) the takes as its arguments the initial values, the function [Maple Math] on the rhs of the DE, and the number of the iterate we want computed.

> Picard :=
proc(t0,y0::algebraic, f::procedure, n::integer)
local result;
if n=0 then
result:=unapply(y0,t)
else
result:=
unapply(y0+simplify(int(f(s,Picard(t0,y0,f,n-1)(s)),s=t0..t)),t)
fi
end;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Let's look at the first few Picard iterates.

> seq(Picard(0,0,f,i), i=0..5);

[Maple Math]
[Maple Math]
[Maple Math]

Note that in this example to get from one iterate to the next, the existing terms are left alone and new terms are added. It does not always happen like this.

Now we can compute several iterates and plot them along with a numerical approximation of the actual solution.

> P1 :=
DEplot(
diff(y(t),t)=2*t-y^2, {y(t)},
t=-1..2, y=-1..3,
[[0,0]],
linecolor=BLUE
):

> P2 :=
plot(
{seq(Picard(0,0,f,i)(t),i=0..5)},
t=-1..2,
y=-1..3,
color=RED,
thickness=1
):

> display(P1,P2);

[Maple Plot]

We can animate the sequence of iterates. In the Maple worksheet, you need to right click on the graph below and go to the Animate menu.

> for i from 0 to 5 do
p.i :=
display(
[
P1,
plot(
Picard(0,0,f,i)(t),
t=-1..2, y=1..3,
color=RED, thickness=3
)
]
);
od:
i := 'i':

> display(
[ seq( p.i, i=0..5 ) ],
insequence=true, view=[-1..2,-1..3],
title=`Direction Field and Picard Iterate for y' = 2t - y^2, y(0)=0` );

[Maple Plot]