Estoy resolviendo dos ecuaciones diferenciales y trazando los resultados de la segunda ecuación diferencial. Quiero encontrar los valores en el punto máximo de la gráfica. Sin embargo, tal vez porque estoy usando sym
Estoy teniendo problemas para calcular cómo hacerlo. Sé que en matemáticas, solo encontrarías la primera derivada y la pondrías a cero.
% 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))
Así que para la imagen de arriba, me gustaría encontrar el punto máximo. A veces, no es en los pasos de tiempo exactos, así que quiero que MATLAB muestre los valores exactos en el punto máximo.
Respuestas
0 para la respuesta № 1Puedes usar findpeaks
Para encontrar los máximos en tus datos. Para hacerlo, primero necesita convertir su solución oda (expresión algebraica) en una lista de datos para un intervalo específico de estudio.
B(t) = dsolve(eqn,cond,"t") ;
t = 0:0.1:20;
z=eval(B(t))
Ahora usando findpeaks
[pks, locs] = findpeaks(z)
pks =
5.7310e + 03
locs =
2