Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3. De una función periódica de período 2𝜋 se conocen los valores en los puntos 0, 𝜋/2, 𝜋
y 3𝜋/2 que son, respectivamente, 2; 4; 6; y 8. Usando la transformada discreta de Fourier,
calcular el valor aproximado de dicha función en 𝜋/4 interpolando mediante un polinomio
trigonometrico.
In [12]: 1 x=[0,np.pi/2,np.pi,3*np.pi/2]
2 y=[2,4,6,8]
3 dy=np.fft.fft(y) #DFT
4 #print(dy)
5
6 plt.scatter(x, y, label='Puntos de la funcion') #Puntos dados de la fun
7
8 c=[]
9 for i in np.arange(0,2*np.pi,0.2):
10 a=5-2*np.cos(i)-2*np.sin(i)-np.cos(2*i) #se calculo el polinomio a
11 c.append(a)
12
13 f=5-2*np.cos(np.pi/4)-2*np.sin(np.pi/4)-np.cos(2*np.pi/4)
14 plt.plot(np.arange(0,2*np.pi,0.2), c, 'r', label='Polinomio trigonometri
15 plt.scatter(np.pi/4, f,label='Polinomio trigonometrico evaluado en pi/4
16 plt.legend(bbox_to_anchor=(1.9, 1), loc='upper right')
17 plt.grid(True)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
Observacion:
En el caso del polinomio que se genera con 16 muestras encontramos un mayor parecido
con la funcion original, lo cual demuestra que tomando una mayor cantidad de muestras
generaremos un Polinomio Trigonometrico cada vez mas parecido al comportamiento de la
funcion que muestreamos, incluso en este caso con solo 8 muestras se ve un
comportamiento bastante parecido a la funcion original, por lo que con solo 8 muestras
In [ ]: 1
In [32]: 1 y=(-3.9894, 4.7119, 1.4207, -3.5892, 2.0137, -3.5936, 1.4349, 4.6775,-3
2 -1.3816, 0.9882) #Puntos de la funcion
3 N=16 #numero de muestras
4 T=1 #periodo
5 dy=np.fft.fft(y) #DFT
6 #print(len(y))
7 M=int(N/2) #Elementos para calcular el Polinomio trigonometrico
8 w=2*np.pi/T
9 a0=dy[0]/N #Coeficiente ao
10 am=dy[M]/N #Coeficiente am
11
12 a=[]
13 b=[]
14 for r in np.arange(1,M,1): #Calculo de coeficientes an y bn
15 an=2*np.real(dy[r])/N
16 bn=-2*np.imag(dy[r])/N
17 a.append(an)
18 b.append(bn)
19 print(a) #Se muestran los coeficientes an y bn
20 print(b)
21
22 result=[]
23 acumulado=[]
24 for t in np.arange(0,T,0.001):
25 for i in np.arange(1,M,1):
26
27 if np.abs(a[i-1])<0.01: #Se desprecian los coeficientes menores
28 a[i-1]=0
29 else:
30 a[i-1]=a[i-1]
31 if np.abs(b[i-1])<0.01:
32 b[i-1]=0
33 else:
34 b[i-1]=b[i-1]
35
36 a3=a[i-1]*np.cos(i*w*t)+b[i-1]*np.sin(i*w*t) #Calculo de la suma
37 acumulado.append(a3)
38 suma=a0+np.sum(acumulado)+am*np.cos(M*w*t) #Calculo de la sumatoria
39 result.append(suma) #Vector que contiene cada uno de los resultados
40 acumulado=[]
41
42 result1=[]
43 acumulado1=[]
44 for t in np.arange(0,T,0.001): #Se toman todos los coeficientes.
45 for i in np.arange(1,M,1):
46 a2=a[i-1]*np.cos(i*w*t)+b[i-1]*np.sin(i*w*t)
47 acumulado1.append(a2)
48 suma1=a0+np.sum(acumulado1)+am*np.cos(M*w*t)
49 result1.append(suma1)
50 acumulado1=[]
51
52 result2=[]
53 for t in np.arange(0,T,0.001): #Comprobando resultado, tomo los coef
54 # y b3=1.9990449807184132
55 cal=a0-4*np.cos(6*w*t)+2*np.sin(3*w*t)
56 result2.append(cal)
57
58
59 plt.figure(4,figsize=(14, 8))
60 plt.plot(np.arange(0,T,0.001),result,'r',
61 label='Polinomio trigonometrico para 16 muestras despreciando l
62 plt.plot(np.arange(0,T,0.001),result1,'g',
63 label='Polinomio trigonometrico para 16 muestras sin despreciar
64 plt.plot(np.arange(0,T,0.001),result2,'b',
65 label='Polinomio trigonometrico para 16 muestras despreciando c
66 plt.scatter(np.arange(0,T,0.0625),y,label='16 muestras de la funcion')
67 plt.legend(bbox_to_anchor=(1.54, 1), loc='upper right')
68 plt.grid(True)
69
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
In [25]: 1 # E-9)
2
3 t=np.arange(0,15,0.2)
4 y=t**4*np.e**(-t)
5
6 plt.figure(1,figsize=(12, 4))
7 plt.plot(t,y,label='Funcion')
8 plt.legend(bbox_to_anchor=(1.2, 1), loc='upper right')
9 plt.grid(True)
10
11 #La funcion se hace cero para valores mayores que t=15 y menores que t=0
12
13 t=np.arange(0,15,0.2) #75 muestras
14 y=t**4*np.e**(-t)
15 N=75
16 dy=np.fft.fft(y)
17
18
19 def transformada_w(w):
20 c=[]
21 DFT=[]
22 for k in np.arange(0,N,1):
23 for n in np.arange(0,N,1):
24 d=y[n]*((np.e**(-w*1j))**(n*k))
25 c.append(d)
26 DFT.append(np.sum(c))
27 c=[]
28 return DFT
29
30 plt.plot(t,transformada_w(2*np.pi/N),label='DFT W')
31 plt.scatter(t,dy,label='DFT fft')
32 plt.legend(bbox_to_anchor=(1.2, 1), loc='upper right')
33
34 plt.figure(2,figsize=(12, 4))
35 plt.plot(t,transformada_w(0),label='DFT w=0')
36 plt.plot(t,transformada_w(1),label='DFT w=1')
37 plt.plot(t,transformada_w(2),label='DFT w=2')
38 plt.plot(t,transformada_w(3),label='DFT w=3')
39 plt.legend(bbox_to_anchor=(1.2, 1), loc='upper right')
40 plt.grid(True)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\collections.py:200:
ComplexWarning: Casting complex values to real discards the imaginary part
offsets = np.asanyarray(offsets, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
C:\Users\Usuario\anaconda3\lib\site-packages\matplotlib\cbook\__init__.py:1
298: ComplexWarning: Casting complex values to real discards the imaginary
part
return np.asarray(x, float)
In [ ]: 1