Advertisement
Pug_coder

Untitled

May 7th, 2023
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. import numpy as np
  2.  
  3.  
  4. def multiplying_matrix(a, b, c, x):
  5. res = [0 for _ in range(len(x))]
  6.  
  7. for i in range(len(x)):
  8. if i != 0:
  9. res[i] += a[i - 1] * x[i - 1]
  10. res[i] += b[i] * x[i]
  11. if i != len(x) - 1:
  12. res[i] += c[i] * x[i + 1]
  13. return res
  14.  
  15.  
  16. def find_x(a, b, c, d):
  17. alphas = [-c[0] / b[0]]
  18. betas = [d[0] / b[0]]
  19. for i in range(1, len(d) - 1):
  20. alpha = round(-c[i] / (b[i] + alphas[i - 1] * a[i - 1]), 5)
  21. alphas.append(alpha)
  22. beta = (d[i] - a[i - 1] * betas[i - 1]) / (
  23. b[i] + alphas[i - 1] * a[i - 1]
  24. )
  25. betas.append(beta)
  26. beta = (d[len(d) - 1] - a[len(d) - 2] * betas[len(d) - 2]) / (
  27. b[len(d) - 1] + alphas[len(d) - 2] * a[len(d) - 2]
  28. )
  29. betas.append(beta)
  30. local_x = [0 for _ in range(len(d))]
  31. local_x[len(d) - 1] = betas[len(d) - 1]
  32. for i in range(len(d) - 2, -1, -1):
  33. local_x[i] = local_x[i + 1] * alphas[i] + betas[i]
  34. return local_x
  35.  
  36.  
  37. def find_error(a, b, c, d, d2, x):
  38. d = np.array(d)
  39. d2 = np.array(d2)
  40. r = d2 - d
  41. m = np.zeros([len(x), len(x)])
  42. for i in range(len(x)):
  43. m[i][i] = b[i]
  44. if i > 0:
  45. m[i][i - 1] = a[i - 1]
  46. if i < len(x) - 1:
  47. m[i][i + 1] = c[i]
  48. m_reversed = np.matrix(m).I
  49. err = np.matmul(m_reversed, r).tolist()[0]
  50. return [x[i] - err[i] for i in range(len(x))], err
  51.  
  52.  
  53. def filling(matrix):
  54. a = [
  55. matrix[i][i + 1] for i in range(len(matrix) - 1)
  56. ]
  57. b = [
  58. matrix[i][i] for i in range(len(matrix))
  59. ]
  60. c = [
  61. matrix[i + 1][i] for i in range(len(matrix) - 1)
  62. ]
  63. return a, b, c
  64.  
  65.  
  66. if __name__ == "__main__":
  67. M = [
  68. [4, 1, 0, 0],
  69. [1, 4, 1, 0],
  70. [0, 1, 4, 1],
  71. [0, 0, 1, 4],
  72. ]
  73. a, b, c = filling(M)
  74. d = [5, 6, 6, 5]
  75.  
  76. x = find_x(a, b, c, d)
  77. print("Полученный вектор X:", x)
  78.  
  79. d2 = multiplying_matrix(a, b, c, x)
  80. print("M * x:", d2)
  81.  
  82. x_real, error = find_error(a, b, c, d, d2, x)
  83. print("Ошибка:", error)
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement