Práctica No. 1vpython
Práctica No. 1vpython
1
Introducción a la programación en Python
Objetivo:
Comprender los elementos básicos de la programación en lenguaje Python para aplicaciones en ingeniería de
control.
Introducción.
Python es un lenguaje de programación poderoso y fácil de aprender. Cuenta con estructuras de datos eficientes
y de alto nivel y un enfoque simple pero efectivo a la programación orientada a objetos. La elegante sintaxis de
Python y su tipado dinámico, junto con su naturaleza interpretada, hacen de éste un lenguaje ideal para scripting
y desarrollo rápido de aplicaciones en diversas áreas y sobre la mayoría de las plataformas.
El intérprete de Python y la extensa biblioteca estándar están a libre disposición en forma binaria y de código
fuente para las principales plataformas desde el sitio web de Python, http://www.python.org/, y puede distribuirse
libremente. El mismo sitio contiene también distribuciones y enlaces de muchos módulos libres de Python de
terceros, programas y herramientas, y documentación adicional.
El intérprete de Python puede extenderse fácilmente con nuevas funcionalidades y tipos de datos implementados
en C o C++ (u otros lenguajes accesibles desde C). Python también puede usarse como un lenguaje de extensiones
para aplicaciones personalizable.
El intérprete de Python viene instalado con el propio lenguaje. En sistemas Linux y macOS se puede acceder a él
tecleando python en el terminal, o a través de la correspondiente entrada del menú inicio en sistemas Windows.
Así corremos el intérprete en el llamado modo interactivo, que se caracteriza por el uso de tres signos mayor que
(>>>) donde podemos ejecutar nuestra instrucción o conjunto de instrucciones. En este modo recibimos feedback
inmediato del resultado de las instrucciones, lo que resulta útil para aprender el lenguaje y testar pequeñas
porciones de código.
Si se desea crear scripts más elaborados se puede emplear una aplicación de bloc de notas y guardar el archivo
con la extensión .py. Para ejecutar el script basta con el comando python ruta-al-script.py desde la línea de
comandos del intérprete. En este caso el código se ejecuta de principio a fin o hasta que se encuentre un error.
Entornos de desarrollo.
Los entornos de desarrollo integrado (IDEs en inglés) son un tipo de aplicaciones que están pensadas para facilitar
la productividad cuando se desarrolla código, incorporando características como el resaltado de sintaxis. Hay una
gran variedad de IDEs disponibles para Python. Entre ellos destaca PyCharm, un IDE creado por la compañía
JetBrains y que está enfocado exclusivamente para desarrollar en Python. Existen dos versiones de PyCharm, la
profesional (de pago) y la community que es open-source y algo más básica. Entre estas opciones básicas podemos
encontrar autocompletado y refactorización de código, resaltado de errores, navegación por el código de forma
cómoda o integración con herramientas de control de versiones.
Otra opción muy recomendada y que cada vez gana más adeptos es Visual Studio Code, un IDE de código abierto
creado por Microsoft, pensado para poder desarrollar con distintos lenguajes de programación. Este IDE tiene
opciones muy interesantes como la integración con el sistema de control de versiones Git, poder interactuar con
la consola desde el propio editor y la posibilidad de instalarle extensiones que nos facilitan la vida como
desarrolladores.
Anaconda es una distribución libre y abierta de los lenguajes Python y R, utilizada en ciencia de datos, y
aprendizaje automático (machine learning). Esto incluye procesamiento de grandes volúmenes de información,
análisis predictivo y cómputos científicos. Está orientado a simplificar el despliegue y administración de los
paquetes de software. Las diferentes versiones de los paquetes se administran mediante el sistema de gestión de
paquetes conda, el cual lo hace bastante sencillo de instalar, correr, y actualizar software de ciencia de datos y
aprendizaje automático como puede ser Scikit-team, TensorFlow y SciPy.
Pueden mencionarse algunos otros entornos integrados (IDE) de programación en Python tales como KDevelop,
SlickEdit, Thonny, Visual Studio, Atom, LiClipse, Spyder, Pyzo, Geany, Wing, etc.
Existen, además, entornos interactivos basados en la web tales como Jupyter Notebook. Este entorno de
desarrollo es una aplicación web que podemos correr en un navegador como Chrome, Firefox, etc. En concreto,
esta aplicación facilita la creación de cuadernos (notebooks) compuestos por celdas. En estas celdas podemos
desarrollar nuestro código Python e irlas ejecutando una a una. Este entorno es muy popular en data science y
machine learning, ya que permite visualizar gráficos y tener el código que los ha generado en un mismo
documento.
Desarrollo:
1. Aunque se puede emplear cualquier ambiente de desarrollo, aquí se decribe solamente como descargar,
instalar y actualizar Anaconda. En la página web de Anaconda https://www.anaconda.com/ seleccionar el
sistema operativo: Windows, Linux o Mac OS e ir a la sección de Download (descargas). Una vez descargado
el archivo, instalar según las opciones recomendadas por el propio instalador. Terminada la instalación, abrir
el IDE y actualizar empleando el Powershell Prompt y teclear el comando:
>>>conda update anaconda
2. El paquete python-control se puede instalar usando pip, conda o los mecanismos estándar distutils/setuptools.
El paquete requiere numpy y scipy, y las rutinas de trazado requieren matplotlib. Además, algunas rutinas
requieren la biblioteca slycot para implementar funciones más avanzadas (incluidas algunas funciones
MIMO). Se describe la instalación desde el terminal del IDE seleccionado o el Powershell de Anaconda.
Muchas partes de python-control funcionarán sin slycot, pero algunas funciones son limitadas o están
ausentes, y se recomienda la instalación de slycot. Los usuarios pueden verificar para asegurarse de que slycot
esté instalado correctamente ejecutando el comando:
>>>python -c "import slycot"
y verificando que no aparece ningún mensaje de error. Se puede obtener más información sobre el paquete
slycot en la página del proyecto slycot.
Para usuarios con la distribución Anaconda de Python, se pueden usar los siguientes comandos desde el
Powershell Prompt:
>>>conda install -c conda-forge control slycot
Esto instala slycot y python-control desde conda-forge, incluido el paquete openblas. Hay dos maneras
diferentes de usar el paquete. Para la interfaz predeterminada simplemente importe el paquete de control de
la siguiente manera:
>>> import control
3. El cuaderno de trabajo Jupyter Notebook está incluido en la distribución de Anaconda. Los cuadernos tienen
dos tipos de celdas, de código y de texto. Las celdas de texto se escriben con Markdown, un lenguaje de
marcado parecido al que utiliza wikipedia para sus páginas o al HTML.
Las celdas de código son ejecutables, es decir, se pueden correr individualmente (con ctrl+enter o desde el
menu Cell -> Run Cells)
Las variables en python no necesitan ser declaradas, simplemente se definen al ser utilizadas por primera vez.
Además, (si bien no es recomendable) pueden cambiar de tipo volviendo a definir.
Escriba los siguientes ejemplos en las celdas de un nuevo cuaderno de Jupyter Notebook:
Presione ctrl+enter después de escribir cada celda para ejecutar el código o bien alt+enter para ejecutar el
código y crear una nueva celda.
Las variables en python no necesitan ser declaradas, simplemente se definen al ser utilizadas por primera vez.
Además, (si bien no es recomendable) pueden cambiar de tipo volviendo a definir.
x="hola"
print(x)
x=5
print(x)
y=x+2.5
print(y)
Python tiene los mismos datos básicos que otros lenguajes: enteros, flotantes, strings y booleanos. Además,
las listas son un tipo predefinido en el lenguaje.
Python implementa todos los operadores usuales de la lógica booleana, usando palabras en inglés (and, or,
not) en lugar de símbolos (||, &&, !, etc)
También tiene los típicos operadores de comparación: <, >, >=, <=, ==, !=
Python tiene soporte para listas como un tipo predefinido del lenguaje. Para crear una lista basta con poner
cosas entre [] (corchetes) y separarlas con , (comas).
Permite definir clases y crear objetos de esas clases. No obstante, una lista es un objeto, y tiene varios métodos.
Entre ellos está el método append, que permite agregar un elemento a la lista. Los métodos se invocan de la
siguiente forma:
objeto.metodo(parametro1,parametro2,...).
Las tuplas son como las listas, pero no se pueden modificar. Son como unas listas de sólo lectura. Se crean
con () (paréntesis) en lugar de [] (corchetes).
En Python no hay llaves ({}) ni begin...end para marcar el comienzo y fin de un bloque, sino que eso se logra
con la indentación. La indentación por defecto son 4 espacios en blanco. Entonces va a ser necesario indentar
correctamente para utilizar sentencias if, for o para definir funciones.
El if es como el de otros lenguajes, pero no pide paréntesis y termina con : Su sintaxis es:
if condicion :
cuerpo del if (indentado con 4 espacios)
else:
cuerpo del else (indentado con 4 espacios)
Ejemplo:
edad = 25
print("La persona es")
if edad < 18: # el if termina con : para indicar donde acaba la condición
# el print va indentado con 4 espacios para indicar que está dentro del
# cuerpo del if
print("Menor")
else:
#Lo mismo con este print
print("Mayor")
print("De edad")
Los for son parecidos a los if, pero tienen la sintaxis for variable in lista:. En este caso, variable es la
variable que va a ir cambiando, y lista es una lista de python (o un iterable que es parecido)
Cuando no tenemos una lista y queremos hacer un for "común" y que la variable que cambia sea un número
que va incrementándose, podemos utilizar la función range.
#un for de 0 a 3, para imprimir esos valores
print("Un for de 0 a 3")
for i in range(4):
print(i)
#En Python los índices comienzan en 0, y por eso los rangos también.
#También se puede comenzar el rango en otro valor en lugar de 0
print("- Un for de 2 a 5:")
for j in range(2,6):
print(j)
Las funciones se definen con la palabra clave def y tienen la sintaxis def
nombre_funcion(parametros): Para devolver un valor se utiliza la palabra clave return.
4. Aplicación de la biblioteca de control a un sistema en tiempo continuo. Considere el sistema descrito por:
193.3
𝐺𝐺(𝑠𝑠) =
𝑠𝑠 2 + 18.735𝑠𝑠
Creamos el objeto del modelo de la siguiente forma:
import control as ctrl
import matplotlib.pyplot as plt
El print mostrará la función de transferencia como una fracción en texto (al igual que en Matlab). Vamos
a graficar ahora la respuesta al escalón de la planta en lazo cerrado:
6. Utilizando las funciones de numpy np.exp2(), np.exp(), np.sin() y np.cos() grafique las
señales:
a. x[n] = Aαn, en el intervalo de tiempo −10 ≤ n ≤ 20, exponenciales reales considerando A= 2, α = ±0.5; A=
-1.5, α = ±0.95; A= 1, α =±1.4.