ode45 with multiple variables

94 views (last 30 days)
Penglin Cai
Penglin Cai on 10 Jun 2020
Commented: madhan ravi on 10 Jun 2020
How can l solve the system with multiple variables using ode45? For example l want to solve the following system for variables x1 x2 y1 y2 with respect to time t:
x1'=x2/4 - (5*x1)/16 + (15*y1)/16 - (3*y2)/4 - x1*(x1^2 + y1^2 - 1) - 3*y1*(x1^2 + y1^2)
y1'= (3*x2)/4 - (15*x1)/16 - (5*y1)/16 + y2/4 + 3*x1*(x1^2 + y1^2) - y1*(x1^2 + y1^2 - 1)
x2'=x1/8 - (5*x2)/16 + x3/8 - (3*y1)/8 + (15*y2)/16 - (3*y3)/8 - x2*(x2^2 + y2^2 - 1) - 3*y2*(x2^2 + y2^2)
y2'=(3*x1)/8 - (15*x2)/16 + (3*x3)/8 + y1/8 - (5*y2)/16 + y3/8 + 3*x2*(x2^2 + y2^2) - y2*(x2^2 + y2^2 - 1)
My question is that is there a simple way to repersent the variables x1 y1 x2 y2 when use ode45 to solve the equations in time rather than defining each variable as A(1)=x1,A(2)=y1A(3)=x2,A(4)=y2
Is there a approach that allows me to:
f=@(t,x1,y1,x2,y2) ...............
[t,R]=(f,tspan,initial condition);
So that i will not need to repersent each variable as the elements in the matrix A. Please help me, thank you very much.

Accepted Answer

madhan ravi
madhan ravi on 10 Jun 2020
Below is the right way to do , but maybe you're looking for matlabFunction()?
Y = zeros(4,1);
Y(1)=x1
Y(2)=y1
Y(3)=x2
Y(4)=y2
  4 Comments
Bjorn Gustavsson
Bjorn Gustavsson on 10 Jun 2020
If you definitely want to use the variable x1 y1 x2 y2 in your ODE-function (there are often decent enough reasons for this in terms of readability), you simply do something like this up top in your ODE-function:
function dAdt = yourODEfcn(t,A)
x1 = A(1);
x2 = A(2);
y1 = A(3);
y2 = A(4);
% etc
% Then remaining code here
end
madhan ravi
madhan ravi on 10 Jun 2020
Thank you Bjorn was thinking to write in that way but somehow messed it up xD.

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!