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 日

0 投票

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 件のコメント

Rick
Rick 2014 年 11 月 2 日
編集済み: Rick 2014 年 11 月 2 日
so when doing coupled ODE's, then you want the variables in the same array, instead of trying to have two separate ode45 calls like I was doing at first? Where was I going wrong in my method?
Zoltán Csáti
Zoltán Csáti 2014 年 11 月 2 日
In general, a coupled differential equation system can not be decoupled. So yes, all the dependent variables are put into a vector. Your method was wrong because you could not decouple the equations.
Rick
Rick 2014 年 11 月 2 日
Thank you!
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 日

0 投票

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 日

0 投票

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.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeProgramming についてさらに検索

タグ

質問済み:

2014 年 11 月 2 日

コメント済み:

2017 年 10 月 5 日

Community Treasure Hunt

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

Start Hunting!

Translated by