- #1
ver_mathstats
- 260
- 21
- Homework Statement
- Integration of a problem using Matlab ode45 and matlab ode23, we need to see it for a variety of different error tolerances. The numbers are below, I've included a picture to keep it neater.
- Relevant Equations
- Matlab ODE45
My code is as follows: but when I use the function in my command window exactsol(t) and input a tolerance but there is an error in LINE 19 saying unrecognized ivpfun, could someone help me fix it as I am unsure of how to proceed from here.
Matlab:
function y = exactsol(t)
y = zeros (2,1);
y(1) = exp(-0.1*t) + exp(-200*t);
y(2) = exp(-200*t);
clear;
clf
global no_fcn;
T0 = [0 100];
y0 = [2, 1];
tol = 1;
fprintf ('*** \t ode45 \t ***\n');
fprintf ('tol\t error\t steps\t ave step \t fcn eval\t time \n');
for i=1:12
no_fcn = 0;
tol = tol/10;
tolerance(i) = tol;
options=odeset('AbsTol', tol);
ts = cputime;
[t,y]=ode45(@ivpfun, T0, y0, options);
time(i) = cputime - ts;
fcn_eval(i) = no_fcn;
error (i) = norm(y(end,:) - exactsol(t(end)));
h = t(2:end) - t(1:end-1);
if (i == 7)
plot (t(1:end -1), h)
ylabel ('stepsize');
xlabel ('t');
title ('ode45, tol = 1e-7');
print ’ode45.ps’
end
steps(i) = length(h);
ave_step(i) = sum(h)/steps(i);
fprintf ('% .0e\t%.2e\t% 5d\t% .2e\t% 5d \t %.1e\n', tolerance(i), error(i), steps(i), ave_step(i), fcn_eval(i), time(i));
end
tol = 1;
fprintf ('*** \t ode23s \t ***\n');
fprintf ('tol\t error\t steps\t ave step \t fcn eval\t time \n');
for i=1:12
no_fcn = 0;
tol = tol/10;
tolerance(i) = tol;
options=odeset('AbsTol', tol);
ts = cputime;
[t,y]=ode23s(@ivpfun, T0, y0, options);
time(i) = cputime - ts;
fcn_eval(i) = no_fcn;
error (i) = norm( y(end ,:)'- exactsol( t(end) ) );
h = t(2:end) - t(1:end -1);
if (i == 7)
plot (t(1:end -1), h)
ylabel ('stepsize');
xlabel ('t');
title ('ode23a, tol = 1e-7');
print ’ode23.ps’
end
steps(i) = length(h);
ave_step(i) = sum(h)/steps(i);
fprintf ('% .0e\t%.2e\t% 5d\t% .2e\t% 5d \t %.1e\n', tolerance(i), error(i),steps(i), ave_step(i), fcn_eval(i), time(i));
end