フィルターのクリア

Coupled ODE with ode45

18 ビュー (過去 30 日間)
Rick
Rick 2014 年 11 月 2 日
コメント済み: santosh kumar 2017 年 10 月 5 日
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 Center および File ExchangeOrdinary Differential Equations についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by