Алгоритмы и структуры данных · 24 из 30
Метод Гаусса
Система линейных уравнений — главная задача вычислительной математики, и решают её методом Гаусса: прямой ход превращает систему в треугольную, обратный находит неизвестные с конца. Борис Аркадьевич предупреждает: если на диагонали оказался ноль, наивная программа делит на него — поэтому строку с самым большим по модулю числом в столбце надо ставить наверх.
Что сделать
Решите систему линейных уравнений методом Гаусса с выбором главного элемента; если решения нет или оно не одно — верните None.
Что приходит
a— матрица коэффициентов n × n: список строк; менять её нельзяb— столбец правых частей: список из n чисел; менять его нельзя
Что вернуть
Список из n неизвестных, каждое округлено до шести знаков, или None, если система вырождена.
Допишите функцию gauss в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
Система 2x + y = 3, x + 3y = 5: gauss([[2, 1], [1, 3]], [3, 5]). Прямой ход вычитает из второй строки половину первой, обратный находит y = 1,4 и потом x = 0,8 — ответ [0.8, 1.4].
gauss([[2, 1], [1, 3]], [3, 5])
[0.8, 1.4]
Прямой ход: для каждого столбца k по порядку найдите среди строк с k и ниже ту, где число в столбце k самое большое по модулю, и поменяйте её местами со строкой k. Если и это число по модулю меньше 1e-9 — система вырождена, верните None. Затем вычтите строку k из всех строк ниже, умножив её так, чтобы в столбце k под диагональю получились нули.
Обратный ход: неизвестные находятся с последнего — из последней строки, потом из предпоследней, подставив уже найденные.
Исходные матрицу и столбец не меняйте: работайте с копией. Каждое неизвестное округлите функцией round(…, 6).
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.