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