【问题标题】:MATLAB Find the max point from a dsolve formulaMATLAB 从 dsolve 公式中找到最大点
【发布时间】:2016-12-04 01:05:38
【问题描述】:

我正在求解两个微分方程并绘制第二个微分方程的结果。我想在图中的最大值处找到值。但是,也许是因为我使用的是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 只显示最大值点的确切值。

【问题讨论】:

  • 您应该提高绘图的分辨率。 20 个样本点的信息量不是很大。设置t = 0:0.05:20 或类似的东西。

标签: matlab max differential-equations


【解决方案1】:

您可以使用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

位置 =

 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多