Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- my_A_rows = int(input("введите число строк матрицы коэфициентов: "))
- print("введите матрицу коэфициентов (по строках, пробелы между коэффициентами")
- myA = [list(map(float, (input(f"строка {i+1}: ").split())))
- for i in range(my_A_rows) ]
- myB = map(float, input("Введите матрицу правых частей, пробелы между числами: ").split())
- myB = list(myB)
- def OutputScreen(A, B, pick):
- for stroka in range(len(B)):
- print("(", end='')
- for k in range(len(A[stroka])):
- print("\t{1:10.2f}{0}".format(" " if (pick is None
- or pick != (stroka, k)) else "*", A[stroka][k]), end='')
- print("\t) * (\tX{0}) = (\t{1:10.2f})".format(stroka + 1, B[stroka]))
- # --- end of вывод системы на экран
- # --- перемена местами двух строк системы
- def Swap(A, B, stroka1, stroka2):
- A[stroka1], A[stroka2] = A[stroka2], A[stroka1]
- B[stroka1], B[stroka2] = B[stroka2], B[stroka1]
- # --- end of перемена местами двух строк системы
- # --- деление строки системы на число
- def Division(A, B, stroka, divider):
- A[stroka] = [a / divider for a in A[stroka]]
- B[stroka] /= divider
- # --- end of деление строки системы на число
- # --- сложение строки системы с другой строкой, умноженной на число
- def Addition(A, B, stroka, orig, num):
- A[stroka] = [(n + k * num) for n, k in zip(A[stroka], A[orig])]
- B[stroka] += B[orig] * num
- # --- end of сложение строки системы с другой строкой, умноженной начисло
- def counter(sequence, start=0):
- n = start
- for elem in sequence:
- yield n, elem
- n += 1
- # --- решение системы методом Гаусса (приведением к треугольному виду)
- def Trigon(A, B):
- stolb = 0
- while (stolb < len(B)):
- print("Ищем максимальный по модулю элемент в {0}-м столбце:".format(stolb + 1))
- this = None
- for r in range(stolb, len(A)):
- if this is None or abs(A[r][stolb]) > abs(A[this][stolb]):
- this = r
- if this is None:
- print("решений нет")
- return None
- OutputScreen(A, B, (this, stolb))
- if this != stolb:
- print("Переставляем строку с найденным элементом повыше:")
- Swap(A, B, this, stolb)
- OutputScreen(A, B, (stolb, stolb))
- print("Нормализуем строку с найденным элементом:")
- Division(A, B, stolb, A[stolb][stolb])
- OutputScreen(A, B, (stolb, stolb))
- print("Обрабатываем нижележащие строки:")
- for r in range(stolb + 1, len(A)):
- Addition(A, B, r, stolb, -A[r][stolb])
- OutputScreen(A, B, (stolb, stolb))
- stolb += 1
- print("Матрица приведена к треугольному виду, считаем решение")
- X = [0 for b in B]
- for i in range(len(B) - 1, -1, -1):
- X[i] = B[i] - sum(x * a for x, a in zip(X[(i + 1):], A[i][(i + 1):]))
- print("Получили ответ:")
- print("\n".join("X{0} =\t{1:10.2f}".format(i + 1, x) for i, x in
- counter(X)))
- return X
- # --- end of решение системы методом Гаусса (приведением к треугольному виду)
- print("Исходная система:")
- OutputScreen(myA, myB, None)
- print("Решаем:")
- Trigon(myA, myB)my_A_rows = int(input("введите число строк матрицы коэфициентов: "))
- print("введите матрицу коэфициентов (по строках, пробелы между коэффициентами")
- myA = [list(map(float, (input(f"строка {i+1}: ").split())))
- for i in range(my_A_rows) ]
- myB = map(float, input("Введите матрицу правых частей, пробелы между числами: ").split())
- myB = list(myB)
- def OutputScreen(A, B, pick):
- for stroka in range(len(B)):
- print("(", end='')
- for k in range(len(A[stroka])):
- print("\t{1:10.2f}{0}".format(" " if (pick is None
- or pick != (stroka, k)) else "*", A[stroka][k]), end='')
- print("\t) * (\tX{0}) = (\t{1:10.2f})".format(stroka + 1, B[stroka]))
- # --- end of вывод системы на экран
- # --- перемена местами двух строк системы
- def Swap(A, B, stroka1, stroka2):
- A[stroka1], A[stroka2] = A[stroka2], A[stroka1]
- B[stroka1], B[stroka2] = B[stroka2], B[stroka1]
- # --- end of перемена местами двух строк системы
- # --- деление строки системы на число
- def Division(A, B, stroka, divider):
- A[stroka] = [a / divider for a in A[stroka]]
- B[stroka] /= divider
- # --- end of деление строки системы на число
- # --- сложение строки системы с другой строкой, умноженной на число
- def Addition(A, B, stroka, orig, num):
- A[stroka] = [(n + k * num) for n, k in zip(A[stroka], A[orig])]
- B[stroka] += B[orig] * num
- # --- end of сложение строки системы с другой строкой, умноженной начисло
- def counter(sequence, start=0):
- n = start
- for elem in sequence:
- yield n, elem
- n += 1
- # --- решение системы методом Гаусса (приведением к треугольному виду)
- def Trigon(A, B):
- stolb = 0
- while (stolb < len(B)):
- print("Ищем максимальный по модулю элемент в {0}-м столбце:".format(stolb + 1))
- this = None
- for r in range(stolb, len(A)):
- if this is None or abs(A[r][stolb]) > abs(A[this][stolb]):
- this = r
- if this is None:
- print("решений нет")
- return None
- OutputScreen(A, B, (this, stolb))
- if this != stolb:
- print("Переставляем строку с найденным элементом повыше:")
- Swap(A, B, this, stolb)
- OutputScreen(A, B, (stolb, stolb))
- print("Нормализуем строку с найденным элементом:")
- Division(A, B, stolb, A[stolb][stolb])
- OutputScreen(A, B, (stolb, stolb))
- print("Обрабатываем нижележащие строки:")
- for r in range(stolb + 1, len(A)):
- Addition(A, B, r, stolb, -A[r][stolb])
- OutputScreen(A, B, (stolb, stolb))
- stolb += 1
- print("Матрица приведена к треугольному виду, считаем решение")
- X = [0 for b in B]
- for i in range(len(B) - 1, -1, -1):
- X[i] = B[i] - sum(x * a for x, a in zip(X[(i + 1):], A[i][(i + 1):]))
- print("Получили ответ:")
- print("\n".join("X{0} =\t{1:10.2f}".format(i + 1, x) for i, x in
- counter(X)))
- return X
- # --- end of решение системы методом Гаусса (приведением к треугольному виду)
- print("Исходная система:")
- OutputScreen(myA, myB, None)
- print("Решаем:")
- Trigon(myA, myB)
Advertisement
Add Comment
Please, Sign In to add comment