# How to solve an ODE with an array using ODE45?

55 views (last 30 days)
DIP on 20 Feb 2017
Commented: DIP on 6 Mar 2017
I have an ODE, udY/dx=S , where Y and S are arrays , how do I solve it using ODE45 ???
Jan on 20 Feb 2017
@DIP: Please provide more details. "velocity" does not help, because Matlab does not care about the physical meaning of variables. Post the function you want to integrate, preferrably in valid Matlab code. If it is written correctly, all you have to do is calling ode45.

DIP on 6 Mar 2017
% Solution 4: Chemical Species Concentration as a Function of Axial Distance
clc
clear
% Constants
L = 0.12;
N = 39;
T(1:N) = 750;
delx = L/(N-1);
xspan = 0:delx:0.12;
C0 = [0.52 0.99 0.0];
% ODE 45 Code
[x,C]=ode45('hw2_4',xspan,C0);
% Plots
subplot(2,1,1);
plot(x,C(:,1),'b--o',x,C(:,2),'g--+',x,C(:,3),'r--s')
legend('C_{CO}','C_{O2}','C_{CO2}')
xlabel('Axial (x) Direction [m]')
ylabel('Concentrations [mol/m^3]')
title('Molar Concentration vs Distance')
Function File:
function dcdx=hw2_4(x,C)
% Constants
u = 1.5;
A = 2.2e10;
Ea = 130000;
Ru = 8.3145;
T = 750;
% Rate Constants
R(1) = -A * (exp(-Ea / (Ru*T))) * C(1) * sqrt(C(2));
R(2) = 0.5 * R(1);
R(3) = -R(1);
dcdx = [R(1);R(2);R(3)]/u;
DIP on 6 Mar 2017
Thank you Jan, Star Strider,

Jan on 20 Feb 2017
Edited: Jan on 21 Feb 2017
ode45 works with vectors, therefor if Y is a vector, the provided examples in the docs should help: https://www.mathworks.com/help/matlab/ref/ode45.html#examples . If not, please post more details by editing the question.
function main
% Initial Conditions
Cco(1) = 0.52; %Y1
Co2(1) = 0.99; %Y2
Ch2o(1) = 0; %Y3
L = 0.12;
N = 39;
delx = L/(N-1);
x = 0:delx:0.12;
C0 = [Cco; Co2; Ch2o];
[x,C] = ode45(@DiffEQ, x, C0);
plot (x,C)
end
function dC = DiffEQ(x, C)
u = 1.5;
A = 2.2e10;
Ea = 130;
Ru = 8.3145;
T = 750;
Cco = C(1);
Co2 = C(2);
Ch2o = C(3);
Rco = -A * (exp(-Ea / (Ru*T))) * Cco * sqrt(Co2); %S1
Ro2 = 0.5 * Rco; %S2
Rh2o = -Rco; %S3
dC = [Rco; Ro2; Rh2o] / u;
end
This needs a lot of processing time. Using ode15s was successful in less than a second (are you sure the system is not stiff). The diagram looks nicer, if you define:
x = [0, 0.12];
Jan on 21 Feb 2017
@DIP: @(x,C) R/u is constant. Changes in the coordinates are not considered, because all calls of "R/u" reply the same value. Better use a normal function instead of a anonymous function. I've showed you already, how to do this.
Concerning:
documentation for the last line of your main function
do you mean "plot(x,C)"?

Star Strider on 20 Feb 2017
See if the approach in Monod kinetics and curve fitting will do what you want.
You will have to adapt it to your data and differential equations. The essential design should work.