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.