Matlab 为什么这个ode系统解算器不工作?

Matlab 为什么这个ode系统解算器不工作?,matlab,ode,Matlab,Ode,它返回以下错误: syms a(t) b(t) c(t) d(t) e(t) f(t) S = dsolve( diff(a) == -kd*a*b^2, ... diff(b) == -kf*b*c^2, ... diff(c) == kd*a*b^2 - ke*a*d, ... diff(d) == kd*a*b^2, ... diff(e) == -ke*a*d, ... diff(f) ==

它返回以下错误:

syms a(t) b(t) c(t) d(t) e(t) f(t)

S = dsolve(
        diff(a) == -kd*a*b^2, ...
        diff(b) == -kf*b*c^2, ...
        diff(c) == kd*a*b^2 - ke*a*d, ...
        diff(d) == kd*a*b^2, ...
        diff(e) == -ke*a*d, ...
        diff(f) == kf*b*c^2)

这是一个非线性的常微分方程组。如果你有它,你可以试试(它在符号数学方面往往比MATLAB好):

(我无法对此进行测试,因为对于免费版本的:,输入太长)

无论如何,在MATLAB中进行数值计算很容易:

DSolve[{a'(t) = -k*d(t)*a(t)*b(t)^2, b'(t) = -k*f(t)*b(t)*c(t)^2, c'(t) = k*d(t)*a(t)*b(t)^2 - k*e(t)*a(t)*d(t), d'(t) = k*d(t)*a(t)*b(t)^2, e'(t) = -k*e(t)*a(t)*d(t), f(t) = k*f(t)*b(t)*c(t)^2}, {a(t),b(t),c(t),d(t),e(t),f(t)}, t]
我得到的一个更有趣的解决方案是:


出于好奇:这些方程描述了什么?我想说的是发生化学反应的物质的浓度,但这会很奇怪(对于一些初始值,你会发现负浓度,奇点等,这是你在这样的系统中无法预料的,所以…我的好奇心被激发了:)

这个非线性常微分方程组。如果你有它,你可以试试(它在符号数学方面往往比MATLAB好):

(我无法对此进行测试,因为对于免费版本的:,输入太长)

无论如何,在MATLAB中进行数值计算很容易:

DSolve[{a'(t) = -k*d(t)*a(t)*b(t)^2, b'(t) = -k*f(t)*b(t)*c(t)^2, c'(t) = k*d(t)*a(t)*b(t)^2 - k*e(t)*a(t)*d(t), d'(t) = k*d(t)*a(t)*b(t)^2, e'(t) = -k*e(t)*a(t)*d(t), f(t) = k*f(t)*b(t)*c(t)^2}, {a(t),b(t),c(t),d(t),e(t),f(t)}, t]
我得到的一个更有趣的解决方案是:


出于好奇:这些方程描述了什么?我想说的是发生化学反应的物质的浓度,但这很奇怪(对于某些初始值,你会发现负浓度、奇点等,这是在这样的系统中你无法预料的,所以…我的好奇心被激发了:)

…你为什么感到惊讶?你上过微分方程的课吗?我假设
kd
kf
等等。意思是
k*d
k*f
?对不起,不,它们只是常数…kd=.25;ke=.1;kf=5,我在研究化学rxn和速率定律……你为什么感到惊讶?你上过微分方程的课吗?我假设
kd
kf
等等。意思是
k*d
k*f
?对不起,不,它们只是常数…kd=.25;ke=.1;kf=5,我正在研究化学rxn和速率定律…谢谢Rody!是的,对不起,我没有提供更多的信息,这是不同物种经历多重RXN的浓度:A+2B->C+D;2D+3A->C+E;B+2C->D+F;给定:rd=kdCaCb^2 re=keCaCd rf=kfCbCc^2,kd=0.25;ke=.1;kf=5;v0=10;ca0=1.5;cb0=2.0;如果有什么变化请告诉我?谢谢Rody!是的,对不起,我没有提供更多的信息,这是不同物种经历多重RXN的浓度:A+2B->C+D;2D+3A->C+E;B+2C->D+F;给定:rd=kdCaCb^2 re=keCaCd rf=kfCbCc^2,kd=0.25;ke=.1;kf=5;v0=10;ca0=1.5;cb0=2.0;如果这有什么变化,请告诉我?
function top

    %// Initial values (random for this example)
    y0 = 125*randn(6,1);

    %// Time span to simulate
    tspan = [0 +1];

    %// Solve system numerically
    [t,y] = ode45(@deriv, tspan, y0);

    %// Make a nice plot
    plot(t,y)
    xlabel('t'), ylabel('function values')
    legend('a(t)', 'b(t)', 'c(t)', 'd(t)', 'e(t)', 'f(t)')

end

function dydt = deriv(~,y)

    %// Set the value for your 'k'
    k = 1e-4;

    %// rename the variables for clarity
    [a,b,c,d,e,f] = deal(y(1),y(2),y(3),y(4),y(5),y(6));

    %// Compute the derivative
    dydt = k * [
        -d*a*b^2
        -f*b*c^2
        +a*(d*b^2 - e*d)
        +d*a*b^2
        -e*a*d
        +f*b*c^2
    ];

end