使用 MATLAB 求解具有不同阶段的生物反应器的同时二阶 ODE
Solve for simultaneous second order ODE for bioreactor with different stages using MATLAB
我正在尝试求解联立二阶微分方程,以找出生物反应器不同阶段示踪剂(分子)的浓度。舞台是串联的
上下文: 我们正在使用的生物反应器是一个旋转生物承包商。这是一个 example. 示踪分子在时间 t=0 的第一阶段注入,我们的 objective 是找出示踪分子的浓度在每个阶段如何随时间变化。
我们正在处理的二阶 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" 个阶段并求解方程。理想情况下,only inputs 应该是 no。阶段、时间间隔、初始浓度和常数。假设常数的任何值,初始浓度。和时间间隔。
有人可以指导我解决这个问题吗?非常感谢您的帮助。
不要使用 f
的 anonymous/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
更改 row/column 格式。
我正在尝试求解联立二阶微分方程,以找出生物反应器不同阶段示踪剂(分子)的浓度。舞台是串联的
上下文: 我们正在使用的生物反应器是一个旋转生物承包商。这是一个 example. 示踪分子在时间 t=0 的第一阶段注入,我们的 objective 是找出示踪分子的浓度在每个阶段如何随时间变化。
我们正在处理的二阶 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" 个阶段并求解方程。理想情况下,only inputs 应该是 no。阶段、时间间隔、初始浓度和常数。假设常数的任何值,初始浓度。和时间间隔。
有人可以指导我解决这个问题吗?非常感谢您的帮助。
不要使用 f
的 anonymous/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
更改 row/column 格式。