HW8 Complete
This commit is contained in:
52
HW8/main.py
Normal file
52
HW8/main.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import math
|
||||
import time
|
||||
import numpy as np
|
||||
|
||||
def saveResults(size, t):
|
||||
with open("results.txt", "a") as myfile:
|
||||
print("Size: " + str(size) + " Time: " + str(t), file=myfile)
|
||||
myfile.flush()
|
||||
myfile.close()
|
||||
|
||||
def getV(n, sign):
|
||||
v = []
|
||||
for j in range(0, n):
|
||||
v.append(complex(math.cos((j*2*math.pi)/n), math.sin((j*2*math.pi)/n)))
|
||||
return v if sign == 1 else conjugate(v, n)
|
||||
|
||||
def conjugate(v, n):
|
||||
for j in range(0, n):
|
||||
v[j] = v[j].conjugate()
|
||||
return v
|
||||
|
||||
def FFT(P, W, n):
|
||||
if n == 1:
|
||||
return [P[0]]
|
||||
evenP = [P[j] for j in range(0, n, 2)]
|
||||
oddP = [P[j] for j in range(1, n, 2)]
|
||||
W2 = [W[j]*W[j] for j in range(0, n//2)]
|
||||
sEven = FFT(evenP, W2, n//2)
|
||||
sOdd = FFT(oddP, W2, n//2)
|
||||
return [sEven[j]+W[j]*sOdd[j] for j in range(0, n//2)] + [sEven[j]-W[j]*sOdd[j] for j in range(0, n//2)]
|
||||
|
||||
def main():
|
||||
# n = 8
|
||||
# p = [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
# print("Forward FFT")
|
||||
# sol = FFT([complex(p[i], 0) for i in range(0, n)], getV(n, +1), n)
|
||||
# print(sol)
|
||||
# print("Inverse FFT")
|
||||
# back = [s / 8 for s in FFT(sol, getV(n, -1), n)]
|
||||
# print("Answer")
|
||||
# print(back)
|
||||
pow2 = []
|
||||
for i in range(7, 55):
|
||||
pow2.append(2 ** i)
|
||||
for n in pow2:
|
||||
P = np.arange(n)
|
||||
start = time.time()
|
||||
sol = FFT([complex(P[i], 0) for i in range(0, n)], getV(n, +1), n)
|
||||
stop = time.time()
|
||||
#inverseSol = FFT([complex(P[i], 0) for i in range(0, n)], getV(n, +1), n)
|
||||
saveResults(n, stop-start)
|
||||
main()
|
||||
Reference in New Issue
Block a user