vadim_sharaf

Untitled

Nov 10th, 2021
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.60 KB | None | 0 0
  1. my_A_rows = int(input("введите число строк матрицы коэфициентов: "))
  2.    
  3. print("введите матрицу коэфициентов (по строках, пробелы между коэффициентами")
  4. myA = [list(map(float, (input(f"строка {i+1}: ").split())))
  5.             for i in range(my_A_rows) ]
  6.  
  7. myB = map(float, input("Введите матрицу правых частей, пробелы между числами: ").split())
  8. myB = list(myB)
  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(A, B, stroka, divider):
  27.     A[stroka] = [a / divider for a in A[stroka]]
  28.     B[stroka] /= divider
  29. # --- end of деление строки системы на число
  30.  
  31. # --- сложение строки системы с другой строкой, умноженной на число
  32. def Addition(A, B, stroka, orig, num):
  33.     A[stroka] = [(n + k * num) for n, k in zip(A[stroka], A[orig])]
  34.     B[stroka] += B[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(A, B):
  44.     stolb = 0
  45.     while (stolb < len(B)):
  46.         print("Ищем максимальный по модулю элемент в {0}-м столбце:".format(stolb + 1))
  47.         this = None
  48.         for r in range(stolb, len(A)):
  49.             if this is None or abs(A[r][stolb]) > abs(A[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(A, B, this, stolb)
  58.             OutputScreen(A, B, (stolb, stolb))
  59.         print("Нормализуем строку с найденным элементом:")
  60.         Division(A, B, stolb, A[stolb][stolb])
  61.         OutputScreen(A, B, (stolb, stolb))
  62.         print("Обрабатываем нижележащие строки:")
  63.         for r in range(stolb + 1, len(A)):
  64.             Addition(A, B, r, stolb, -A[r][stolb])
  65.         OutputScreen(A, B, (stolb, stolb))
  66.         stolb += 1
  67.     print("Матрица приведена к треугольному виду, считаем решение")
  68.     X = [0 for b in B]
  69.     for i in range(len(B) - 1, -1, -1):
  70.         X[i] = B[i] - sum(x * a for x, a in zip(X[(i + 1):], A[i][(i + 1):]))
  71.     print("Получили ответ:")
  72.     print("\n".join("X{0} =\t{1:10.2f}".format(i + 1, x) for i, x in
  73. counter(X)))
  74.     return X
  75. # --- end of решение системы методом Гаусса (приведением к треугольному виду)
  76. print("Исходная система:")
  77. OutputScreen(myA, myB, None)
  78. print("Решаем:")
  79. Trigon(myA, myB)my_A_rows = int(input("введите число строк матрицы коэфициентов: "))
  80.    
  81. print("введите матрицу коэфициентов (по строках, пробелы между коэффициентами")
  82. myA = [list(map(float, (input(f"строка {i+1}: ").split())))
  83.             for i in range(my_A_rows) ]
  84.  
  85. myB = map(float, input("Введите матрицу правых частей, пробелы между числами: ").split())
  86. myB = list(myB)
  87.  
  88. def OutputScreen(A, B, pick):
  89.     for stroka in range(len(B)):
  90.         print("(", end='')
  91.         for k in range(len(A[stroka])):
  92.              print("\t{1:10.2f}{0}".format(" " if (pick is None
  93. or pick != (stroka, k)) else "*", A[stroka][k]), end='')
  94.         print("\t) * (\tX{0}) = (\t{1:10.2f})".format(stroka + 1, B[stroka]))
  95. # --- end of вывод системы на экран
  96.  
  97. # --- перемена местами двух строк системы
  98. def Swap(A, B, stroka1, stroka2):
  99.     A[stroka1], A[stroka2] = A[stroka2], A[stroka1]
  100.     B[stroka1], B[stroka2] = B[stroka2], B[stroka1]
  101. # --- end of перемена местами двух строк системы
  102.  
  103. # --- деление строки системы на число
  104. def Division(A, B, stroka, divider):
  105.     A[stroka] = [a / divider for a in A[stroka]]
  106.     B[stroka] /= divider
  107. # --- end of деление строки системы на число
  108.  
  109. # --- сложение строки системы с другой строкой, умноженной на число
  110. def Addition(A, B, stroka, orig, num):
  111.     A[stroka] = [(n + k * num) for n, k in zip(A[stroka], A[orig])]
  112.     B[stroka] += B[orig] * num
  113. # --- end of сложение строки системы с другой строкой, умноженной начисло
  114. def counter(sequence, start=0):
  115.     n = start
  116.     for elem in sequence:
  117.         yield n, elem
  118.         n += 1
  119.  
  120. # --- решение системы методом Гаусса (приведением к треугольному виду)
  121. def Trigon(A, B):
  122.     stolb = 0
  123.     while (stolb < len(B)):
  124.         print("Ищем максимальный по модулю элемент в {0}-м столбце:".format(stolb + 1))
  125.         this = None
  126.         for r in range(stolb, len(A)):
  127.             if this is None or abs(A[r][stolb]) > abs(A[this][stolb]):
  128.                  this = r
  129.         if this is None:
  130.             print("решений нет")
  131.             return None
  132.         OutputScreen(A, B, (this, stolb))
  133.         if this != stolb:
  134.             print("Переставляем строку с найденным элементом повыше:")
  135.             Swap(A, B, this, stolb)
  136.             OutputScreen(A, B, (stolb, stolb))
  137.         print("Нормализуем строку с найденным элементом:")
  138.         Division(A, B, stolb, A[stolb][stolb])
  139.         OutputScreen(A, B, (stolb, stolb))
  140.         print("Обрабатываем нижележащие строки:")
  141.         for r in range(stolb + 1, len(A)):
  142.             Addition(A, B, r, stolb, -A[r][stolb])
  143.         OutputScreen(A, B, (stolb, stolb))
  144.         stolb += 1
  145.     print("Матрица приведена к треугольному виду, считаем решение")
  146.     X = [0 for b in B]
  147.     for i in range(len(B) - 1, -1, -1):
  148.         X[i] = B[i] - sum(x * a for x, a in zip(X[(i + 1):], A[i][(i + 1):]))
  149.     print("Получили ответ:")
  150.     print("\n".join("X{0} =\t{1:10.2f}".format(i + 1, x) for i, x in
  151. counter(X)))
  152.     return X
  153. # --- end of решение системы методом Гаусса (приведением к треугольному виду)
  154. print("Исходная система:")
  155. OutputScreen(myA, myB, None)
  156. print("Решаем:")
  157. Trigon(myA, myB)
Advertisement
Add Comment
Please, Sign In to add comment