Advertisement
vadim_sharaf

Untitled

Nov 10th, 2021
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.86 KB | None | 0 0
  1. num_str = int(input("введите число строк матрицы коэфициентов: "))
  2.    
  3. print("введите матрицу коэфициентов (по строках, пробелы между коэффициентами")
  4. odds = [list(map(float, (input(f"строка {i+1}: ").split())))
  5.             for i in range(num_str) ]
  6.  
  7. ans = map(float, input("Введите матрицу правых частей, пробелы между числами: ").split())
  8. ans = list(ans)
  9.  
  10. #def OutputScreen(A, B, pick):
  11.    # for stroka in range(len(B)):
  12.       #  print("(", end='')
  13.       #  for k in range(len(A[stroka])):
  14.         #     print("\t{1:10.2f}{0}".format(" " if (pick is None
  15. #or pick != (stroka, k)) else "*", A[stroka][k]), end='')
  16.  #       print("\t) * (\tX{0}) = (\t{1:10.2f})".format(stroka + 1, B[stroka]))
  17. # --- end of вывод системы на экран
  18.  
  19. # --- перемена местами двух строк системы
  20. def Swap(A, B, stroka1, stroka2):
  21.     A[stroka1], A[stroka2] = A[stroka2], A[stroka1]
  22.     B[stroka1], B[stroka2] = B[stroka2], B[stroka1]
  23. # --- end of перемена местами двух строк системы
  24.  
  25. # --- деление строки системы на число
  26. def Division(t, d, stroka, divider):
  27.     t[stroka] = [k / divider for k in t[stroka]]
  28.     d[stroka] /= divider
  29. # --- end of деление строки системы на число
  30.  
  31. # --- сложение строки системы с другой строкой, умноженной на число
  32. def Addition(x, y, stroka, orig, num):
  33.     x[stroka] = [(n + k * num) for n, k in zip(x[stroka], x[orig])]
  34.     y[stroka] += y[orig] * num
  35. # --- end of сложение строки системы с другой строкой, умноженной начисло
  36. def counter(sequence, start=0):
  37.     n = start
  38.     for elem in sequence:
  39.         yield n, elem
  40.         n += 1
  41.  
  42. # --- решение системы методом Гаусса (приведением к треугольному виду)
  43. def Trigon(x, y):
  44.     stolb = 0
  45.     while (stolb < len(y)):
  46.         #print("Ищем максимальный по модулю элемент в {0}-м столбце:".format(stolb + 1))
  47.         this = None
  48.         for r in range(stolb, len(x)):
  49.             if this is None or abs(x[r][stolb]) > abs(x[this][stolb]):
  50.                  this = r
  51.         if this is None:
  52.             print("решений нет")
  53.             return None
  54.         #OutputScreen(A, B, (this, stolb))
  55.         if this != stolb:
  56.            # print("Переставляем строку с найденным элементом повыше:")
  57.             Swap(x, y, this, stolb)
  58.             #OutputScreen(A, B, (stolb, stolb))
  59.         #print("Нормализуем строку с найденным элементом:")
  60.         Division(x, y, stolb, x[stolb][stolb])
  61.         #OutputScreen(A, B, (stolb, stolb))
  62.         #print("Обрабатываем нижележащие строки:")
  63.         for r in range(stolb + 1, len(x)):
  64.             Addition(x, y, r, stolb, -x[r][stolb])
  65.         #OutputScreen(A, B, (stolb, stolb))
  66.         stolb += 1
  67.     #print("Матрица приведена к треугольному виду, считаем решение")
  68.     F = [0 for b in y]
  69.     for k in range(len(y) - 1, -1, -1):
  70.         F[k] = y[k] - sum(n * a for n, a in zip(F[(k + 1):], x[k][(k + 1):]))
  71.     print("Ответ:")
  72.     print("\n".join("X{0}=\t{1:10.2f}".format(k + 1, n) for k, n in
  73. counter(F))) #("\t) * (\tX{0}) = (\t{1:10.2f})".format(stroka + 1, B[stroka]))
  74.     return F
  75. # --- end of решение системы методом Гаусса (приведением к треугольному виду)
  76. #print("Исходная система:")
  77. #OutputScreen(myA, myB, None)
  78. #print("Решаем:")
  79. Trigon(odds, ans)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement