Using ODE45 for chemical reactions: Error using VERTCAT

I have a system of ODEs for a system of chemical reactions and I can't seem to find the route of this error: Error using VERTCAT. Simply can't work out why the dimensions are not constant.
Here is the code that defines the reactions:
function dcdt = reactions(t,c)
global k1 k2 k3 k4 k5 k6 k7
% REACTIONS
% 1. [A] + hv -k1-> [A] + [B]
% 2. [B] + [C] -k2-> [D]
% 3. [D] + hv -k3-> [C] + [E]
% 4. [C] + [E] -k4-> [D]
% 5. [B] + [B] -k5-> [B]
% 6. [B] + [D] -k6-> [F]
% 7. [B] + [D] -k7-> [G]
% ODE
% d[A]/dt = -k1[A][hv] + k1[A][hv]
% d[B]/dt = k1[A][hv] - k2[B][C] - k5[B][B] - k5[B][B] + k5[B][B] - k6[B][D] - k7[B][D]
% d[C]/dt = -k2[B][C] + k3[D][hv] - k4[C][E]
% d[D]/dt = k2[B][C] - k3[D][hv] + k4[C][E] - k6[B][D] - k7[B][D]
% d[E]/dt = k3[D][hv] - k4[C][E]
% d[F]/dt = k6[B][D]
% d[G]/dt = k7[B][D]
dcdt = [-k1*c(1)*1 + k1*c(1); ...
k1*c(1)*1 - k2*c(2)*c(3) - k5*c(2)*c(2) - k5*c(2)*c(2) + k5*c(2)*c(2) - k6*c(2)*c(4) -k7*c(2)*c(4); ...
-k2*c(2)*c(3) + k3*c(4)*1 - k4*c(3)*c(5); ...
k2*c(2)*c(3) -k3*c(4)*1 + k4*c(3)*c(5) - k6*c(2)*c(4) - k7*c(2)*c(4); ...
k3*c(4)*1 - k4*c(3)*c(5); ...
k6*c(2)*c(4); ...
k7*c(2)*c(4)];
The main file reads:
% globals
global k1 k2 k3 k4 k5 k6 k7;
% Set rates
k1 = 1;
k2 = 2;
k3 = 3;
k4 = 4;
k5 = 5;
k6 = 6;
k7 = 7;
% Set duration
tspan = [0 100];
% Initial concentrations
c0 = [1 2 3 4 5 6 7];
% define method
[t,c] = ode45('grs', tspan, c0);
Most probably something silly but it has me stumped. I know the ODE can be slightly simplified but I'm not sure why this would cause the problem. Does anyone have any insight? Or a link to a good tutorial that will put me back on the right path?
Thanks in advance for any help you can provide, Dan

回答 (1 件)

Walter Roberson
Walter Roberson 2011 年 7 月 15 日

0 投票

Change your line
k1*c(1)*1 - k2*c(2)*c(3) - k5*c(2)*c(2) - k5*c(2)*c(2) + k5*c(2)*c(2) - k6*c(2)*c(4) -k7*c(2)*c(4)
to
k1*c(1)*1 - k2*c(2)*c(3) - k5*c(2)*c(2) - k5*c(2)*c(2) + k5*c(2)*c(2) - k6*c(2)*c(4) - k7*c(2)*c(4)
Notice the extra space after the last negative sign. With the spacing you had, the parser was interpreting the line as designating a row with two values, the first one being (k1*c(1)*1 - k2*c(2)*c(3) - k5*c(2)*c(2) - k5*c(2)*c(2) + k5*c(2)*c(2) - k6*c(2)*c(4)) and the second one being (-k7*c(2)*c(4))
Unary minus binds more tightly than subtraction.

3 件のコメント

Dan Pearce
Dan Pearce 2011 年 7 月 15 日
Thanks for your time Walter.
Made that change but still get the same error...is this my mistake? Or something else you can see that looks crooked?
Dan
Walter Roberson
Walter Roberson 2011 年 7 月 15 日
4th line, second term, "-k3*c(4)*1" with no space after the "-"
Dan Pearce
Dan Pearce 2011 年 7 月 15 日
Thanks again Walter. I had a feeling it would be something this silly!

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

カテゴリ

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

質問済み:

2011 年 7 月 14 日

Community Treasure Hunt

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

Start Hunting!

Translated by