Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
104 views
ubuntu2004
Kernel: Python 3 (system-wide)

Ecuaciones Diferenciales para ingeniería BAIN081

Ecuaciones diferenciales de primer orden

Una ecuación diferencial es una ecuación donde hay involucrado un operador diferencial y la incognita es una función.Un ejemplo clásico es la ecuación: y(x)=dydx(x) y(x)=\dfrac{dy}{dx}(x)

en esta ecuación, deseamos encontrar una función y(x)y(x) que sea igual a su derivada. De calculo I sabemos que la derivada de la función y(x)=exy(x)=e^x es dy(x)dx=ex\frac{dy(x)}{dx}=e^x, por lo tanto y(x)=exy(x)=e^x es una solución de ecuación diferencial anterior. También lo es y(x)=2exy(x)=2e^x, y(x)=3exy(x)=3e^x, y(x)=100exy(x)=100e^x. En general la solución es y(x)=Cex, CRy(x)=Ce^x,\ \forall C\in \mathbb{R}.

Para resolver una ecuación diferencial usaremos la librería simbólica de python sympy\textbf{sympy}, para usar la librería debemos importar la librería de la sigiuente forma: import sympy\textbf{import sympy}, si además queremos darle un anacrónimo podemos escribir import sympy as sym\textbf{import sympy as sym}.

import sympy as sym

para declarar una variable simbólica xx y una función simbólica y(x)y(x), debemos usar los objetos Symbol\textbf{Symbol} y Function\textbf{Function}, de la siguiente manera:

x=sym.Symbol('x') y=sym.Function('y')

Para declarar la ecuación diferencia y=yy=y', usando el objeto simbólico Eq\textbf{Eq} de sympy\textbf{sympy},

ec1=sym.Eq(y(x)-y(x).diff(x),0) ec1

y(x)ddxy(x)=0\displaystyle y{\left(x \right)} - \frac{d}{d x} y{\left(x \right)} = 0

Para resolver la ecuación, simplemente, llamamos a la función dsolve\textbf{dsolve} de sympy\textbf{sympy} que resuelve ecuaciones diferenciales y tiene por parámetro de entrada la ecuación que declaramos anteriormente.

solucion=sym.dsolve(ec1) solucion

y(x)=C1ex\displaystyle y{\left(x \right)} = C_{1} e^{x}

Si deseamos graficar, punto a punto, una solución en particular por ejemplo cuando C1=1C_1=1 podemos utilizar la función matplotlib\textbf{matplotlib} de pyplot\textbf{pyplot}. Por lo tanto importaremor la librería matplotlib.pyplot\textbf{matplotlib.pyplot} con el anacrónimo plt\textbf{plt}. Para trabajar con arreglos(vectores), necesitaremos la librería numpy\textbf{numpy}.

import matplotlib.pyplot as plt import numpy as np

Los vectores xp=[xp1,...xpn]txp=[xp_1,...xp_n]^t y yp=[yp1,...,ypn]typ=[yp_1,...,yp_n]^t forman el conjunto de pares ordenados {(xpi,ypi)}i=1n\{(xp_i,yp_i)\}_{i=1}^n, con los cuales generaremos la gáfica de la función y(x)=exy(x)=e^x. En python\textbf{python} podemos declarar el vector xp=[0,0.1,0.2,0.3,....,9.9,10]txp=[0,0.1,0.2,0.3,....,9.9,10]^t usando la función arange\textbf{arange} de numpy\textbf{numpy}. Para determinar la imagen de la función y(x)=exy(x)=e^x, usamos la función exponencial de numpy\textbf{numpy}.

xp=np.arange(0,10,0.1) yp=np.exp(xp)

para gráficar usamos la función plot\textbf{plot} y show\textbf{show}.

plt.plot(xp,yp) plt.show()
Image in a Jupyter notebook

Una forma más sencilla para graficar, es usando la librería simbólica simpy\textbf{simpy}, mediante la función plot\textbf{plot}.

sym.plot(sym.exp(x))
Image in a Jupyter notebook
<sympy.plotting.plot.Plot at 0x7fb40264faf0>

En ambos caso solo graficamos la solución cuando C1=1C_1=1, para graficar la familia de soluciones y(x)=C1exy(x)=C_1e^x, debemos graficar para diversos valores de C1C_1, por ejemplo para C1=0, C1=1,.......C_1=0,\ C_1=1,........ Por lo tanto crearemos un arreglo de gráficas y luego las mostraremos todas juntas. Antes de eso debemos escribir la solución de la Edo como una función lambda de octave.

