Simple system of ODES with starting condition

1 visualización (últimos 30 días)
Velimir Corovic
Velimir Corovic el 9 de Dic. de 2019
Comentada: Rena Berman el 12 de Dic. de 2019
opts = odeset('RelTol',1e-15,'AbsTol',1e-20);
X0 = [ 0.9 0.1 0 ];
[T X] = ode45(@(t,X)returnDerivative(t, X), [0 10], X0,opts) ;
plot(T,X);
function dXdt = returnDerivative(t, y)
dXdt = [-1/2*y(1)*y(3) ; 1/3*y(3) ; 1/2*y(1)*y(3) - 1/3*y(3)];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I am trying to solve this simple system of ODEs but it returns me constant solutions for X(1),X(2) and X(3)
and dimension of X is only 41 x 3 .Can someone explain me where is my mistake?
And what is in general best way to solve this kind of system of ODEs
  4 comentarios
Star Strider
Star Strider el 12 de Dic. de 2019
If you want to re-post the corrected question, please do so.
Rena Berman
Rena Berman el 12 de Dic. de 2019
(Answers Dev) Restored edit

Iniciar sesión para comentar.

Respuestas (1)

Star Strider
Star Strider el 9 de Dic. de 2019
The only (relative) mistake I can see is that it is not good to use global variables. Pass the values as extra parameters instead.
This works:
b=1/2;
k=1/3;
opts = odeset('RelTol',1e-15,'AbsTol',1e-20);
X0 = [ 1 0.00001 0 ];
[T X] = ode45(@(t,X)returnDerivative(t, X, b, k), [0 10], X0,opts) ;
plot(T,X);
function dXdt = returnDerivative(t, y, b, k) %X je vektor 4Nx1
dXdt = [-1/2*y(1)*y(3) ; 1/3*y(3) ; 1/2*y(1)*y(3) - 1/3*y(3)];
end
What result were you expecting?
  1 comentario
Star Strider
Star Strider el 10 de Dic. de 2019
I cannot find anything wrong with your code.
If you are copying a system of ODEs and may haave mis-coded them, please post the original (symbolic) expressions and initial conditions. I will see if I can find the error.

Iniciar sesión para comentar.

Categorías

Más información sobre Ordinary Differential Equations en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by