lil_SV

Вычисление Матриц по дискретке

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