使用MATLAB求解具有不同阶段的生物反应器的二阶ODE同时进行

时间:2018-03-28 14:55:28

标签: matlab for-loop ode

我试图解决同时二阶微分方程,以找到生物反应器不同阶段的示踪剂(分子)浓度。阶段按顺序排列。

背景:我们正在与之合作的生物反应器是旋转式生物承包商。这是一个example.示踪分子在第一阶段在时间t = 0注入,我们的目标是找出示踪剂分子的浓度在每个阶段如何随时间变化。

我们正在使用的第二个订单ODE可以在这里找到:https://imgur.com/a/KS4Od

我试图简化4个阶段(imgur专辑中的第2和第3张照片)的等式,并尝试使用MATLAB解决它。这是代码:

 P2 = 1; P3 = 5; C0 = 30; P4 = 2;

f = @(t,x)[x(2); (C0+P4*x(7)-x(1)-P3*x(2))/P2;
          x(4); (x(1)-x(3)-P3*x(4))/P2;
          x(6); (x(3)-x(5)-P3*x(6))/P2;
          x(8); (x(5)-x(7)-P3*x(8))/P2];

t= linspace(0,40); init = [0 0 0 0 0 0 0 0];

[t Y] = ode45(f,t,init);

plot(t,Y(:,1),'r-',t,Y(:,3),'b-',t,Y(:,5),'k-',t,Y(:,7),'m-')

legend('C1','C2','C3','C4')

我们的目标是了解第4阶段浓度的变化情况。它应该看起来像Residence time distribution或类似的东西。

我需要知道是否可以使用" for loop"为" n"串联阶段并解决方程式。理想情况下,只有输入应该是否定的。阶段,时间间隔,初始浓度和常数。假设常量的任何值,初始浓度。和时间间隔。

有人可以指导我解决这个问题吗?我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

使用更传统的函数来代替f的匿名/ lambda定义。

n = 4
function dotx = f(t,x)
    dotx = zeros(2*n,1)
    dotx(1) = x(2);
    dotx(2) = (C0+P4*x(7)-x(1)-P3*x(2))/P2
    for k = 2:n
        dotx(2*k-1) = x(2*k)
        dotx(2*k) = (x(2*k-3)-x(2*k-1)-P3*x(2*k))/P2
    end
end

init = zeros(2*n,1)

可能需要更改x, dotx的行/列格式。