Hoja 1. Ejercicios Python

En este cuaderno tenéis una serie de ejercicios para que vayáis practicando con Python. La base está en lo explicado en clase y en los notebooks Introducción y Convección-1D

Acordáos siempre, como primer paso, de cargar los módulos que vayáis a utilizar


In [9]:
import numpy as np
import matplotlib.pyplot as plt #Esta es otra forma de importar el submódulo pyplot! 
                                #Igual de válida que la que hemos visto en clase

%matplotlib inline

Ejercicio 1

Crea dos vectores, x e y, que contengan 30 y 60 puntos, espaciados en el intervalo $[0,1]$ y $[0,2]$ respectivamente. Usa para ello el comando $\texttt{np.linspace}$


In [10]:
# Introduce tu código aquí

Chequea el resultado mediante el comando $len()$. Prueba y crea de nuevo los vectores mediante el comando $np.arange$. ¿Hay diferencia? ¿Cuál?

Pista : ¡Recuerda que puedes encontrar documentación sobre python, numpy y matplotlib en la web!
Python Documentation
Numpy
Matplotlib

Ejercicio 2

Crea vectores para las funciones $sin(x)$, $exp(-x^2/2)$ y $log(x)$ (¡Logaritmo natural!). Representa en diferentes gráficas cada una de estas funciones frente al eje correspondiente de ordenadas.


In [11]:
# Introduce tu código aquí

Crea un nuevo vector $n * sin(x)$ y representa en un mismo gráfico esta función frente a $sin(x)$


In [12]:
# Introduce tu código aquí

Tuneando matplotlib

Busca en la documentación cómo añadir al gráfico etiquetas a los ejes, títulos y leyendas. Prueba también a cambiar el tamaño de fuente.

Cambia el estilo de representación: cambia el color de las líneas, su grosor o el tipo de marcador (puntos, cruces, triángulos, línea discontinua, etc.)


In [13]:
# Introduce tu código aquí

Explora cambiar el rango, y las opciones de representación de ejes $\texttt{semilogx}$, $\texttt{semilogy}$ y $\texttt{loglog}$ para la función logaritmo. ¿Qué diferencias notas?


In [14]:
# Introduce tu código aquí

Ejercicio 3

Vamos con las estructuras de control: bucles for, while y condionales.

Crea un bucle que devuelva el índice de cada uno de los puntos de la función $exp(-x^2/2)$.


In [16]:
# Introduce tu código aquí

Escribe un programa que devuelva el máximo de la función $sin(x)$ en el intervalo especificado anteriormente.


In [17]:
# Introduce tu código aquí

Escribe un programa que devuelva si un número comprendido en el rango de 1 a 100 es par o impar


In [18]:
# Introduce tu código aquí

Crea un programa que devuelva el factorial de un número n (El factorial de un número es el producto de todos los enteros entre 1 y el propio número)


In [19]:
# Introduce tu código aquí

Reto: Explora la posibilidad de crear estos programas mediante la definición de una función (def)

Ejercicio 4

Entramos en la discretización de una ecuación diferencial:

La ecuación de convección en 1D es:

$\frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x}$

A esta ecuación, como vimos, pueden aplicársele diferentes discretizaciones, que darán lugar a resultados diferentes.

Revisa en primer lugar el notebook Convección-1D. Cambia los parámetros de discretización. ¿Hay algún cambio? ¿Qué ocurre si aumento la resolución temporal? ¿Y la resolución espacial?

Implementa, al igual que se ha hecho con el esquema de diferencias centradas, un esquema de tipo "backward". ¿Mejora o empeora?


In [ ]:
# Introduce tu código aquí

Ejercicio 5

Partiendo del esquema "upwind", cambia las condiciones iniciales del problema. El campo de velocidades es ahora del tipo:

$ u (x) = 0.5 \exp{\frac{x - 0.5}{2}}$


In [ ]:
# Introduce tu código aquí

Represéntalo gráficamente. ¿Qué ocurre?

Puedes probar muchas otras configuraciones...

Ejercicio 6

Hasta ahora, no nos hemos preocupado por los nodos inicial y final. Estos nodos son los que se conocen como condiciones de contorno (en 1-D sólo tendremos dos nodos, pero en 2-D y 3-D la cosa se complica).

Existen diferentes condiciones de contorno a aplicar en función del problema que queramos resolver: Dirichlet, Neumann, Robin, condiciones de entrada, de salida, de simetría, periódicas, etc.

Unas de las más populares son estas últimas. Las condiciones periódicas establecen que lo que ocurre en nuestro dominio se reproduce exactamente en periodos tanto sucesivos como anteriores. Por tanto, aquello que salga de nuestro dominio debe ser igual a lo que entre.

Implementa las condiciones periódicas en nuestro problema de convección. Déja correr el problema el tiempo suficiente para ver el efecto de la condición de contorno. ¿Qué ocurre?


In [ ]:
# Introduce tu código aquí

Reto: Busca cuáles son las condiciones de contorno Dirichlet, e impleméntalas en los contornos del dominio. La condición inicial es $u (x = 0) = 1$ y $u(x = L) = 0$. Evoluciona la simulación. ¿Qué ocurre?


In [ ]:
# Introduce tu código aquí