#### Arreglo de graficas Graficas=sym.plot(0*sym.exp(x),show=False) ## Inicializamos Grafica con una grafica. for Ci in np.arange(0,10,1): Graficas.extend(sym.plot(Ci*sym.exp(x),show=False))##Agregamos cada gráfica, a Gráficas. Graficas.show() ## Mostramos el arreglo de gráficas
Image in a Jupyter notebook

Ejercicios:

Resuelva las siguientes ecuaciones diferenciales y grafique la familia de soluciones correspondiente.

(a) xyytan(ln(y))=0xy'-y\tan(\ln(y))=0

(b) y=14yx1y=\frac{1}{4}y'x-1

##### Solución (a) import sympy as sym x=sym.Symbol('x') y=sym.Function('y') ec_a=sym.Eq(x*y(x).diff(x)-y(x)*sym.tan(sym.ln(y(x))),0) ec_a ### Para verificar que escribimos la ecuación correcta.

xddxy(x)y(x)tan(log(y(x)))=0\displaystyle x \frac{d}{d x} y{\left(x \right)} - y{\left(x \right)} \tan{\left(\log{\left(y{\left(x \right)} \right)} \right)} = 0

solucion=sym.dsolve(ec_a)## resolvemos la ecuación diferencial. print(solucion)##mostramos la solución.
[Eq(y(x), exp(-atan(x*sqrt(-C1/(C1*x**2 - 1))))), Eq(y(x), exp(atan(x*sqrt(-C1/(C1*x**2 - 1)))))]

Notemos que la solución es un arreglo de ecuaciones (las dos ramas de la solución), si queremos que se muestre una rama simplificada de la solución, podemo aplicar el comando simplify\textbf{simplify}, a una componente del arreglo.

sym.simplify(solucion[0])

y(x)=eatan(xC1C1x21)\displaystyle y{\left(x \right)} = e^{- \operatorname{atan}{\left(x \sqrt{- \frac{C_{1}}{C_{1} x^{2} - 1}} \right)}}

sym.simplify(solucion[1])

y(x)=eatan(xC1C1x21)\displaystyle y{\left(x \right)} = e^{\operatorname{atan}{\left(x \sqrt{- \frac{C_{1}}{C_{1} x^{2} - 1}} \right)}}

Para poder graficar alguna de las soluciones debemos tener en cuenta que el dominio de la solución depende de c1c_1, de la siguiente manera:

1c1x1c1-\sqrt{\frac{1}{c_1}} \leq x \leq \sqrt{\frac{1}{c_1}}
#### Arreglo de graficas Graficas=sym.plot(sym.exp(sym.atan(x*sym.sqrt(1/(x**2+1)))),(x,-0.9,0.9),show=False)##Inicializamos Grafica con una grafica tomando c1=1. for C1 in np.arange(0.1,3,0.1): Graficas.extend(sym.plot(sym.exp(sym.atan(x*sym.sqrt(-C1/(C1*x**2-1)))),(x,-0.9,0.9),show=False))##Agregamos cada gráfica, a Gráficas. Graficas.extend(sym.plot(sym.exp(-sym.atan(x*sym.sqrt(-C1/(C1*x**2-1)))),(x,-0.9,0.9),show=False)) Graficas.show() ## Mostramos el arreglo de gráficas
Image in a Jupyter notebook
##### Solución (b) import sympy as sym x=sym.Symbol('x') y=sym.Function('y') ec_b=sym.Eq(y(x),1/4*y(x).diff(x)*x-1) ec_b ### Para verificar que escribimos la ecuación correcta.

y(x)=0.25xddxy(x)1\displaystyle y{\left(x \right)} = 0.25 x \frac{d}{d x} y{\left(x \right)} - 1

solucion=sym.dsolve(ec_b)## resolvemos la ecuación diferencial. solucion##mostramos la solución.

y(x)=C1x4.01.0\displaystyle y{\left(x \right)} = C_{1} x^{4.0} - 1.0

#### Arreglo de graficas Graficas=sym.plot(1*x**4-1,show=False)##Inicializamos Grafica con una grafica tomando c1=1. for Ci in np.arange(0.1,5,0.1): Graficas.extend(sym.plot(Ci*x**4-1,show=False))##Agregamos cada gráfica, a Gráficas. Graficas.show() ## Mostramos el arreglo de gráficas
Image in a Jupyter notebook

*) Para estudiar distintas formas de construir graficos usando variable simbólica: https://docs.sympy.org/latest/modules/plotting.html

*) Para estudiar como utilizar variables simbólicas en python: https://docs.sympy.org/latest/index.html