Main menu

Прямые методы решения систем линейных уравнений (СЛАУ): метод Гаусса

Значение СЛАУ в вычислительной практике

Системы линейных алгебраических уравнений (СЛАУ) составляют основу вычислительной математики. К решению СЛАУ сводятся задачи из самых разных областей: от аппроксимации функций и численного интегрирования дифференциальных уравнений до расчета электрических цепей, анализа строительных конструкций методом конечных элементов и алгоритмов машинного обучения. Огромное количество нелинейных задач в процессе линеаризации (например, в многомерном методе Ньютона) в конечном итоге требует многократного решения СЛАУ на каждой итерации.

Методы решения СЛАУ делятся на две большие группы: прямые (точные) и итерационные. Прямые методы позволяют найти точное решение (в предположении отсутствия ошибок округления) за заранее известное, конечное число арифметических операций. Итерационные методы строят последовательность приближений, которая стремится к точному решению бесконечно. Сегодня мы рассмотрим самый известный прямой метод.

Классический алгоритм Гаусса

Метод Гаусса (метод последовательного исключения неизвестных) изучается еще в школьном курсе алгебры. Его алгоритмическая суть заключается в преобразовании исходной матрицы системы к верхнетреугольному виду с помощью элементарных преобразований строк. Алгоритм Гаусса состоит из двух этапов: прямого хода и обратного хода.

Прямой ход начинается с первого уравнения. С помощью первого уравнения переменная x_1 исключается из всех последующих уравнений системы путем умножения первой строки на соответствующий коэффициент и вычитания ее из остальных строк. Затем мы переходим ко второму уравнению и исключаем переменную x_2 из всех уравнений ниже второго. Этот процесс продолжается до тех пор, пока в последнем уравнении не останется только одна неизвестная переменная x_n. После прямого хода матрица коэффициентов приобретает верхнетреугольный вид: ниже главной диагонали находятся только нули.

Обратный ход начинается с конца. Из последнего уравнения тривиально находится значение переменной x_n. Найденное значение подставляется в предпоследнее уравнение, откуда вычисляется x_{n-1}. Процесс «поднятия» по треугольной матрице продолжается вплоть до первого уравнения, в результате чего находятся все неизвестные вектора решения.

Проблема малых ведущих элементов и выбор главного элемента

При программной реализации классического метода Гаусса возникает серьезная проблема. Если коэффициент на главной диагонали (ведущий элемент), на который происходит деление при прямом ходе, равен нулю, алгоритм немедленно выдает ошибку деления на ноль. Но даже если он не равен нулю, а просто очень близок к нему, возникает явление катастрофической потери точности из-за ошибок округления машинной арифметики при операциях с числами разных порядков.

Для решения этой проблемы применяется модификация метода Гаусса с выбором главного элемента (частичный пивотинг). На каждом шаге прямого хода программа просматривает текущий столбец (среди не преобразованных строк) и находит максимальный по модулю элемент. Затем строка с этим максимальным элементом меняется местами с текущей рабочей строкой. Это гарантирует деление на наибольшее возможное число, что минимизирует накопление ошибок округления и делает метод Гаусса исключительно надежным инструментом для решения плотных СЛАУ умеренной размерности.

Подробнее

Численное интегрирование: квадратурные формулы и методы Ньютона-Котеса

Суть численного интегрирования

Операция вычисления определенного интеграла функции является фундаментальной в математике и физике. Она отвечает за вычисление площадей криволинейных трапеций, объемов тел, пройденного пути по графику скорости, работы переменной силы и множества других величин. Аналитически определенный интеграл вычисляется с помощью формулы Ньютона-Лейбница, которая требует нахождения первообразной функции. Однако существует огромный класс так называемых "неберущихся" интегралов — функций, первообразные которых не выражаются через элементарные функции (например, интеграл от e^(-x^2) в теории вероятностей или интеграл sin(x)/x). Кроме того, часто подынтегральная функция задана не аналитически, а в виде таблицы экспериментальных данных. В этих случаях спасает численное интегрирование.

Численное интегрирование базируется на квадратурных формулах. Идея состоит в том, чтобы приближенно заменить интеграл конечной суммой значений функции в заданных точках (узлах интегрирования), умноженных на определенные весовые коэффициенты. Отрезок интегрирования разбивается на множество мелких подотрезков, вычисляется площадь на каждом из них, а результаты суммируются.

Методы прямоугольников и трапеций

Самый простой подход — методы прямоугольников. На каждом малом отрезке [x_i, x_{i+1}] криволинейная функция заменяется горизонтальной линией. В зависимости от того, в какой точке берется значение функции для построения прямоугольника, различают методы левых, правых и средних прямоугольников. Метод средних прямоугольников является наиболее точным из этой группы, так как площадь выступающих частей прямоугольника частично компенсирует площадь недостающих.

