Matt Donovan - Lab 9
ode_methods.m
a=0;
b=2;
z=2;
eflop=[];
r2flop=[];
r4flop=[];
int = [5 21 101];
num = length(int);
for i = int,
flops(0);
eul = euler_meth(a,b,i,z);
x= flops;
eflop=[eflop x];
flops(0);
r2=rk2(a,b,i,z);
x= flops;
r2flop = [r2flop x];
flops(0);
r4=rk4(a,b,i,z);
x= flops;
r4flop = [r4flop x];
h=(b-a)/(i-1);
t=a:h:b;
y=t+2*exp(-2 .*t);
figure, clf reset, hold on
plot(t,y);
plot(t,eul,':');
plot(t,r2, '--');
plot(t,r4, '-.');
end
fprintf(1, 'Intervals Euler Flops Rk2 Flops Rk4 Flops\n');
for k =1:num,
fprintf(1,' %5d %10d %10d %10d\n',int(k)-1,eflop(k),r2flop(k),r4flop(k));
end
figure(1);
title('ODE graph with 5 points');
xlabel(' t');
ylabel(' y(t)');
figure(2);
title('ODE graph with 21 points');
xlabel(' t');
ylabel(' y(t)');
figure(3);
title('ODE graph with 101 points');
xlabel(' t');
ylabel(' y(t)');
euler_meth.m
function[values] = euler_meth(a,b,n,x);
k=0;
values(1)=x;
h = (b-a)/(n-1);
t=a;
for k=2:n,
x=x+h*func(t,x);
t=t+h;
values =[values x];
end
rk2.m
function[values] = rk2(a,b,n,y);
clc;
values(1) = y;
h = (b-a)/(n-1);
t = a;
for k = 2:n,
f1 = h*func(t,y);
f2 = h*func((t+h),(y+f1));
y = y + (f1 +f2)/2;
t = t + h;
values = [values y];
end
rk4.m
function[values] = rk4(a,b,n,y);
clc;
values(1) = y;
h = (b-a)/(n-1);
t = a;
for k = 2:n,
f1 = h*func(t,y);
f2 = h*func((t+h/2),(y+f1/2));
f3 = h*func((t+h/2),(y+f2/2));
f4 = h*func((t+h),(y+f3));
y = y + (f1 +2*f2 + 2*f3 +f4)/6;
t = t+h;
values = [values y];
end