我解决了两个微分方程并绘制了第二个微分方程的结果。我想在图中的最大点找到值。但是,也许是因为我使用sym
,我很难确定如何做到这一点。我知道在数学中,你只需找到一阶导数并将其设置为零。
% 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))
因此,对于上图,我想找到最大点。有时候,它不是精确的时间步,所以我希望MATLAB只显示最大点的确切值。
答案 0 :(得分:0)
您可以使用findpeaks
查找数据中的最大值。为此,首先需要将ode解决方案(代数表达式)转换为特定研究间隔的数据列表。
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