Advertisement
Ralip

Метод Гаусса 4на4

Aug 15th, 2022 (edited)
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. def swapel(yrav, a, b): # Поменять местами два элемента в уравнении
  2. global sistema
  3. t = sistema[yrav][a]
  4. sistema[yrav][a] = sistema[yrav][b]
  5. sistema[yrav][b] = t
  6. return
  7.  
  8.  
  9. def swapyr(yrav1, yrav2): # Поменять местами два уравнения
  10. global sistema
  11. t = [0, 0, 0, 0, 0]
  12. for elem in range(5):
  13. t[elem] = sistema[yrav1][elem]
  14. for elem in range(5):
  15. sistema[yrav1][elem] = sistema[yrav2][elem]
  16. for elem in range(5):
  17. sistema[yrav2][elem] = t[elem]
  18.  
  19.  
  20. def output(): # Вывести систему в консоль
  21. global sistema
  22. for yrav in range(4):
  23. for elem in range(5):
  24. if elem != 4:
  25. print(sistema[yrav][elem], '*x', elem + 1, sep='', end='')
  26. else:
  27. print(sistema[yrav][elem], sep='', end='')
  28. if elem == 3:
  29. print(' = ', sep='', end='')
  30. elif elem == 4:
  31. print('')
  32. else:
  33. print(' + ', sep='', end='')
  34.  
  35.  
  36. def nullglav(): # Меняет уравнения местами, чтобы не было нулей на главной диагонали
  37. global sistema
  38. if sistema[0][0] != 0 and sistema[1][1] != 0 and sistema[2][2] != 0 and sistema[3][3] != 0:
  39. return 0
  40. while sistema[0][0] == 0 or sistema[1][1] == 0 or sistema[2][2] == 0 or sistema[3][3] == 0:
  41. for i in range(3):
  42. for k in range(3):
  43. swapyr(i,k)
  44. if sistema[0][0] != 0 and sistema[1][1] != 0 and sistema[2][2] != 0 and sistema[3][3] != 0:
  45. return
  46. return 1
  47.  
  48.  
  49. sistema = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] # массив коэффициентов
  50. x = [0, 0, 0, 0] # корни
  51.  
  52. # ввод данных:
  53. nenull = 1 # - флаг, отвечающий за то, чтобы хотя бы один коэффициент отличался от нуля
  54. for yrav in range(4):
  55. print(yrav + 1, 'уравнение в системе:')
  56. if nenull == False:
  57. print('!!!Все коэффициенты уравнения равны нулю.')
  58. exit()
  59. nenull = 0
  60. for elem in range(5):
  61. if elem != 4:
  62. print('x', elem + 1, ' * ', sep='', end='')
  63. else:
  64. print('Правая часть уравнения = ', sep='', end='')
  65. koef = float(input())
  66. if elem != 4 and koef != 0:
  67. nenull = 1
  68. sistema[yrav][elem] = koef
  69.  
  70. # вывод получившейся системы:
  71. print('\nСистема уравнений:')
  72. output()
  73.  
  74. for k in range(4):
  75. j = k+1
  76. while j < 4:
  77. d = sistema[j][k] / sistema[k][k]
  78. i = k
  79. while i < 4:
  80. sistema[j][i] = sistema[j][i] - d * sistema[k][i]
  81. if abs(sistema[k][k]) >= abs(sistema[i][k]): # уменьшение ошибки округления
  82. sistema[i][k] = round(sistema[i][k], 5)
  83. i += 1
  84. sistema[j][4] = sistema[j][4] - d * sistema[k][4]
  85. j += 1
  86.  
  87. # обратный ход
  88. k = 4-1
  89. while k >= 0:
  90. d = 0
  91. j = k + 1
  92. while j < 4:
  93. s = sistema[k][j] * x[j]
  94. d = d + s
  95. j += 1
  96. x[k] = (sistema[k][4] - d) / sistema[k][k]
  97. k = k - 1
  98.  
  99. print('')
  100. #output()
  101. print('Корни:')
  102. for i in range(4):
  103. print('x', i + 1, ' = ', round(x[i],4), sep='')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement