/ / MATLAB Знайти максимальну точку з dsolve формули - matlab, max, диференціальні рівняння

MATLAB Знайдіть максимальну точку з формули dsolve - matlab, max, differential-equations

Я "m вирішення двох диференціальних рівнянь і побудови результатів другого диференціального рівняння. Я хочу знайти значення на максимальній точці в ділянці. Однак, може бути, тому що я" я використовую 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))

сюжет B (t)

Так що для картини вище, я хотів би знайти максимальну точку. Іноді це не так точні кроки часу, тому я хочу MATLAB просто показати точні значення в максимальній точці.

Відповіді:

0 для відповіді № 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

locs =

 2