我不太習慣 MATLAB,我正在嘗試使用 MATLAB ode45 解決以下問題,但是,它不起作用。
我正在使用半間歇式反應器解決反應工程中的一個問題。反應由 A B ---> C D A 放入反應器中,B 以 v0 = 0.05 L/s 的流速連續添加到反應器中。初始體積為 V0 = 5 L。反應是基本的。反應常數為 k = 2.2 L/mol.s。初始濃度:對于 A:0.05 M,對于 B:0.025 M。
對反應器中的每個物種進行摩爾平衡,我得到了以下 4 個 ODE,以及 V 的運算式(反應器的體積不斷增加)

解決這個系統并根據時間繪制解決方案,我應該得到這個

請注意,C(C) 和 C(D) 的圖是相同的。讓我們設定 tau = v0/V。
現在是 MATLAB 代碼部分。
我在網上進行了廣泛的搜索,根據我所學到的,我想出了以下代碼。
首先,我撰寫了 ODE 系統的代碼
function f = ODEsystem(t, y, tau, ra, y0)
f = zeros(4, 1);
f(1) = ra - tau*y(1);
f(2) = ra tau*(y0(2) - y(2));
f(3) = -ra - tau*y(3);
f(4) = -ra - tau*y(4);
end
然后,在命令視窗中,
t = [0:0.01:5];
v0 = 0.05;
V0 = 5;
k = 2.2;
V = V0 v0*t;
tau = v0./V;
syms y(t);
ra = -k*y(1)*y(2);
y0 = [0.05 0.025 0 0];
[t, y] = ode45(@ODEsystem(t, y, tau, ra, y0), t, y0);
plot(t, y);
然而,我明白了這個...

請如果有人可以幫助我修復我的代碼。這真的很煩人:)
uj5u.com熱心網友回復:
ra不應作為引數傳遞,而應在 ODE 系統內部計算。V同樣不是常數。符號運算式應該用于公式轉換,而不是用于數值方法。還必須以所需的數值顯式評估符號運算式。
function f = ODEsystem(t, y, k, v0, V0, cB0)
f = zeros(4, 1);
ra = -k*y(1)*y(2);
tau = v0/(V0 t*v0);
f(1) = ra - tau*y(1);
f(2) = ra tau*(cB0 - y(2));
f(3) = -ra - tau*y(3);
f(4) = -ra - tau*y(4);
end
然后使用圖形的時間跨度,從除 之外的所有濃度為零開始,僅A將濃度B用于流入。
t = [0:1:500];
v0 = 0.05;
V0 = 5;
k = 2.2;
cB0 = 0.025;
y0 = [0.05 0 0 0];
[t, y] = ode45(@(t,y) ODEsystem(t, y, k, v0, V0, cB0), t, y0);
plot(t, y);
并獲得參考影像的良好再現

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/531278.html
標籤:matlab颂ode45
下一篇:如何在擬合曲面圖中添加資料提示
