Simple system of ODES with starting condition

1 Ansicht (letzte 30 Tage)
Velimir Corovic
Velimir Corovic am 9 Dez. 2019
Kommentiert: Rena Berman am 12 Dez. 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 Kommentare
Star Strider
Star Strider am 12 Dez. 2019
If you want to re-post the corrected question, please do so.
Rena Berman
Rena Berman am 12 Dez. 2019
(Answers Dev) Restored edit

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Star Strider
Star Strider am 9 Dez. 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 Kommentar
Star Strider
Star Strider am 10 Dez. 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.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by