Следующим шагом в повышении точности является метод трапеций. В этом алгоритме на каждом подотрезке функция аппроксимируется не горизонтальной линией, а отрезком прямой, соединяющим точки (x_i, f(x_i)) и (x_{i+1}, f(x_{i+1})). Таким образом, мы вычисляем суммы площадей прямолинейных трапеций. Погрешность метода трапеций пропорциональна квадрату шага разбиения, что делает его достаточно эффективным для простых задач, хотя он уступает методу средних прямоугольников в точности для дважды дифференцируемых функций.

Метод парабол (формула Симпсона)

Если метод прямоугольников использует полином нулевой степени (константу), а метод трапеций — полином первой степени (прямую), то логичным развитием является использование полинома второй степени — параболы. Это и есть суть метода Симпсона.

Для применения метода Симпсона отрезок интегрирования должен быть разбит на четное количество подотрезков. На каждых двух соседних отрезках через три точки графика функции проводится парабола. Площадь под этой параболой вычисляется аналитически, и полученные значения суммируются. Формула Симпсона обладает удивительным свойством: она точна не только для многочленов второй степени, но и для многочленов третьей степени. Скорость сходимости метода Симпсона пропорциональна четвертой степени шага сетки (O(h^4)), что позволяет получать высокую точность при относительно небольшом количестве узлов. Эти методы (прямоугольников, трапеций и Симпсона) объединяются под общим названием формулы Ньютона-Котеса.

Подробнее

Численное решение нелинейных уравнений: метод дихотомии и метод Ньютона

Проблема поиска корней функции

Одной из классических задач вычислительной математики является поиск корней нелинейного уравнения вида f(x) = 0. На практике это означает поиск точек пересечения графика функции с осью абсцисс. В то время как для линейных уравнений и квадратных трехчленов существуют простые аналитические формулы, для полиномов высоких степеней (начиная с пятой) таких формул в радикалах не существует, согласно теореме Абеля-Руффини. Для трансцендентных уравнений, содержащих тригонометрические или экспоненциальные функции, точное решение также, как правило, недостижимо. В таких случаях мы используем итерационные численные алгоритмы.

Процесс численного решения уравнения обычно делится на два этапа. Первый этап — это локализация (или отделение) корней, то есть нахождение отрезков [a, b], внутри которых содержится ровно один корень. Второй этап — уточнение корня с заданной точностью до тех пор, пока условие остановки не будет выполнено.

Метод половинного деления (дихотомии)

Самым надежным, хотя и достаточно медленным, является метод дихотомии. Он базируется на теореме Больцано-Коши, которая гласит: если непрерывная функция f(x) на концах отрезка [a, b] принимает значения разных знаков (то есть f(a) * f(b) < 0), то внутри этого отрезка существует хотя бы один корень.

Алгоритм метода предельно прост. Мы находим середину отрезка c = (a + b) / 2 и вычисляем значение функции в этой точке: f(c). Если f(c) = 0, корень найден точно. Если нет, мы проверяем знаки: если f(a) и f(c) имеют разные знаки, значит корень находится на отрезке [a, c]. Если нет — на отрезке [c, b]. Мы заменяем границы отрезка и повторяем процесс. На каждом шаге длина интервала неопределенности уменьшается ровно в два раза. Процесс продолжается до тех пор, пока длина отрезка не станет меньше заданной погрешности эпсилон. Главное преимущество дихотомии — абсолютная гарантия сходимости для любой непрерывной функции.

Метод Ньютона (метод касательных)

Если метод дихотомии сходится линейно, то метод Ньютона обеспечивает гораздо более высокую, квадратичную скорость сходимости. Это означает, что количество верных значащих цифр в ответе удваивается на каждой итерации. Геометрический смысл метода Ньютона заключается в том, что мы заменяем нелинейную функцию касательной прямой, проведенной в точке текущего приближения, и находим точку пересечения этой касательной с осью X.

Формула итерационного процесса Ньютона выглядит следующим образом: x_new = x_old - f(x_old) / f_prime(x_old), где f_prime — это производная функции. Несмотря на огромную скорость, метод имеет ряд существенных недостатков. Во-первых, он требует вычисления производной на каждом шаге. Во-вторых, он не гарантирует сходимости при плохом выборе начального приближения. Если начальная точка выбрана слишком далеко от истинного корня или если производная в точке близка к нулю (касательная почти параллельна оси X), метод может «улететь» в бесконечность или зациклиться. Поэтому на практике часто комбинируют методы: сначала используют надежную дихотомию для сближения с корнем, а затем быстрый метод Ньютона для финального уточнения.

Подробнее

Соц. сети