2016-12-03 6 views
1

2つの微分方程式を解いて、2つ目の微分方程式の結果をプロットしています。プロットの最大点で値を探したいと思います。しかし、おそらく私が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を使用すると、データ内の最大値を見つけることができます。これを行うには、まず、あなたのode解(代数式)を特定の学習期間のデータリストに変換する必要があります。今findpeaks

[pks, locs] = findpeaks(z) 

PKSを使用して

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

=

5.7310e + 03

LOCS =

2 
関連する問題