2016-12-03 24 views
1

我正在求解兩個微分方程並繪製第二個微分方程的結果。我想在圖中的最大點找到值。但是,也許因爲我使用的是sym,我無法確定如何執行此操作。我知道在數學中,你只需找到一階導數並將其設置爲零。MATLAB從dsolve公式中找出最大點

% Constants 
k1 = 1/10; 
k2 = 1/1.3; 
k3 = 1/1.3; 
k4 = 1/(1/48); 
k5 = 1/3.9; 
t = 1:5; 
% Initial concentration 
A0 = 5891.694; 
B0 = 0; 
%%% Mass balance equation 1 
syms A(t) t 
eqn = diff(A,t) == -k1*A -k2*A -k3*A -k4*A; 
cond = A(0) == A0; 
A(t) = dsolve(eqn,cond); 
% A(t) = exp(-k1*t); 
%%% Mass balance equation 2 
syms B(t) t 
eqn = diff(B,t) == k1*A +k2*A +k3*A +k4*A - k5*B; 
cond = B(0) == B0; 
B(t) = dsolve(eqn,cond); 

%%% Plot 
figure('visible','on'); 
t = 0:20; 
plot(t,B(t)) 

plot of B(t)

因此,對於上面的圖片,我想找到的最高點。有時候,這並不是精確的時間步驟,所以我希望MATLAB能夠在最大點顯示精確值。

+0

你應該增加你的情節分辨率。 20個採樣點不是非常有用的信息。設置't = 0:0.05:20'或類似的東西。 – LutzL

回答

0

您可以使用findpeaks來查找數據中的最大值。要做到這一點,首先你需要將你的代碼表達式(代數表達式)轉換成一個特定的學習時間間隔的數據列表。

B(t) = dsolve(eqn,cond,'t') ; 
t = 0:0.1:20; 
z=eval(B(t)) 

現在使用findpeaks

[pks, locs] = findpeaks(z) 

PKS =

5.7310e + 03

LOCS =

2