Matlab - Resolviendo ecuaciones diferenciales con algunos valores constantes.

 
Vista:

Resolviendo ecuaciones diferenciales con algunos valores constantes.

Publicado por Luis (1 intervención) el 14/12/2018 13:08:18
El problema es el siguiente:

Supongamos que vamos a resolver las siguientes ecuaciones diferenciales:

dgdt= -Vg * X ;
dxdt= Vx * X ;

en donde,

Vg = (G/0.1+G);
Vx = 0.1*Vg^2;

Xo=0.1;
Go=2.0;

Las ecuaciones diferenciales se resolverían en el intervalo de tiempo t=[0 21] en horas.

Hasta ahí todo es sencillo, pero lo que que quisera lograr resolver es que el término Vx se evaluara solo cada 0.25h y se mantuviera consntate hasta el siguiente intervalo de tiempo, digamos que cuando,

t=0 , se evalue Vx con el respectivo valor de Vg en el tiempo 0 y que Vx se mantenga constante hasta el siguente intervalo de tiempo.
t=0.25, se evalue Vx con el respectivo valor de Vg en el tiempo 0.25 y que Vx se mantenga constante hasta el siguente intervalo de tiempo.
t=0.50, se evalue Vx con el respectivo valor de Vg en el tiempo 0.50 y que Vx se mantenga constante hasta el siguente intervalo de tiempo.
.
.
.
.
.
asi sucesivamente hasta,
t=21


Para resolver el problema creé dos scritps:

El primero donde resuelvo con ODE25s la ecuación diferencial:

1
2
3
4
5
6
clear all; close all; clc;
 
Xo= 0.1;
Go= 2.0;
 
[ts,c_est]=ode15s('dcdt',[0 21],[Xo Go]);

Y el segundo, llamado dcdt, en donde escribo las ecuaciones diferenciales:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function [dc_dt]=dcdt(t,c)
 
 X=c(1);
 G=c(2);
 
 Vg = (G/0.1+G);
 
 
 %%% aqui yo hbía pensado algo como (pero efectivamente no funciona):
 
 jump=0.25;
 tv=0:jump:21;
 
 ind = max((find(tv <= t)));
 
 if t==tv(ind)
 Vx = 0.1*Vg^2;
 end
 
 dgdt= -Vg * X ;
 dxdt=  Vx * X ;
 
 dc_dt=[dx_dt; dg_dt];
 
 end

Yo había pensando el la solución descrita en el código pero no funciona. De pronto alguna sugerencia que me ayuda a resolver dicho problema.

Muchas pero muchas gracias de antemano,

Att,

Luis
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder