Está en la página 1de 5

6.

Aquí se resuelven con GEKKO las mismas 6 primeras


ecuaciones que en el programa "P04 L05 Resolución de
ODEs con Python odeint".

Ejemplo 1

Se resuelve la ecuación diferencial ordinaria, ODE, con la librería


GEKKO. La ecuación es: dy/dt = -k*y, con k = 0.3 y y(0) = 5.

Esta es la misma ecuación del Ejemplo 1 de la lección: “5 Solución


de ecuaciones diferenciales con odeint”, pero ahora utilizando la
librería GEKKO de Apmonitor.
La programación utiliza la letra “m” para abreviar a GEKKO().
Aquí una ecuación diferencial se programa como sigue:

m.Equation(y.dt()==-k*y)

Ver este ejercicio en la celda 1 del programa:

P05 L-06 ODES con GEKKO y Analítico.

Ejemplo 2:

Uso de parámetros adicionales como argumentos.

Los parámetros de entrada, tales como “k” pueden ser cambiados


para generar una solución diferente. El argumento “k” es ahora un
parámetro que se puede ajustar.

Ver este ejercicio en la celda 2 del programa mencionado.

Ejemplo 3.
Ahora se resuelve en GEKKO la ODE: dy(t)/dt = -y(t) + 1, con y(0)
=0
Ver la siguiente celda, del anterior programa.

Ejemplo 4.
Ahora se resuelve en GEKKO una ecuación del tipo de la FOPDT,
ella es:

5*dy(t)/dt = -y(t) + u(t)

De aquí se puede ver que tau_p = 5.0, Kp = 1.0 y teta_p = 0.0

u(t) es una función escalón (step function) que cambia de 0 a 2 al


tiempo t = 10. Matemáticamente esto se puede escribir como: u =
2*S(t-10), en donde S(t-10) es una función escalón (step function)
que cambia de 0 a 1 al tiempo: t=10. Al multiplicarse por 2 hace que
"u" sea igual a 2.

Ver la siguiente celda del programa citado.

Ejemplo 5.

Aquí se resuelven en GEKKO dos ODE´s que son equivalentes:

dx(t)/dt = 3*exp(-t), con x(0) = 0.0


dy/t)/dt = 3 – y(t), con y(0) = 0.0

Ver la siguiente del programa citado.

Ejemplo 6.
Ahora se resuelve en GEKKO un sistema de dos ODE con una
función escalón.

2*dx(t)/dt = -x(t) + u(t)


5*dy(t)/dt = -y(t) + x(t)
u = 2*S(t – 5), x(0) = 0 y y(0) = 0

Aquí S(t – 5) es una función escalón que cambia de 0 a 1 al tiempo


t = 5, la que al multiplicarse por 2 hace que “u” sea igual a 2, a partir
del tiempo 5.
Ver la siguiente del programa citado.

Ejemplo 7.
Aquí se resuelve con GEKKO la misma ecuación que en el ejemplo
1, pero de una forma analítica. Ya que la ODE del ejemplo 1 al
integrarse, se reduce a la siguiente ecuación algebraica:
y(t ) t

∫ dyy = - k ∫ dt
y (0 ) 0

ln[y(t)/y(0)] = -k*t, o bien, con k = 0.3 y y(0) = 5.


:

y(t) = 5*exp(-0.3*t)

El programa en Python para mostrar en forma gráfica a esta última


ecuación se reduce a 3 líneas.

Ver este ejercicio en la celda que sigue del programa con el que se
trabaja.

Ejemplo 8
Aquí se ve como obtener la solución analítica de una ODE con la
librería de Python simbólico "sympy".

Sympy report la siguiente solución:

𝑦(𝑥)=𝐶1*𝑒xp−(𝑘𝑥)
Y como a y(0) = 5, C1 = 5 y con k = 0.3; se obtiene la ecuación:

y = 5*np.exp(-0.3*x).

Que es la misma que se obtuvo manualmente

Ejemplo 9.
Aquí se quiere comparar las soluciones algebraicas: la que se
obtenga con Python simbólico “sympy” con la solución que
manualmente se obtuvo de la siguiente ecuación:

Al final de este ejemplo también se hace la comparación entre la


solución algebraica, y la que se obtiene con "odeint", de la misma y
última ecuación.
El resultado es el que se esperaba.

También podría gustarte