## MA/CS 371 - Lab 9

Comparing Three Different Methods on an ODE

### Section 1: Introduction

In this lab you will use Euler's Method, the second-order Runge-Kutta
method, and the classical fourth-order Runge-Kutta method to calculate
approximate solutions to a given ODE.
If you have not already done so, create a directory for this lab and
copy the lab 9 files into it. If you start off in your home directory you
can do the following:

mkdir ~/cs371/lab9
cd ~/cs371/lab9
cp ~cs371/lab9/* .

and (as always) don't forget to type that last period.

### Section 2: Topics for Lecture

No new MATLAB tricks are required for this lab so there will be no
lecture.
### Section 3: The ODE

The ODE we will be solving in this lab is:
y' = 2y - 2t + 1
y(0) = 2

Normally we use an ODE solver when we can't solve the equation
analytically. In this case, since we're testing various methods,
we've chosen a function whose answer is known. In this case, you
should check that the function
y = t + 2*exp(-2*t)

is the correct solution.
I have supplied the one-line function **func.m** which you can call
as follows:

y_prime = func(y,t)

so that when you write your ODE solvers you can have them call
**func.m** rather than have a hard coded function inside them.
### Section 4: The Three Methods

Write three MATLAB functions: **euler_meth.m**, **rk2.m**, and
**rk4.m**. Each should take four input parameters: the left and
right endpoints of the interval, the number of steps, and the value
of the function at the left endpoint. Each function should
output a vector of approximate function values at the indicated
points. So for example after the call
values = euler_meth(0,2,21,0);

the output variable "values" should be a 21-element row vector with
the approximate function values at t = [0 0.1 0.2 ... 2].
Pseudocode for **euler_meth** is available on page 328 of the text and
**rk4** is on pp. 339-340. The text does not include pseudocode
for the second-order Runge-Kutta method but you should be able to
work it out from the description on pp. 337-338 and by similarity with
the other programs.

**NOTE: You will have to restructure the pseudocode a little bit in
order to return the answer as a vector.**

### Section 5: Running your programs

Write a script file **ode_methods.m** which will do the following:
- Run each ODE solver (euler_meth, rk2, and rk4) on the function in
the range [0,2] with 5, 21, and 101 points (4, 20, and 100 intervals).
- Produce a table showing how many
**flops** each method requires
with each number of intervals.
- Produce three graphs - one for the 5-point case, one for the
21-point case, and one for the 101-point case - where each graph
plots:
- the true solution as a solid line
- the
**euler_meth** solution as a dotted line (plot symbol ":")
- the
**rk2** solution as a dashed line (plot symbol "--")
- the
**rk4** solution as a dot-dash line (plot symbol "-.")

Make sure that each graph has an appropriate **title**.

### Section 6: Turning In Your Work

When your **euler_meth.m**, **rk2.m**, **rk4.m**, and
**ode_methods.m** files are ready, type
~cs371/submit lab9

These programs will be due by 5:45pm on Thursday, April 18.
This
lab's question.