how to change the system of ODEs (using event functions) when one of the solutions reaches certain value?

4 ビュー (過去 30 日間)
Hello
I have a system of 10 coupled differential equations (with initial conditions), and in this system there are parameters depending on the solutions of this system, and other parameters are constant. the thing I want to do is to change the system when one of the solutions (y (2)) reaches a certain value. so the final values of the solutions of the first system will be the initial conditions of the following system .
I used the ode45 solver. I have used event functions, but changing the system doesn't work. may be I didn't use it correctly.
I want the first change occurs when y(2)>=638.9 , and the second change occurs when y(2)<638.9
thank you in advance.
this is the first system (the difference between systems is in dydt(1), dydt(2) and dydt(3)):
%===================param depending on y( )==============
rho_w = (-3.51e-6 * y(2)^2 + 2.01e-3 * y(2) + 0.7125);
hC = 4.18 * rho_w * y(1)+ 1.8364e54;
Pw = y(4) * X_f / 1e-4;
rho = (1/beta) - ((1/beta) * (eta * 2.3102e-23 / 2.3102e-23 + gamma_mf * ((0.1111*y(1)*rho_w) / 2.8867e+07) ...
* exp(-gamma_mp / ( 2.8867e+07 / (0.1111*y(1)*rho_w) )) ...
* epsilon * P_F_fast * P_F_thermal + gamma_w * y(1) / V_total));
%================= dif eqts===========================
dydt(1) = 1.5779e+10*(1.8607e+07-y(1))/(1.2355e+07);
dydt(2) = (1 / hC ) * (Pw - (0.0095 * (y(2) - 423) * 7.1060e+03 ))...
- 1.5779e+10 * ( rho_w * 4.18 * ( y(2) - 423) / hC)* ((1.8607e+07 - y(1) ) / (1.2355e+07));
dydt(3) = 0;
dydt(4) = ( beta * y(4) / 1e-4 ) * ( rho - 1 ) ...
+( lambda_1 * y(5) ...
+ lambda_2 * y(6) ...
+ lambda_3 * y(7) ...
+ lambda_4 * y(8) ...
+ lambda_5 * y(9) ...
+ lambda_6 * y(10) ) + S_spont ;
dydt(5) = (beta_1 * y(4)/1e-4) - lambda_1 * y(5);
dydt(6) = (beta_2 * y(4)/1e-4) - lambda_2 * y(6);
dydt(7) = (beta_3 * y(4)/1e-4) - lambda_3 * y(7);
dydt(8) = (beta_4 * y(4)/1e-4) - lambda_4 * y(8);
dydt(9) = (beta_5 * y(4)/1e-4) - lambda_5 * y(9);
dydt(10) = (beta_6 * y(4)/1e-4) - lambda_6 * y(10);
%========================= initial conditions =====================
V0_w = 6.2518e+06;
T0 = 423;
d0_gw = 0;
n_0 = 0;
C0_1 = 0;
C0_2 = 0;
C0_3 = 0;
C0_4 = 0;
C0_5 = 0;
C0_6 = 0;
%
y0 = [V0_w;T0;d0_gw;n_0;C0_1;C0_2;C0_3;C0_4;C0_5;C0_6];

回答 (1 件)

Cris LaPierre
Cris LaPierre 2021 年 1 月 1 日
I found this example on modeling a bouncing ball very helpful when I was trying to use ODE event.

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by