MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group...

97
MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September 2013

Transcript of MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group...

Page 1: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

MATLABOrdinary Differential

Equations – Part I

Greg Reese, Ph.D

Research Computing Support Group

Academic Technology Services

Miami University

September 2013

Page 2: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

MATLABOrdinary Differential

Equations – Part I

© 2010-2013 Greg Reese. All rights reserved 2

Page 3: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

3

Ordinary Differential Equation (ODE)

Differential Equation – an equation with an unknown function and some of its derivatives

Ordinary – the function depends on one variable only

Page 4: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

4

An ODE is linear if y and its derivatives occur only with an exponent of 0 or 1• Linear

– y'' +5y' + 7 = 0– y''' = 40y'' - 100– x3y''' + y' + cos x = 0

• Nonlinear– y'' = -ky2

– yy' = 1

Page 5: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

5

Ordinary Differential Equation (ODE)• Independent variable often denoted as t

and referred to as "time"• Unknown function often denoted as y(t)• The derivative of y with respect to t is

denoted as y', the second derivative as y'', and so on

Page 6: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

6

The degree of the highest derivative in a differential equation is that equation's order, e.g.,• y' = ky first order• y'' + 2y' + 3y = sin(t) second order•y''' +2y'' + 2y + 2 =40 third order

All of MATLAB's ODE solvers take only first order systems of equations. Not a severe restriction though

Page 7: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

7

MATLAB has many ODE solvers. They have names of the form odennzz() where• nn is a two digit number having to do with

some characteristics of the algorithm• zz is 0, 1, or 2 letters denoting the type of

equation the function should be used for– s = stiff– i = implicit– t = moderately stiff– tb = stiff

Page 8: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

8

MATLAB's ODE functions only solve first order ODEs, and specifically, these kind:• Explicit ODE y' = f(t,y)• Linearly implicit ODE M(t,y)y' = f(t,y)

– M(t,y) is a matrix

