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