Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cmath
- import math
- import numpy as np
- n = 16
- def f(x, n):
- return cmath.exp(-complex(0, 1) * ((2 * x * math.pi) / n))
- def get(x):
- if abs(x) < 10e-8:
- return 0
- return x
- def form(a, b):
- s = str(a) + " " + str(b)
- if len(s) < 45:
- s += " " * (45 - len(s))
- return s
- def getNegative(array):
- for i in range(len(array)):
- for j in range(len(array)):
- if array[i][j].imag != 0:
- array[i][j] *= -1
- array[i][j] *= (1 / len(array))
- return array
- v = np.array([complex(0, 0)] * n)
- for i in range(n):
- buf = int(input())
- v[i] = complex(buf, 0)
- matrix = np.array([[complex(0, 0)] * n] * n)
- for i in range(n):
- for j in range(n):
- b = f(i * j, n)
- matrix[i][j] = complex(get(b.real), get(b.imag))
- y = np.dot(matrix, v)
- for i in range(len(y)):
- y[i] = complex(get(y[i].real), get(y[i].imag))
- nmatrix = getNegative(matrix)
- z = np.dot(nmatrix, y)
- print("Матрица перехода 16*16\n")
- for i in range(n):
- for j in range(n):
- print(form(str(get(matrix[i][j].real)), str(get(matrix[i][j].imag)) + "i"), end=" | ")
- print()
- print("\n\nОбратная матрица\n")
- for i in range(n):
- for j in range(n):
- print(form(str(get(nmatrix[i][j].real)), str(get(nmatrix[i][j].imag)) + "i"), end=" | ")
- print()
- print("\nВектор Z")
- for i in range(n):
- print(form(str(get(v[i].real)), str(get(v[i].imag)) + "i"))
- print("\nВектор Z, умноженный на матрицу пререхода")
- for i in range(n):
- print(form(str(get(y[i].real)), str(get(y[i].imag)) + "i"))
- print("\nВектор Y, умноженный на обратную матрицу")
- for i in range(n):
- print(form(str(round(get(z[i].real))), str(get(z[i].imag)) + "i"))
Add Comment
Please, Sign In to add comment