Help with solving systems differential equations

Hello everyone,
I have the following set of coupled first-order differential equations:
dA/A+dB/B=0
-dC-dD/kn1=R*A*dA
kn2*dE=-A*dA
dC/C=dE/E+dB/B
ds=kn2*dE/E-kn3*dC/C
dh=kn2*dE
dD/kn1=kn4*B*A^2/2/kn5
Where kn1,....kn5 are known parametres
I tried using the method that use here https://es.mathworks.com/matlabcentral/answers/514307-solve-numerically-a-system-of-first-order-differential-equations but matlab say it's unable to result it
I was wondering which could be a good attempt to solve numerically this system of differential equations.
Any suggestion?

답변 (1개)

syms A(t) B(t) C(t) D(t) E(t) h(t) s(t)
syms kn1 kn2 kn3 kn4 kn5 R
dA = diff(A);
dB = diff(B);
dC = diff(C);
dD = diff(D);
dE = diff(E);
ds = diff(s);
dh = diff(h);
eqn1 = dA/A + dB/B == 0
eqn1(t) = 
eqn2 = -dC - dD/kn1 == R * A * dA
eqn2(t) = 
eqn3 = kn2*dE == -A*dA
eqn3(t) = 
eqn4 = dC/C == dE/E + dB/B
eqn4(t) = 
eqn5 = ds == kn2 * dE/E - kn3 * dC/C
eqn5(t) = 
eqn6 = dh == kn2*dE
eqn6(t) = 
eqn7 = dD/kn1 == kn4*B*A^2/2/kn5
eqn7(t) = 
eqns = [eqn1,eqn2,eqn3,eqn4,eqn5,eqn6,eqn7].'
eqns(t) = 
fcns = [A(t),B(t),C(t),D(t),E(t),h(t),s(t)];
[M, F] = massMatrixForm(eqns, fcns)
M = 
F = 
%convert matrix form into function of variables
syms t x [1 7]
Q = subs(M*ones(7,1)-F, fcns, x)
Q = 
%parameter values for demonstration purposes
kn_vals = rand(1,5)
kn_vals = 1×5
0.8901 0.1594 0.4955 0.6421 0.5689
R_vals = rand*10
R_vals = 7.3070
%create a function handle
obj = matlabFunction(subs(Q,[kn1,kn2,kn3,kn4,kn5,R], [kn_vals,R_vals]), 'vars', {t, x(:)})
obj = function_handle with value:
@(in1,in2)[1.0./in2(1,:)+1.0./in2(2,:);in2(1,:).*(-7.306962374164408)-2.123443587802794;in2(1,:)+1.594441238491097e-1;-1.0./in2(2,:)+1.0./in2(3,:)-1.0./in2(5,:);4.95537979655735e-1./in2(3,:)-1.594441238491097e-1./in2(5,:)+1.0;8.405558761508903e-1;in2(1,:).^2.*in2(2,:).*(-5.643850562679325e-1)+1.123443587802794]
%initial conditions for demonstration purposes
x0 = rand(1,7)
x0 = 1×7
0.7536 0.2815 0.8073 0.9225 0.3860 0.4098 0.0463
%run the function
[t,X] = ode45(obj, [0 0.015], x0);
plot(t,X)
For the random coefficients that I put in, you cannot get much further than this; shortly after this point, it fails integration, and that happens for both ode45() and ode23s()

댓글 수: 2

Hi, thanks for your answer. I try do it with the real values and got this error:
Error using sym/subs>normalize (line 240)
Entries in second argument must be scalar.
Error in sym/subs>mupadsubs (line 166)
[X2,Y2,symX,symY] = normalize(X,Y); %#ok
Error in sym/subs (line 154)
G = mupadsubs(F,X,Y);
Error in resolver (line 40)
obj = matlabFunction(subs(Q,[kn1,kn2,kn3,kn4,kn5], [kn_vals]), 'vars', {t, x(:)})
This is the code that I use:
syms A(t) B(t) C(t) D(t) E(t) h(t) s(t)
syms kn1 kn2 kn3 kn4 kn5 R
dA = diff(A);
dB = diff(B);
dC = diff(C);
dD = diff(D);
dE = diff(E);
ds = diff(s);
dh = diff(h);
eqn1 = dA/A + dB/B == 0
eqn2 = -dC - dD/kn1 == B * A * dA
eqn3 = kn2*dE == -A*dA
eqn4 = dC/C == dE/E + dB/B
eqn5 = ds == kn2 * dE/E - kn3 * dC/C
eqn6 = dh == kn2*dE
eqn7 = dD/kn1 == kn4*B*A^2/2/kn5
eqns = [eqn1,eqn2,eqn3,eqn4,eqn5,eqn6,eqn7].'
fcns = [A(t),B(t),C(t),D(t),E(t),h(t),s(t)];
[M, F] = massMatrixForm(eqns, fcns)
%convert matrix form into function of variables
syms t x [1 7]
Q = subs(M*ones(7,1)-F, fcns, x)
%parameter values for demonstration purposes
kn1= 0.001963;
kn2= 1005;
kn3= 287;
kn4= 0.023;
kn5= 0.05;
kn_vals = [kn1 kn2 kn3 kn4 kn5]
%create a function handle
obj = matlabFunction(subs(Q,[kn1,kn2,kn3,kn4,kn5], [kn_vals]), 'vars', {t, x(:)})
%initial conditions for demonstration purposes
x0 = [85 1.703 220000 0 450 0 0];
%run the function
[t,X] = ode45(obj, [0 0.0005], x0);
plot(X,t)
syms A(t) B(t) C(t) D(t) E(t) h(t) s(t)
syms kn1 kn2 kn3 kn4 kn5 R
dA = diff(A);
dB = diff(B);
dC = diff(C);
dD = diff(D);
dE = diff(E);
ds = diff(s);
dh = diff(h);
eqn1 = dA/A + dB/B == 0
eqn2 = -dC - dD/kn1 == B * A * dA
eqn3 = kn2*dE == -A*dA
eqn4 = dC/C == dE/E + dB/B
eqn5 = ds == kn2 * dE/E - kn3 * dC/C
eqn6 = dh == kn2*dE
eqn7 = dD/kn1 == kn4*B*A^2/2/kn5
eqns = [eqn1,eqn2,eqn3,eqn4,eqn5,eqn6,eqn7].'
fcns = [A(t),B(t),C(t),D(t),E(t),h(t),s(t)];
[M, F] = massMatrixForm(eqns, fcns)
%convert matrix form into function of variables
syms t x [1 7]
Q = subs(M*ones(7,1)-F, fcns, x)
%parameter values for demonstration purposes
Kn1= 0.001963;
Kn2= 1005;
Kn3= 287;
Kn4= 0.023;
Kn5= 0.05;
kn_vals = [Kn1 Kn2 Kn3 Kn4 Kn5]
%create a function handle
obj = matlabFunction(subs(Q,[kn1,kn2,kn3,kn4,kn5], [kn_vals]), 'vars', {t, x(:)})
%initial conditions for demonstration purposes
x0 = [85 1.703 220000 0 450 0 0];
%run the function
[t,X] = ode45(obj, [0 0.0005], x0);
plot(t,X)

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Formula Manipulation and Simplification에 대해 자세히 알아보기

질문:

2021년 7월 14일

댓글:

2021년 7월 27일

Community Treasure Hunt

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

Start Hunting!

Translated by