Documentos de Académico
Documentos de Profesional
Documentos de Cultura
0.0.1 1. Crear una función con tres argumentos de salida y dos argumentos de entrada, donde
las entradas están dadas por:
A = [1, 1.1, 1.2, ..., 2] , B = [sin(1), sin(1.2), sin(1.4), ..., sin(3)]
In [1]: import numpy as np #Libreria que contiene herramientas para trabajar con arreglos.
def function1(A,B):
K = A/B
L = A**2 + B**2
M = (A*B)**2
return(K,L,M)
print("A =",A,"\n")
print("B =",B,"\n")
print("A/B = ",K,"\n")
print("A^2 + B^2 = ",L,"\n")
print("(A.B)^2 = ",M,"\n")
A = [1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. ]
1
Aˆ2 + Bˆ2 = [1.70807342 2.07869686 2.41111117 2.68914739 2.90837921 3.07682181
3.21366643 3.34625051 3.50574166 3.72221706 4.01991486]
0.0.3 2. Cree una funcion que reciba como argumento una matriz 3x3 generada aleatoriamente.
La salida de dicha función deberá retornar lo siguiente:
a. La traspuesta de la matriz multiplicada por su inversa
return(Producto,Raiz_det,Sum_columnas)
print("M = \n",Mat,"\n")
print("M(Traspuesta) * M(Inversa) = \n",prod,"\n")
2
print("Raiz cuadrada del determinante de M = ",raizdet,"\n")
print("Sumatoria de cada columna de M = ",sumcolum,"\n")
M =
[[-0.06855431 -0.19211615 0.19045223]
[-0.22074909 0.48262691 -0.03188747]
[ 0.57225029 -0.47718619 0.20120564]]
M(Traspuesta) * M(Inversa) =
[[ 0.13001601 -0.26700187 1.13698585]
[ 0.11643032 1.37234906 -0.48877938]
[ 0.75355367 -0.10534719 0.35179353]]
0.0.4 3. Generar una figura de superficie y una figura de contorno en 3D, de la siguiente
ecuación:
z = e x cos(y) + ey sin( x )
Donde x, y son vectores que van desde -4 hasta 4 con un tamaño de paso de 0.1.
x = np.arange(-4.0,4.1,0.1)
y = x
#Grafica de superficie en 3D
fig1 = plt.figure(figsize=(8,6))
ax1 = Axes3D(fig1)
ax1.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=pl.cm.hot)
#ax1.contourf(X, Y, Z, zdir='z', offset=-2, cmap=pl.cm.hot)
ax1.set_title('Grafica de superficie 3D',fontsize=20)
ax1.set_xlabel('x',fontsize=20)
ax1.set_ylabel('y',fontsize=20)
ax1.set_zlabel('z',fontsize=20)
3
ax1.tick_params(labelsize=20)#Cambiar el tamaño de los numeros
#en cada uno de los ejes
plt.show()
4
0.0.5 4. Cree una función que reciba el periodo de una señal y retorne un tren de pulsos con
un ciclo de dureza del 50%. Grafique la función obtenida entre 0 y 10s. ¿El resultado es
como esperaba?
In [5]: def gra_sencuadra(periodo):
fs = 1000
time = 10 #Tiempo de simulacion
aux = time
duty = 0.5 # Ciclo de dureza
y3 = [] #crear una lista vacia
"""
Se genera una señal con periodos completos y solo se muestra
la porcion indicada por la variable tiempo, si el tiempo
divido el periodo no es exacto, se incrementa el tiempo hasta que sea así.
"""
while 1:
if ((aux%periodo)==0):
break
else:
5
aux = aux+1
for i in range(0,aux,periodo):
y = np.linspace(1,1,(fs*duty*periodo)) #vector de 1's durante
# el ciclo de encendido
plt.figure(figsize=(8,6))
plt.plot(t,y3)
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
plt.xlabel('Tiempo (seg)',FontSize=20)
plt.ylabel('Amplitud',FontSize=20)
plt.title('Onda Periódica Cuadrada',FontSize=20)
plt.tick_params(labelsize=20) #Cambiar el tamaño de los numeros
#en cada uno de los ejes
plt.grid()
plt.show()
6
0.0.6 5. Repita lo anterior para una señal diente de sierra de pendiente m = 1.
In [7]: def gra_sendiensierra(periodo):
fs = 1000
time = 10 #Tiempo de simulacion
aux = time
duty = 0.5 # Ciclo de dureza
y3 = [] #crear una lista vacia
"""
Se genera una señal con periodos completos y solo se muestra
la porcion indicada por la variable tiempo, si el tiempo
divido el periodo no es exacto, se incrementa el tiempo hasta que sea así.
"""
while 1:
if ((aux%periodo)==0):
break
else:
aux = aux+1
7
for i in range(0,aux,periodo):
y = np.linspace(0,1,(fs*periodo))
y3 = np.concatenate((y3,y))
plt.figure(figsize=(8,6))
plt.plot(t,y3)
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
plt.xlabel('Tiempo (seg)',FontSize=20)
plt.ylabel('Amplitud',FontSize=20)
plt.title('Onda Periódica Diente de Sierra, m=1',FontSize=20)
plt.tick_params(labelsize=20)#Cambiar el tamaño de los numeros
#en cada uno de los ejes
plt.grid()
plt.show()
8
0.0.7 6. Consulte como usar las funciones “square” y “sawtooth” de matlab. Compare los
resultados de los numerales 4 y 5 con el resultado de usar dichas funciones.
In [9]: from scipy import signal
time = 10 #Tiempo de simulacion
fs = 10000 #Cantidad de puntos entre el valor maximo y minimo
plt.figure(figsize=(14,7))
plt.subplot(1,2,1)
plt.plot(t, signal.square((2*np.pi/periodo)*t,duty))
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
plt.xlabel('Tiempo (seg)',FontSize=20)
plt.ylabel('Amplitud',FontSize=20)
plt.title("Funcion 'square' de Python",FontSize=20)
plt.tick_params(labelsize=20)
plt.grid()
plt.subplot(1,2,2)
plt.plot(t, signal.sawtooth((2*np.pi/periodo)*t,m))
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
plt.xlabel('Tiempo (seg)',FontSize=20)
plt.title("Funcion 'sawtooth' de Python",FontSize=20)
plt.tick_params(labelsize=20)#Cambiar el tamaño de los numeros
#en cada uno de los ejes
plt.grid()
plt.show()
9
In [10]: time = 10 #Tiempo de simulacion
fs = 10000 #Cantidad de puntos entre el valor maximo y minimo
aux=time
# crear de nuevo la señal cuadrada
y_cuadrada = [] #crear una lista vacia
while 1:
if ((aux%periodo)==0):
break
else:
aux = aux+1
for i in range(0,aux,periodo):
y = np.linspace(1,1,(fs*duty*periodo)) #vector de 1's
# durante el ciclo de encendido
y_cuadrada = np.concatenate((y_cuadrada,y,y2))
10
y_cuadrada = (2*y_cuadrada)-1 # Para obtener amplitudes entre -1 y 1
t_cuad = np.linspace(0,aux,len(y_cuadrada)) # Se crea un nuevo vector
# temporal con el tamaño de 'y3'
for i in range(0,aux,periodo):
y = np.linspace(0,1,(fs*periodo))
y_diensier = np.concatenate((y_diensier,y))
plt.figure(figsize=(15,14))
plt.subplot(2,2,1)
plt.plot(t, signal.square((2*np.pi/periodo)*t,duty))
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
plt.ylabel('Amplitud',FontSize=20)
plt.title("Funcion 'square' de Python",FontSize=20)
plt.tick_params(labelsize=20)
plt.grid()
plt.subplot(2,2,2)
plt.plot(t, signal.sawtooth((2*np.pi/periodo)*t,m))
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
plt.title("Funcion 'sawtooth' de Python",FontSize=20)
plt.tick_params(labelsize=20)
plt.grid()
plt.subplot(2,2,3)
plt.plot(t_cuad, y_cuadrada)
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
11
plt.xlabel('Tiempo (seg)',FontSize=20)
plt.ylabel('Amplitud',FontSize=20)
plt.title("Funcion 'square' creada",FontSize=20)
plt.tick_params(labelsize=20)
plt.grid()
plt.subplot(2,2,4)
plt.plot(t_die, y_diensier)
plt.xlim([0, time])
plt.ylim([-1.2,1.2])
plt.xlabel('Tiempo (seg)',FontSize=20)
plt.title("Funcion 'sawtooth' creada",FontSize=20)
plt.tick_params(labelsize=20)
plt.grid()
plt.show()
warnings.filterwarnings("ignore")
12
0.0.8 7. Cree un vector aleatorio de “1s” y “0s” con 1000 elementos. Agregue un ruido con una
desviación estándar de 0.1. Grafique el histograma del resultado.
a. ¿Qué distribución de probabilidad siguen los datos?
In [11]: Fsize=10000
simbolos = np.array([0, 1]) # simbolos son '1' o '0'
vector = np.random.choice(simbolos, size=Fsize) # crear vector aleatorio
# de '1's y '0's
13
a. Los datos siguen una distribución de probabilidad Gaussiana, con media ≈ 0 y desviacion
estandar ≈ 0.1.
b. Según el resultado, un umbral de 0.5 hará que se garantice la menor tasa de error de bit.
14