Coupled ODE with ode45

54 次查看(过去 30 天)
Hello, I am trying to solve these two coupled differential equations, but I can't seem to get it to work. I always have difficulty using ODE45...but why isn't the variable X being recognized? The image shows the differential equations I am trying to solve using MATLAB
alpha = 0.001; % L^-1
FA0 = 2.5; % mol/min
CA0 = 0.305; % mol/L
eps = 2;
k = 0.044;
CA = @(y,X) CA0*(1-X).*y./(1+eps*X);
rA = @(y,X) -k*CA(y,X);
vSpan = [0 500]; % L
dXdV = @(V,X) -rA(y,X)/FA0;
dydV = @(V,y) -alpha*(1+eps.*X)./(2*y);
[V, Y] = ode45(dydV,vSpan,1);
[V, X] = ode45(dXdV,vSpan,0);
But this is the error I encounter
Undefined function or variable 'X'.
Error in @(V,y)-alpha*(1+eps.*X)./(2*y)
Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn,
...

采纳的回答

Zoltán Csáti
Zoltán Csáti 2014-11-2
I found the mistake. It was a sign. :) The correct function is
function dz = myode(v,z)
alpha = 0.001;
C0 = 0.3;
esp = 2;
k = 0.044;
f0 = 2.5;
dz = zeros(2,1);
dz(1) = k*C0/f0*(1-z(1)).*z(2)./(1+esp*z(1));
dz(2) = -alpha*(1+esp*z(1))./(2*z(2));
  5 个评论
faiz islam
faiz islam 2016-1-24
@Zoltan ,i tried it but where is "z" defined?i got error.can you share full code?
faiz
santosh kumar
santosh kumar 2017-10-5
to define a function, use "syms function" example: to define x y z syntax: "syms x y z"

请先登录,再进行评论。

更多回答(2 个)

Zoltán Csáti
Zoltán Csáti 2014-11-2
On line dydV = @(V,y) -alpha*(1+eps.*X)./(2*y); X is not included. I would solve it as a coupled system or solve it analytically by hand. I don't see the impact of C in the differential equations. Is C needed?
  1 个评论
Rick
Rick 2014-11-2
the Concentration (CA) is needed for rA, which is in the dXdV differential equation

请先登录,再进行评论。


Zoltán Csáti
Zoltán Csáti 2014-11-2
Code your function as follows.
function dz = myode(v,z)
alpha = 0.001;
C0 = 0.3;
esp = 2;
k = 0.044;
f0 = 2.5;
dz = zeros(2,1);
dz(1) = k*C0/f0*(1-z(1)).*z(2)./(1-esp*z(1));
dz(2) = -alpha*(1+esp*z(1))./(2*z(2));
Then call it as
[v z] = ode45(@myode,[0 500],[0 1]);
  2 个评论
Rick
Rick 2014-11-2
use plot(v,z) and you will see what the heck is going on with one of the functions. It is oscillating like crazy
Zoltán Csáti
Zoltán Csáti 2014-11-2
Yes, I plotted it. It is very sensitive to the parameters. Try different parameter values.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by