簡體   English   中英

MATLAB:如何求解依賴於數組中存儲的數據的耦合微分方程

[英]MATLAB : how to solve coupled differential equations dependend on data stored in arrays

我想在 MATLAB 中求解一個由兩個常微分方程組成的系統。 ODE 的參數取決於存儲在兩個數組FT測量數據。

當我運行程序時,我總是收到如下所示的錯誤。 我確信它與數組有關,因為當我對FT使用單個數字時(例如F = 60 ; T = 30 ;),程序運行良好。

Subscript indices must either be real positive integers or logicals.
 
Error in dynamics (line 46)
ddyn(1) = k1*F(t) + v_b(t) - k_1*dyn(1) - v_a(t);

Error in ode23 (line 256)
f(:,2) = feval(odeFcn,t+h*A(1),y+f*hB(:,1),odeArgs{:});

Error in main (line 33)
[t,sol] = ode23(@dynamics , (1:1:3000),[0 0]);

這是我用於主函數和 ODE 系統的代碼:

主要功能:

[t,sol] = ode45(@dynamics , (1:1:3000),[0 0]);

ODE系統:

function [ddyn] = dynamics(t,dyn)

% constant numbers
k1 = 10^-2; k_1 = 8* 10^-3; k2 = 10^-2; k_2 = 4*10^-3; 
V_max_a = 1.6; V_max_b = 3.5;    
K_M_a = 1.5*10^-3; K_M_b = 2*10^-3;       
K_a_F = 9.4*10^5; K_a_T = 3.9*10; K_b_F = 1.3*10^4; K_b_T = 1.2*10^-10;
r_a_F = 4.3*10^7; r_a_T = 4.2*10^9; r_b_F = 6.9*10^-7; r_b_T = 6.2*10^-9;    

%arrays with data e.g. 
F = 1:3000;
T = 1:3000;

% program works if I use numbers, e.g.: 
%F = 60; T = 30; 


ddyn = zeros(2,1);

R_a_F = (K_a_F + r_a_F* F)/(K_a_F + r_a_F);   
R_a_T = (K_a_T + r_a_T* T)/(K_a_T + r_a_T);
R_b_F = (K_b_F + r_b_F* F)/(K_b_F + r_b_F);
R_b_T = (K_b_T + r_b_T* T)/(K_b_T + r_b_T);

 v_a = (V_max_a*dyn(1))/(K_M_a + dyn(1))*R_a_F .*R_a_T;
 v_b = (V_max_b*dyn(2))/(K_M_b + dyn(2))*R_b_F .*R_b_T;



ddyn(1) = k1*F(t) + v_b(t) - k_1*dyn(1) - v_a(t);
ddyn(2) = k2*T(t) + v_a(t) - k_2*dyn(2) - v_b(t);

Matlab ODE 套件中的所有函數,包括ode45 ,都假設t是連續的,並使用動態時間步長來達到一定的精度水平。 1因此,您不能假設t是一個整數,也不應該像使用F(t)那樣用作索引。 文檔中引用:

如果tspan包含兩個以上的元素[t0,t1,t2,...,tf] ,則求解器返回在給定點計算的解。 這不會影響求解器用於從tspan(1)遍歷到tspan(end)的內部步驟。 因此,求解器不一定精確地步進到tspan指定的每個點。

因此,假設FT是時間上的連續函數,我建議制作一個及時執行插值的函數,更有可能通過interp1 ,並通過參數化將該函數傳遞給您的 ODE 函數。 例如:

tspan = 1:3000;
Ffun  = @(t) interp1(tspan,F,t); % Default is linear
[t,sol] = ode45(@(t,dyn) dynamics(t,dyn,Ffun) , tspan , [0 0]);

這只是一個例子,但希望應該是有用的。


1特別是, ode45使用Dormand-Prince (4,5) Runkge-Kutta 對進行時間積分; 簡而言之,該函數比較四階和五階解,以確定當前時間步的結果是否足夠好,或者是否應該減少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM