Solving An IVP on Matlab with ODE 45 with different tolerances

In summary, the conversation is about a code that is giving an error on line 19 saying "unrecognized ivpfun." The person is looking for help in fixing the error as they are unsure of how to proceed. They are also discussing defining a function called "ivpfun" and are using their professor's guide as a reference.
  • #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
Screen Shot 2022-12-05 at 1.18.19 PM.png


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
 
Physics news on Phys.org
  • #2
You haven't defined ivpfun. Read the documentation for examples of how to define a function.
 
  • #3
pasmith said:
You haven't defined ivpfun. Read the documentation for examples of how to define a function.
Yes sorry I was looking at that afterwards, I think I'm just struggling with now where to define it. function dydt = ivpfun(t,y) would be my function right? Sorry I am using my professors guide as an example so that's why I am a little confused.
 

Similar threads

Back
Top