• Fully implicit ODE f(t,y,y') = 0– ode15i() only

In all of above, y and y' are vectors

Page 9: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

9

Since y and y' are vectors, the equation y' = f(t,y) looks like this:

Sometimes called the "state-space" form

mmm

m

m

m

yyyty

yyyty

yyyty

yyyty

,,,,f

,,,,f

,,,,f

,,,,f

21

2133

2122

2111

Page 10: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

ODE

10

Requirement to be in state-space form not as limiting as it appears• Can always convert any

linear (in y) ODE to state-space form

• Can convert many other ODEs also

A lot of work in solving ODEs is in conversion to right form. So let's give it a try!

mmm

m

m

m

yyyty

yyyty

yyyty

yyyty

,,,,f

,,,,f

,,,,f

,,,,f

21

2133

2122

2111

Page 11: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

11

STEP 1

If the highest derivative is n, define y1, y2, … yn as in the example

yy

yy

yy

yyyy

3

2

1

7862

Page 12: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

12

STEP 2

From can see that

so write32

21

yy

yy

3221 , yyyyyy yy

yy

yy

3

2

1

Page 13: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

13

STEP 3

Solve original equation for highest derivative and substitute yk+1 for y(k)

on right side Remember

7268

7862

7862

7862

321

123

yyyy

yyyy

yyyy

yyyy

yy

yy

yy

3

2

1

Page 14: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

14

STEP 4

Since we have

Substitute y'3 for y''' on left side

yy 3

7268

7268

3213

321

yyyy

yyyy

yy

yy

yy

3

2

1

Page 15: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

15

STEP 5

Write in form

3213

32

21

,,,f yyyty

yy

yy

STEP 5

7268 3213

32

21

yyyy

yy

yy

7268 3213 yyyy

Page 16: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

16

STEP 6

Write system of equations as MATLAB function that accepts a scalar (time) and one column vector (y-values at the given time) and returns one column vector (y'-values at the given time).

Page 17: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

function yPrime = mySystem( t, y )yPrime = zeros( 3, 1 );yPrime(1) = y(2);yPrime(2) = y(3);yPrime(3) = -8*y(1)+6*y(2)+2*y(3)+7;

Must be column vector!

State-space form

17

can use any names

7268 3213

32

21

yyyy

yy

yy

Page 18: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

18

Van der Pol equation • Describes a type of nonconservative oscillator

with nonlinear damping• Discovered in work with electrical circuits• Used in biology as model for action potentials in

neurons• Used in seismology to model the two plates in

geological fault

01 '2'' yyyy μ is scalar for strength of damping

Page 19: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

19

Try ItConvert Van der Pol equation to state-space form

Step 1 – rename y and y' as y1 and y2

Step 2 – combine derivative of top eqn with bottom eqn to get

yy

yy

2

1

21 yy

01 '2'' yyyy

Page 20: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

20

Try ItSTEP 3

Solve original equation

for highest derivative (y'')

and substitute y1 for y

and y2 for y' on right side

01 '2'' yyyy

yyyy '2'' 1

1221

'' 1 yyyy

Page 21: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

21

Try ItStep 4

Derivative of bottom equation of

gives

y2' = y''

Substitute y2' for y''

on the left side of

to get

1221

'' 1 yyyy

yy

yy

2

1

1221

'2 1 yyyy

Page 22: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

22

Try ItStep 5

Combine and

into state-space form 212

21

,,f yyty

yy

1221

'2 1 yyyy 21 yy

1221

'2

2'1

)1( yyyy

yy

Page 23: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

23

Try ItSTEP 6

Write system of equations as MATLAB function called vanderpol1 that contains scalar μ, accepts scalar t (time) and one vector y (y-values at t), and returns one vector yPrime (y’-values at t)function yPrime = vanderpol1( t, y )mu = 1.0;yPrime(1,1) = y(2);yPrime(2,1) = mu*( 1-y(1)*y(1) )*y(2) - y(1);

1221

'2

2'1

)1( yyyy

yy

Page 24: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

24

Try ItSTEP 7

Ta-dah! Ready to solve. Well, almost...

PROBLEM

In general, there are many functions that satisfy a given ODE. Need additional information to get specific solution.

Page 25: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

State-space form

25

Questions?

Page 26: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

26

Two common ways to specify the extra information needed to produce only one solution of differential equation. Let's start with one way. It's called the

Initial Value Problem

Page 27: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

27

In initial value problem, solution of interest satisfies a specific initial condition, i.e., y = y0 at initial time t0

For state-space form, initial value problem is

y' = f(t,y) and y(t0) = y0

If f(t,y) is "sufficiently smooth", problem has exactly one solution. Generally, no analytic expression so must solve numerically

Page 28: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

28

Some kind of differential equations are stiff problems. Will discuss stiffness later. Right now, let's work on nonstiff problems

Page 29: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

29

MATLAB has three solvers for nonstiff equationsode45

– A one-step solver – in computing , needs only solution at immediately preceding time point

– Best function to apply as a "first try" for most problems.

ode23– A one-step solver– May be more efficient than ode45() at crude tolerances and in

presence of mild stiffness

ode113– A multistep solver – needs solutions at several preceding time points to

compute current solution– May be more efficient than ode45() at stringent tolerances and when

ODE function is particularly expensive to evaluate

Page 30: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

30

All MATLAB ODE functions (except ode15i) have same calling syntax:

[T,Y] = solver(odefun,tspan,y0)[T,Y] = solver(odefun,tspan,y0,options)[T,Y,TE,YE,IE] = solver(odefun,tspan,y0,options)sol = solver(odefun,[t0 tf],y0...)

Same syntax makes it very easy to try different solvers – just change solver name

Page 31: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

31

[T,Y] = solver(odefun,tspan,y0)[T,Y] = solver(odefun,tspan,y0,options)

• odefun – a function handle that evaluates the right side of the differential equations

• tspan – a vector specifying the interval of integration, [t0,tf]. The solver imposes the initial conditions at tspan(1), and integrates from tspan(1) to tspan(2)

• y0 – A vector of initial conditions• options – Structure of optional parameters that

change the default integration

Page 32: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

32

Outputs of ODE solvers[T,Y] = solver(odefun,tspan,y0)[T,Y] = solver(odefun,tspan,y0,options)[T,Y,TE,YE,IE] = solver(odefun,tspan,y0,options)

T – column vector of time points

Y – solution array– One row is solution of all elements of y at time given in T in

same row– One column is solution of one element of y for all times in T– Y(m,n) is value of yn at time tm

Will look at other outputs later

Page 33: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

33

Try ItSTEP 7

Now we're ready to solve.

Recap: solve Van der Pol eqn. with μ=1, time = [ 0 20 ] and initial conditions y(1)=2, y(2)=0 . Plot both components of y versus t.

Page 34: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

34

Try ItSTEP 7>> [ t y ] = ode45( @vanderpol1, [ 0 20 ], [ 2 0 ]' );

>> whos t y Name Size Bytes Class Attributes

t 237x1 1896 double

y 237x2 3792 double

make column vector

Page 35: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

35

Try ItSTEP 7>> plot( t, y(:,1), 'r', t, y(:,2), 'b' )>> legend( 'y_1(t)', 'y_2(t)' )

0 2 4 6 8 10 12 14 16 18 20-3

-2

-1

0

1

2

3

y1(t)

y2(t)

Page 36: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

36

Try It

Rewrite vanderpol1.m as vanderpol2.m . Make the new version of the function accept μ as the third argument. Run vanderpol2 as an anonymous function, using the same initial conditions and value of μ as before.

Page 37: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

37

Try It

function yPrime = vanderpol2( t, y, mu )yPrime(1,1) = y(2);yPrime(2,1) = mu*( 1-y(1)*y(1) )*y(2) - y(1);

1221

'2

2'1

)1( yyyy

yy

Page 38: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

38

Try ItSTEP 7>> [ t y ] = ode45( @(t,y)vanderpol2(t,y,1), [ 0 20 ], [ 2 0 ]' );

>> plot( t, y(:,1), 'r', t, y(:,2), 'b' )>> legend( 'y_1(t)', 'y_2(t)' )

0 2 4 6 8 10 12 14 16 18 20-3

-2

-1

0

1

2

3

y1(t)

y2(t)

Page 39: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

39

Try ItLet's try another initial value problem – a mass on a spring.

Page 40: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

40

Newton:Fgravity - Fspring - Foil = m∙a

m∙g – k(s+y) – c y' = m y''

m∙y'' + c∙y' + k∙y = m∙g – k∙s

Can show that m∙g = k∙s,

so

m∙y'' + c∙y' + k∙y = 0

or

0)0(

1)0(

0

y

y

ym

ky

m

cy

m

m

k k k

y=0

y0

y(t)

Oil Oil

CC

s

Page 41: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

41

STEP 1

Define

STEP 1

yy

yy

2

1

0 ym

ky

m

cy

yy

yy

2

1

Page 42: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

42

STEP 2

From

write

21 yy

STEP 2

21 yy

yy

yy

2

1

Page 43: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

43

STEP 3

Solve original equation for highest derivative (y'') and substitute y1 for y

and y2 for y' on right side

STEP 3

21

12

ym

cy

m

ky

ym

ky

m

cy

ym

ky

m

cy

0 ym

ky

m

cy

Page 44: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

44

STEP 4

From before

so y2' = y''

Substitute y2' for

y'' on the left side

STEP 4

21 ym

cy

m

ky

212 ym

cy

m

ky

yy

yy

2

1

Page 45: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

45

STEP 5

Write in form

212

21

,,f yyty

yy

STEP 5

212

21

ym

cy

m

ky

yy

212 ym

cy

m

ky 21 yy

Page 46: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

46

STEP 6

Write system of equations as MATLAB function that accepts a scalar t (time) and one vector (y-values at t) and returns one vector (y’-values at t), as shown on next slide

Page 47: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

47

STEP 6

212

21

ym

cy

m

ky

yy

function yPrime = massInOil( t, y )c = ?;k = 4;m = 1; % yPrime must be a column vectoryPrime = zeros( 2, 1 );yPrime(1) = y(2);yPrime(2) = -k*y(1)/m - c*y(2)/m;

Page 48: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

48

STEP 7

Suppose oil is thick. Qualitatively, what will behavior of mass be?

function yPrime = massInOil( t, y )c = ?;k = 4;m = 1; % yPrime must be a column vectoryPrime = zeros( 2, 1 );yPrime(1) = y(2);yPrime(2) = -k*y(1)/m - c*y(2)/m;

function yPrime = massInOil( t, y )c = 5;k = 4;m = 1; % yPrime must be a column vectoryPrime = zeros( 2, 1 );yPrime(1) = y(2);yPrime(2) = -k*y(1)/m - c*y(2)/m;

What parameter setting of c would effect this?

Page 49: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

49

STEP 7 c = 5

>> [t y] = ode45( @massInOil, [0 10], [1 0] );

>> plot(t,y(:,1))

Solution for first 10 seconds

y(0) = 1 y'(0) = 0

Page 50: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

50

TIP

If you see a lot of repetitive output in the command window when you run ode45(), you probably left the semicolon off the end of a line in your function

Example k = 4k = 4k = 4k = 4

Page 51: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

51

STEP 7

Suppose oil is thin. Qualitatively, what will behavior of mass be?

function yPrime = massInOil( t, y )c = ?;k = 4;m = 1; % yPrime must be a column vectoryPrime = zeros( 2, 1 );yPrime(1) = y(2);yPrime(2) = -k*y(1)/m - c*y(2)/m;

function yPrime = massInOil( t, y )c = 1;k = 4;m = 1; % yPrime must be a column vectoryPrime = zeros( 2, 1 );yPrime(1) = y(2);yPrime(2) = -k*y(1)/m - c*y(2)/m;

What parameter setting of c would effect this?

Page 52: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

52

STEP 7 c = 1>> [t y] = ode45( @massInOil, [0 10], [1 0] );

>> plot(t,y(:,1))

Page 53: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

53

STEP 7

Suppose we drain the tube, so there’s no oil in it. Qualitatively, what will behavior of mass be?

function yPrime = massInOil( t, y )c = ?;k = 4;m = 1; % yPrime must be a column vectoryPrime = zeros( 2, 1 );yPrime(1) = y(2);yPrime(2) = -k*y(1)/m - c*y(2)/m;

function yPrime = massInOil( t, y )c = 0;k = 4;m = 1; % yPrime must be a column vectoryPrime = zeros( 2, 1 );yPrime(1) = y(2);yPrime(2) = -k*y(1)/m - c*y(2)/m;

What parameter setting of c would effect this?

Page 54: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problem

54

STEP 7 c = 0

>> [t y] = ode45( @massInOil, [0 10], [1 0] );

>> plot(t,y(:,1))

Page 55: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Initial value problems

55

Questions so far?

Page 56: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

56

"Stiffness is a subtle, difficult, and important concept in the numerical solution of ordinary differential equations."

- Cleve Moler, inventor of MATLAB

Page 57: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

57

Three definitions of stiffness• A problem is stiff if the solution being sought varies slowly,

but there are nearby solutions that vary rapidly, so the numerical method must take small steps to obtain satisfactory results.

• A property of some differential equations in which some states change very rapidly while others may change very slowly.

• For a stiff problem, solutions can change on a time scale that is very short compared to the interval of integration, but the solution of interest changes on a much longer time scale.

Page 58: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

58

Stiffness• Depends on the differential equation, initial

conditions, and numerical solution method• Stiffness is an efficiency issue

– If you don't care how much computation time a problem takes, you don't need to worry about stiffness

– Nonstiff numerical methods can solve stiff problems – they just take a long time to do it

Page 59: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

59

Let's go back to vanderpol2(), the function we used to solve the Van der Pol equation. Let's solve it again, but with μ=1000 and t = [0 3000]. Use ode15s() and on two separate plots graph y1(t) vs. t and y2(t) vs. t

1221

'2

2'1

)1( yyyy

yy

Page 60: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

60

Try It>> [ t y ] = ode15s( ... @(t,y)vanderpol2(t,y,1000),[0 3000],[2 0]');

>> plot( t, y(:,1) )>> title( 'y_1(t) vs. t' )>> figure>> plot( t, y(:,2) )>> title( 'y_2(t) vs. t' )

Page 61: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

61

Try It

Note that y1(t) action occurs over about 800 time units but on same scale, y2(t) action is instantaneous

0 500 1000 1500 2000 2500 3000-2.5

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

y1(t) vs. t

0 500 1000 1500 2000 2500 3000-1500

-1000

-500

0

500

1000

1500

y2(t) vs. t

Page 62: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

62

Can find out how much work a solver did[t y] = solver( fun, tSpan, y0, options )

To make solver display processing statistics, set "Stats" to "on" in options by using function odeset()

For more options, type help odeset

Page 63: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

63

Try ItRun previous solution but print out statistics>> options = odeset( 'Stats', 'on' );>> [ t y ] = ode15s( @(t,y)vanderpol2(t,y,1000),... [ 0 3000 ], [ 2 0 ]', options );

591 successful steps225 failed attempts1883 function evaluations45 partial derivatives289 LU decompositions1747 solutions of linear systems

Page 64: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

64

Try ItUnfortunately, didn't show elapsed time. Run it again with tic and toc as shown:>> tic,...[ t y ] = ode15s( @(t,y)vanderpol2(t,y,1000),... [ 0 3000 ], [ 2 0 ]', options );, toc

591 successful steps225 failed attempts1883 function evaluations45 partial derivatives289 LU decompositions1747 solutions of linear systemsElapsed time is 0.286233 seconds.

Page 65: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

65

Try It (not really)Repeat previous command but use ode45 instead.>> tic, [ t y ] = ode45( ... @(t,y)vanderpol2(t,y,1000), [ 0 3000 ], ...[ 2 0 ]', options );, toc1.68411e+006 successful steps112240 failed attempts1.07781e+007 function evaluationsElapsed time is 2705.705528 seconds. = 45 minutes!

Page 66: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

66

Try ItComparison

ode45 ode15s

Successful steps 1,684,110 591

Failed attempts 112,240 225

Function evaluations 10,778,100 1883

Elapsed time (seconds) 2706 0.286

Page 67: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Stiff equations

67

Questions?

Page 68: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

68

Up to now have only dealt with equations that can be put into state-space form. Another kind of equation is the linearly implicit ODE:

M(t,y)y' = f(t,y)

where M(t,y) is a matrix. This is a generalization of state-space formulation

Page 69: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

69

Consider the following linear, implicit system

with initial conditions y1(0) = y2(0) = 0

Find the solution over [ 0 10 ] and plot both state variables on the same graph

0)sin()cos(

1)cos()sin(

2'21

'12

1'22

'11

yyyyy

yyyyy

Page 70: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

70

Example

Write in matrix

form as

or

whereNote – in this example, neither M nor f depend explicitly on t

2

1

'2

'1

12

21 1

)sin()cos(

)cos()sin(

y

y

y

y

yy

yy

),(),( ' ytfyytM

2

1

'2

'1'

12

21 1),(,,

)sin()cos(

)cos()sin(),(

y

yytf

y

yy

yy

yyytM

0)sin()cos(

1)cos()sin(

2'21

'12

1'22

'11

yyyyy

yyyyy

Page 71: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

71

Example

• Write a function for M(t,y) that takes a (scalar) t, and a vector y, the values of y at that time t, and returns the matrix M(t,y)

• Then set the “Mass” property to a handle to that function

),(),( ' ytfyytM

2

1

'2

'1'

12

21 1),(,,

)sin()cos(

)cos()sin(),(

y

yytf

y

yy

yy

yyytM

Page 72: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

72

Example

>> massFun = @(t,y) [ sin(y(1)) cos(y(2));... -cos(y(2)) sin(y(1)) ];>> options = odeset( 'Mass', massFun );>> f = @(t,y)[ 1-y(1); -y(2) ];>> [t,y] = ode45( f, [0 10], [0;0], options );

),(),( ' ytfyytM

2

1

'2

'1'

12

21 1),(,,

)sin()cos(

)cos()sin(),(

y

yytf

y

yy

yy

yyytM

Page 73: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

73

Example

>> plot(t,y)>> legend( 'y_1(t)', 'y_2(t)' )

0 1 2 3 4 5 6 7 8 9 10-0.2

0

0.2

0.4

0.6

0.8

1

1.2

y1(t)

y2(t)

Page 74: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

74

Questions?

Page 75: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

75

Usually run a simulation from a start time to a stop time. Sometimes would rather stop when something happens than when solver reaches a certain time. For example• Equations no longer valid at event

– Force of gravity between two bodies varies inversely as square of distance. As two bodies get very close, force becomes infinite

Page 76: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

76

• No longer interested in solution– If computing fall of parachutist, none but the sickest among us cares what happens after she hits the ground

• Only want to see a few cycles of a periodic solution

Page 77: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

77

MATLAB's ODE solvers have a facility for detecting and acting on events. You create a function and pass a handle to it as part of the options passed to the solver. The solver will then give you information about any events that occur and act on them, e.g., stop solving.

Page 78: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

78

The function's form is[value,isterminal,direction] = events(t,y)

value, isterminal, and direction are vectors for which the ith element corresponds to the ith event• value(i) is the value of the ith event

function. Want to make it zero• isterminal(i) = 1 if the integration is to

terminate at a zero of this event function, otherwise, 0

Page 79: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

79

[value,isterminal,direction] = events(t,y)

• direction(i) = 0 if all zeros are to be located (the default), +1 if only zeros where the event function is increasing, and -1 if only zeros where the event function is decreasing

Page 80: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

80

If you specify an events function call the solver as

[T,Y,TE,YE,IE] = ... solver(odefun,tspan,y0,options)The three additional outputs are:• TE - column vector of times at which events occur• YE - solution values corresponding to these times• IE - indexes into the vector returned by the events

function. The values indicate which event the solver detected.

If no events detected, TE, YE, IE will be empty

Page 81: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

81

Try ItA crude model for a falling body is

y'' = -1 + (y')2 with y(0)=1, y'(0)=0

When does the body splatter, i.e., for what t is y(t) = 0 ?

y(t)

y(1)

y(0)

Page 82: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

82

Try ItConvert y'' = -1 + (y')2 to state-space form:

1

1

,

,

)(1

22

2

'2

'1

22

'2

2'1

'''22

'1

'21

2'''

y

y

y

y

yy

yy

yyyy

yyyy

yy

Page 83: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

83

Try ItWrite as function for ODE and save in falling_body.mfunction yPrime = falling_body( t,y )yPrime(1,1) = y(2);yPrime(2,1) = y(2)*y(2) – 1;

1

)(1

22

2

'2

'1

2'''

y

y

y

y

yy

Page 84: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

84

Try ItWant the solver to 1. stop

2. whenever y(t) = 0 ( y1(t) = 0 )

3. from either direction

Thus the event function should befunction [ value,isterminal,direction ] = splat( t,y )isterminal = 1; % stopvalue = y(1); % when y(1) = 0direction = 0; % approached from either direction

'21

22

2

'2

'1

,

1

yyyy

y

y

y

y

Page 85: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

85

Try ItSave the function in splat.m, then>> options = odeset( 'events', @splat );>> [ t y te ye ie ] = ode45( ...@falling_body, [0 inf], [1 0]', options );>> plot( t, y(:,1) )

'21

22

2

'2

'1

,

1

yyyy

y

y

y

y

integrate to infinity to see if this sucker really stops

Page 86: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

86

Try ItCool! Stopped at y=-1.08x10-14, which is pretty close to zero. The splat took place at t=1.657

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8-0.2

0

0.2

0.4

0.6

0.8

1

1.2

X: 1.657Y: -1.082e-014

Page 87: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

87

Try ItWhen did solver stop?>> tete = 1.6575

What were the values of the y vector when it stopped?>> yeye = -0.0000 -0.9300

Which event occured?>> ieie = 1

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8-0.2

0

0.2

0.4

0.6

0.8

1

1.2

X: 1.657Y: -1.082e-014

Page 88: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Multiple Events

88

Try ItLet’s also make a note (but not stop solving) of when the parachutist’s heart rate goes above 200 beats per minute (bpm)1. Don’t stop

2. Whenever heart-beat rate goes above 200 bpm

3. In increasing direction (goes above)

Page 89: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Multiple Events

89

Try ItAssume heart beats given by

heartbeats(t) = 100 + 100*t

Save a copy of splat.m as splat2.m and rewrite as

Page 90: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Multiple Events

90

Try Itfunction [ value, isterminal, direction ] = splat2( t,y ) % first eventisterminal(1) = 1; % stopvalue(1) = y(1); % when y(1) = 0direction(1) = 0; % approached from either direction % second eventisterminal(2) = 0; % don't stopheartBeats = 100 + 100 * t; % beats per minute (bpm)value(2) = heartBeats - 200; % bpm over or under 200% only trigger when value(2) crosses zero while increasingdirection(2) = +1;

Page 91: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Multiple Events

91

Try It>> options = odeset( 'events', @splat2 );>> [ t y te ye ie ] = ode45( ...@falling_body, [0 inf], [1 0]', options );>> ieie = 2 % event 2 is heart beats > 200 1 % event 1 is hitting ground>> tete = 1.0000 % heart beats hit 200 at 1 sec 1.6575 % lands after 1.6575 seconds>> yeye = 0.5663 -0.7617 -0.0000 -0.9300

Page 92: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Events

92

Questions?

Page 93: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

93

The End

Page 94: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

94

Consider the following linear, implicit system

with initial conditions y1(0) = y2(0) = 0

Find the solution over [ 0 10 ] and plot both state variables on the same graph

0)sin()cos(

1)cos()sin(

2'21

'12

1'22

'11

yyyyy

yyyyy

Page 95: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

95

Example

Write in matrix

form as

or

where

2

1

'2

'1

12

21 1

)sin()cos(

)cos()sin(

y

y

y

y

yy

yy

)()( ' ybyyA

2

1

'2

'1'

12

21 1)(,,

)sin()cos(

)cos()sin()(

y

yyb

y

yy

yy

yyyA

0)sin()cos(

1)cos()sin(

2'21

'12

1'22

'11

yyyyy

yyyyy

Page 96: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

96

Example

If A(y) is nonsingular, can take inverse and system becomes

which is state-space form. Can now solve as before.

If A(y) is singular, solver will stop with error when attempts to take inverse.

)()(1' ybyAy

)()( ' ybyyA

2

1

'2

'1'

12

21 1)(,,

)sin()cos(

)cos()sin()(

y

yyb

y

yy

yy

yyyA

Page 97: MATLAB Ordinary Differential Equations – Part I Greg Reese, Ph.D Research Computing Support Group Academic Technology Services Miami University September.

Linearly implicit equations

97

Example>> f=@(t,y)[ sin(y(1)) cos(y(2));...-cos(y(2)) sin(y(1)) ] \ [ 1-y(1) -y(2) ]';

>> [ t y ] = ode45( f, [0 10], [ 0; 0 ] );>> plot( t, y )>> legend( 'y_1(t)',... 'y_2(t)' )

0 1 2 3 4 5 6 7 8 9 10-0.2

0

0.2

0.4

0.6

0.8

1

1.2

y1(t)

y2(t)