How to solve two differential equations using ode45.
    39 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Ebraheem Menda
 il 22 Feb 2018
  
    
    
    
    
    Commentato: Ebraheem Menda
 il 1 Lug 2021
             My system is this
x"+ x'+ x + y'=0; 
y"+ y'+ y + x'=0; 
i need to solve these differential equations using ode's.
thanks in advance.
2 Commenti
  Torsten
      
      
 il 22 Feb 2018
				You will need four initial conditions (for x,x',y,y') if you want to use ODE45 as numerical solver.
Risposta accettata
  Torsten
      
      
 il 22 Feb 2018
        fun=@(t,y)[y(2);-y(2)-y(1)-y(4);y(4);-y(4)-y(3)-y(2)];
x0=...;      %supply x(t0)
x0prime=...; %supply x'(t0)
y0=...;      %supply y(t0)
y0prime=...; %supply y'(t0)
Y0=[x0; x0prime; y0; y0prime];
tspan=[0 5];
[T,Y]=ode45(fun,tspan,Y0);
plot(T,Y(:,1))  %plot x
plot(T,Y(:,3))  %plot y
Best wishes
Torsten.
9 Commenti
  Andreas Zimmermann
 il 16 Apr 2020
				
      Modificato: Andreas Zimmermann
 il 16 Apr 2020
  
			Hi Joe,
Using Torsten's relations
x = y(1)
x' = y(2)
y = y(3)
y' = y(4)
the first line
fun=@(t,y)[y(2); -y(2)-y(1)-y(4); y(4); -y(4)-y(3)-y(2)];
can be translated to the following, using Torsten's relations:
[x'; -x'-x-y'; y'; -y'-y-x']
which is essentially
[x'; x"; y'; y"].
He got these relations by solving for x" and y":
x"+ x'+ x + y'=0; => x" = -x' -x -y' = -y(2) -y(1) -y(4)
y"+ y'+ y + x'=0; => y" = -y' -y +x' = -y(4) -y(3) -y(2)
I have tried to use ode45 to solve the SIR model from this fantastic Geogebra Tutorial: (https://youtu.be/k6nLfCbAzgo) 
% Just some start parameters and coefficients
Istart  = 0.01;
Sstart  = 0.99;
Rstart  = 0;
transm  = 3.2;
recov   = 0.23;
maxT    = 20;
% define S',I',R'
% S' = - transm * S * I
% I' = transm * S I - recov * I
% R' = recov * I
% S is y(1)
% I is y(2)
% R is y(3)
%so here fun = @(t,y)[S'; I'; R'];
fun     = @(t,y)[-transm*y(1)*y(2); (transm*y(1)*y(2))-(recov*y(2)); recov*y(2)];
% Provide the starting parameters
Y0      = [Sstart; Istart; Rstart;];
% Define the range of t
tspan   = [0 maxT];
% Magic happens and matrix Y contains S,I,R
[T,Y]   = ode45(fun,tspan,Y0);
% Plot plot
figure
plot(T,abs(Y(:,1)),'b-') % S
hold on
plot(T,abs(Y(:,2)),'r-') % I
plot(T,abs(Y(:,3)),'g-') % R
xlim([0 23])
%Hope this helps :)
% Many thanks to Torsten and Ebraheem for your very very useful discussion!
Più risposte (3)
  Abraham Boayue
      
 il 24 Feb 2018
        Hey Ebraheem There are many excellent methods that you can use to solve your problem, for instance, the finite difference method is a very powerful method to use. I can try with that.The ode45 function is a matlab built in function and was designed to solve certain ode problems, it may not be suitable for a number of problems. What are the initial values of your equations? Do you have any plot of the solution that one can use as a guide?
  Abraham Boayue
      
 il 24 Feb 2018
        The finite difference method is used to solve differential and partial equations. It is easier to implement in matlab. You can do the coding in any version of matlab, I have taken a course in numerical mathematics before and have a fairly good knowledge of how to solve such problems.
5 Commenti
  Abraham Boayue
      
 il 19 Lug 2020
        Hi Ebraheem Is there anything specific that you want me to do for you?
Vedere anche
Categorie
				Scopri di più su Ordinary Differential Equations in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!