lil_SV

Дискретка

Oct 6th, 2022
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.85 KB | None | 0 0
  1. import cmath
  2. import math
  3. import numpy as np
  4.  
  5. n = 16
  6.  
  7.  
  8. def f(x, n):
  9.     return cmath.exp(-complex(0, 1) * ((2 * x * math.pi) / n))
  10.  
  11.  
  12. def get(x):
  13.     if abs(x) < 10e-8:
  14.         return 0
  15.     return x
  16.  
  17.  
  18. def form(a, b):
  19.     s = str(a) + " " + str(b)
  20.     if len(s) < 45:
  21.         s += " " * (45 - len(s))
  22.     return s
  23.  
  24.  
  25. def getNegative(array):
  26.     for i in range(len(array)):
  27.         for j in range(len(array)):
  28.             if array[i][j].imag != 0:
  29.                 array[i][j] *= -1
  30.             array[i][j] *= (1 / len(array))
  31.     return array
  32.  
  33.  
  34. v = np.array([complex(0, 0)] * n)
  35.  
  36. for i in range(n):
  37.     buf = int(input())
  38.     v[i] = complex(buf, 0)
  39.  
  40. matrix = np.array([[complex(0, 0)] * n] * n)
  41. for i in range(n):
  42.     for j in range(n):
  43.         b = f(i * j, n)
  44.         matrix[i][j] = complex(get(b.real), get(b.imag))
  45.  
  46. y = np.dot(matrix, v)
  47.  
  48. for i in range(len(y)):
  49.     y[i] = complex(get(y[i].real), get(y[i].imag))
  50. nmatrix = getNegative(matrix)
  51. z = np.dot(nmatrix, y)
  52.  
  53. print("Матрица перехода 16*16\n")
  54. for i in range(n):
  55.     for j in range(n):
  56.         print(form(str(get(matrix[i][j].real)), str(get(matrix[i][j].imag)) + "i"), end=" | ")
  57.     print()
  58.  
  59. print("\n\nОбратная матрица\n")
  60. for i in range(n):
  61.     for j in range(n):
  62.         print(form(str(get(nmatrix[i][j].real)), str(get(nmatrix[i][j].imag)) + "i"), end=" | ")
  63.     print()
  64.  
  65. print("\nВектор Z")
  66. for i in range(n):
  67.     print(form(str(get(v[i].real)), str(get(v[i].imag)) + "i"))
  68.  
  69. print("\nВектор Z, умноженный на матрицу пререхода")
  70. for i in range(n):
  71.     print(form(str(get(y[i].real)), str(get(y[i].imag)) + "i"))
  72.  
  73. print("\nВектор Y, умноженный на обратную матрицу")
  74. for i in range(n):
  75.     print(form(str(round(get(z[i].real))), str(get(z[i].imag)) + "i"))
  76.  
Add Comment
Please, Sign In to add comment