Eu estou resolvendo duas equações diferenciais e plotando os resultados da segunda equação diferencial. Eu quero encontrar os valores no ponto máximo na plotagem. Entretanto, talvez porque eu esteja usando sym
Eu estou tendo problemas para descobrir como fazer isso. Eu sei que, em matemática, você apenas encontraria a primeira derivada e a colocaria em zero.
% 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))
Então, para a foto acima, eu gostaria de encontrar o ponto máximo. Às vezes, não é em passos de tempo exato, então eu quero que o MATLAB mostre apenas os valores exatos no ponto máximo.
Respostas:
0 para resposta № 1Você pode usar findpeaks
para encontrar o máximo em seus dados. Para fazer isso, primeiro você precisa converter sua solução de ode (expressão algébrica) em uma lista de dados para um intervalo específico de estudo.
B(t) = dsolve(eqn,cond,"t") ;
t = 0:0.1:20;
z=eval(B(t))
Agora usando findpeaks
[pks, locs] = findpeaks(z)
pks =
5,7310e + 03
locs =
2