Solving An IVP on Matlab with ODE 45 with different tolerances

  • Thread starter Thread starter ver_mathstats
  • Start date Start date
  • Tags Tags
    Ivp Matlab Ode
Click For Summary
The discussion centers on an error encountered while using MATLAB's ode45 function due to an undefined function, ivpfun. The user is unsure where to define this function, which is necessary for solving the initial value problem (IVP). A suggested definition for ivpfun is provided, indicating it should be structured as "function dydt = ivpfun(t,y)". The user is following a professor's guide, leading to some confusion about the implementation. Clarifying the function definition is essential for resolving the error and successfully running the code.
ver_mathstats
Messages
258
Reaction score
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
You haven't defined ivpfun. Read the documentation for examples of how to define a function.
 
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.
 
Thread 'Why wasn’t gravity included in the potential energy for this problem?'
I’m looking at the attached vibration problem. The solution in the manual includes the spring potential energy but does NOT include the gravitational potential energy of the hanging mass. Can someone explain why gravitational potential energy is not included when deriving the equation of motion? I tried asking ChatGPT but kept going in circles and couldn't figure out. Thanks!

Similar threads

  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
2
Views
3K
Replies
2
Views
1K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K