2016-12-03 7 views
1

Я решаю два дифференциальных уравнения и выводя результаты второго дифференциального уравнения. Я хочу найти значения в максимальной точке графика. Однако, может быть, потому, что я использую sym, мне трудно понять, как это сделать. Я знаю, что в математике вы просто найдете первую производную и установите ее равной нулю.MATLAB Найти максимальную точку из формулы dsolve

% 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)) 

plot of B(t)

Так на картинке выше, я хотел бы, чтобы найти максимальную точку. Иногда, это не на точных временных шагах, поэтому я хочу, чтобы MATLAB просто показывал точные значения в максимальной точке.

+0

Вы должны увеличить разрешение своего участка. 20 пробных точек не очень информативны. Установите 't = 0: 0.05: 20' или что-то в этом роде. – LutzL

ответ

0

Вы можете использовать findpeaks, чтобы найти максимальные значения в ваших данных. Для этого сначала нужно преобразовать решение ode (алгебраическое выражение) в список данных для определенного интервала обучения.

B(t) = dsolve(eqn,cond,'t') ; 
t = 0:0.1:20; 
z=eval(B(t)) 

Теперь с помощью findpeaks

[pks, locs] = findpeaks(z) 

ПКС =

5.7310e + 03

LOCS =

2