0% encontró este documento útil (0 votos)
51 vistas8 páginas

Práctica No. 1vpython

Este documento introduce Python como lenguaje de programación y sus aplicaciones en ingeniería de control. Describe los elementos básicos de Python como tipos de datos, operadores, estructuras de control y funciones. También presenta diferentes entornos de desarrollo integrados y la biblioteca de funciones de Python para sistemas de control.

Cargado por

jorge.garcia
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
51 vistas8 páginas

Práctica No. 1vpython

Este documento introduce Python como lenguaje de programación y sus aplicaciones en ingeniería de control. Describe los elementos básicos de Python como tipos de datos, operadores, estructuras de control y funciones. También presenta diferentes entornos de desarrollo integrados y la biblioteca de funciones de Python para sistemas de control.

Cargado por

jorge.garcia
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

Práctica No.

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.

Biblioteca de funciones de Python para sistemas de control.


La biblioteca de sistemas de control de Python (Python-Control) es un paquete de Python que implementa
operaciones básicas para el análisis y el diseño de sistemas de control de retroalimentación.
Características
• Sistemas lineales de entrada/salida en espacio de estado y dominio de frecuencia
• Modelado, simulación y análisis de sistemas de entrada/salida no lineales
• Álgebra de diagrama de bloques: interconexiones en serie, en paralelo y de retroalimentación
• Respuesta del tiempo: inicial, paso, impulso
• Respuesta de frecuencia: diagramas de Bode y Nyquist
• Análisis de control: estabilidad, alcanzabilidad, observabilidad, márgenes de estabilidad
• Diseño de control: colocación de valor propio, LQR, H2, Hinf
• Reducción de modelos: realizaciones equilibradas, valores singulares de Hankel
• Diseño del estimador: estimador cuadrático lineal (filtro de Kalman)

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.

Para instalar en IDE distintos a Anacoda usando pip desde el terminal:


>>>sudo pip install slycot # opcional
>>>sudo pip install control

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

Si desea tener un entorno similar a MATLAB, use el módulo de compatibilidad de MATLAB:


>>> from control.matlab import *

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:

#Este es un comentario porque empieza con #


#Esta es una celda de código.
#Se ejecuta con ctrl+enter.

#La función print puede imprimir varias cosas


print("Hola Mundo") #impresión de un string
print(4) # impresión de un número

#Intenta imprimir el string "IMAGENES":

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)

print("- Impresion de los elementos de la lista:")


# Imprimir los strings de mi_lista por separado
mi_lista=["img","python","numpy"]
for s in mi_lista:
print(s)# este print va con indentación
#calcular la suma de los números e imprimirla
suma=0
mis_numeros=[5,8,17,12]
for numero in mis_numeros:
suma=suma+numero
print("- La suma de los números es:")
print(suma)

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.

#esta funcion recibe dos números y devuelve su suma


def sumar(a,b):
return a+b
c=sumar(2,5)
print("2+5=")
print(c)
#esta funcion recibe una lista y devuelve la suma de sus elementos
def sumar_todos(lista):
suma=0
for v in lista:
suma+=v
return suma
mi_lista=[54,12,99,15]
print("los elementos de la lista suman:")
print(sumar_todos(mi_lista))

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

#Modelo como función de transferencia


num = [193.3]
den = [1.0, 18.735, 0.0]
sys = ctrl.tf(num,den) #Lazo abierto
print(sys)

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:

#Modelo en lazo cerrado


sys_cl = ctrl.feedback(sys,1)
#Respuesta al escalón
t,y = ctrl.step_response(sys_cl)
#Graficas
plt.plot(t,y)
plt.grid(True)
plt.title(u"Respuesta al escalón")
plt.xlabel("segundos")

Lo que nos dará el siguiente resultado:

Para obtener el diagrama de bode:


plt.figure(2)
mag,phase,w=ctrl.bode(sys,dB=True)
plt. show()
Para visualizar el diagrama de polos y ceros:
from control.pzmap import pzmap
plt.figure(3)
polos,zeros = pzmap(sys_cl), plt.grid(True)
print(polos[0])
print(polos[1])

5. Señales en tiempo discreto.


Para generar y graficar algunas de las señales en tiempo discreto se utilizará la biblioteca de Python numpy y
la biblioteca matplotlib. Por ejemplo, para la función impulso unitario:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-10,10,21)
y=np.zeros(21)
y[10]=1
plt.stem(x,y)
plt.title('u(n)')
plt.xlabel('n')
plt.show()

Genere y grafique las siguientes señales impulso:


d1[n] = 2δ[n], -20 ≤ n ≤ 20
d2[n] = 3.5δ[n-115], 100 ≤ n ≤ 150
d3[n] = -0.5δ[n], -1 ≤ n ≤ 20
d4[n] = δ[n+110], -120 ≤ n ≤ -100

Para una señal escalón unitario se tendría:


x=np.linspace(-10,10,21)
y=np.zeros(21)
y[10:21]=1
plt.stem(x,y)
plt.title('u(n)')
plt.xlabel('n')
plt.show()

Genere y grafique las siguientes señales en escalón


u1[n] = 2u[n], -10 ≤ n ≤ 30
u2[n] = u[n-10], 0 ≤ n ≤ 50
u3[n] = -0.5u[n+100], -120 ≤ n ≤ -20

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.

b. x[n] = Asin(ω), funciones senoidales y cosenoidales


x1[n] = cos(πn/15), -20 ≤ n ≤ 40
x2[n] = 2sin(πn/15+π/3), -20 ≤ n ≤ 50
x3[n] = cos[n/2], 0 ≤ n ≤ 40

c. La función senoidal amortiguada x(n) = 10e-0.1n sin (πn/9+π/3), en el intervalo -20 ≤ n ≤ 40

7. Reporte su procedimiento, gráficas, análisis de resultados, observaciones y conclusiones.

También podría gustarte