Содержание
§ 12. Линейные алгебраические уравнения
Введение
Линейная алгебра — это область математики, которая занимается системами уравнений. Эти системы, как правило, записываются в виде матриц коэффициентов, а их правые части — в виде векторов свободных членов. В зависимости от вида матрицы (симметричная, положительно определенная, диагональная, разреженная, прямоугольная, треугольная и т.д.) выбирается наиболее эффективный метод решения системы уравнений. Также в линейной алгебре изучаются операции над матрицами и их свойства.
Матричные и векторные вычисления эффективно отображаются на архитектуру современных компьютеров. Представление вашей задачи в векторном или матричном виде и качественный перенос этого представления в код программы повышает ее производительность по сравнению со скалярной версией за счет использования векторных регистров процессора: скалярная версия программы будет использовать только первую компоненту векторного регистра, а векторизованная версия — потенциально все компоненты.
Матричные численные методы часто являются вспомогательным инструментом, который используется при решении задач другими основными методами: везде, где возникает система уравнений, можно применить матричные численные методы. Также, эти методы являются основными в компьютерной графике и вычислительной геометрии, поскольку позволяют кратко записать преобразование координат из одной системы в другую, а также операции с геометрическимим векторами.
Определения
Линейным отображением векторного пространства на векторное пространство называется отображение , которое удовлетворяет условиям
Матрицей называют краткую запись коэффициентов линейного отображения в табличном виде. Линейное отображение, описываемое системой уравнений
записывается в матричном виде как
Вектором называется элемент векторного пространства , который задается координатами . Во многих задачах вектор можно считать частным случаем (одной колонкой или одной строчкой) матрицы для удобства. Нет консенсуса, является ли вектор по умолчанию колонкой или строчкой.
Для матриц и векторов определены привычные арифметические операции. Сложение и вычитание производится поэлементно. Умножение вектора на вектор может производиться как поэлементно, так и по более сложным формулам. Чаще всего используют следующие варианты умножения.
- Скалярное произведение:
- Векторное произведение
- в трехмерном пространстве:
- в двухмерном пространстве:
- в -мерном пространстве определяется с помощью тензоров.
- в трехмерном пространстве:
- Поэлементное произведение:
Умножение матрицы на матрицу записывается как
Умножение определено только для матриц, количество колонок первой из которых совпадает с количеством строчек второй. Умножение некоммутативно даже для квадратных матриц, и общей формулы для перестановки аргументов не существует. Умножение матриц можно рассматривать как скалярное произведение векторов-строчек первой матрицы на векторы-колонки второй матрицы. Умножение матрицы на вектор произодится по той же формуле, вторая матрица представляется как вектор-колонка.
Для матриц и векторов определены дополнительные операции.
- Транспонирование матрицы или вектора-колонки, вектора-строчки:
При транспонировании элементы меняются местами симметрично относительно главной диагонали матрицы. При транспонировании вектор-колонка превращается в вектор-строчку и наоборот. В программе транспонирование иногда реализуют как изменение схемы индексации матрицы: индекс меняется местами с индексом , однако это может снизить производительность, поскольку ячейки матрицы будут считываться программой не в том порядке, в котором они расположены в памяти. - Обращение матрицы — это вычисление обратной матрицы , такой что Здесь — это единичная матрица матрица, по главной диагонали которой располагаются единицы, а все остальные элементы равны нулю: Обращение матрицы используется как замена операции деления: каждый раз, когда мы хотим перенести матрицу-множитель из одной части уравнения в другую, мы домножаем обе части уравнений на обратную матрицу справа. Обратная матрица существует тогда и только тогда, когда определитель исходной матрицы не равен нулю.
- Определитель матрицы: Здесь — минор матрицы — определитель подматрицы, которая формируется путем удаления строчки и колонки из исходной матрицы. Определитель можно считать обобщением понятия длины вектора на матрицы. Если определитель матрицы равен нулю, то такая матрица называется вырожденной.
- Длина вектора:
В программах, как правило, вместо векторов и матриц используются многомерные массивы. Для них определены всевозможные арифметические, тригонометрические и другие операции поэлементно. Если же вам необходимо непоэлементную операцию, то для этого используются отдельные функции. Многомерные массивы ускоряют поэлементные операции за счет использования векторных регистров процессора, что является основным их назначением. Ускорение матричных и векторных операций производится за счет использования соответствующих библиотек.
Итого, векторы и матрицы — это специальная нотация для краткой записи уравнений. Для них определены все арифметические операции кроме деления: сложение и вычитание производится поэлементно, а умножение производится по специальным формулам. Также для матриц определено понятние обратной, которое используется вместо деления, понятие определителя, которое используется для проверки существования обратной матрицы и в других операциях и операция транспонирования, которая используется в матричных преобразованиях. Основное назначение матриц и векторов в численных методах — краткая запись методов решения систем уравнений.
Метод прямой и обратной подстановки
Этот метод решения систем линейных алгебраических уравнений (СЛАУ) подходит для верхних (нижних) треугольных матриц — матриц, элементы которых, стоящие ниже (выше) главной диагонали, равны нулю. Для таких матриц компоненты искомого вектора вычисляются итеративно, начиная с последней (первой) компоненты. Прямая подстановка для нижней треугольной матрицы записывается как
Обатная подстановка для верхней треугольной матрицы записывается как
Методы решения СЛАУ для матриц более общего вида строятся на преобразовании этих матриц к треугольным и применении прямой или обратной подстановки.
-разложение
Этот метод является базовым для применения других методов и подходит для матриц общего вида. Суть метода заключается в нахождении нижней и верхней треугольных матриц, произвдение которых равно исходной матрице. Для того чтобы получить верхнюю треугольную матрицу, мы последовательно домножаем исходную матрицу на нижние треугольные матрицы особого вида. Произведение этих нижних треугольных матриц без исходной матрицы даст нам матрицу, обратной по отношению к которой является искомая нижняя треугольная матрица, а вместе с исходной даст верхнюю треугольную.
-разложение применяется для следующих методов.
- Решение СЛАУ. Решение системы уравнений можно реализовать с помощью метода прямой и обратной подставновки.
- Вычисление обратной матрицы. Для этого мы решаем систему уравнений с несколькими правыми частями методом прямой и обратной подставновки для каждой колонки матрицы из правой части.
- Вычисление определителя матрицы. Для треугольной матрицы можно легко вычислить определитель путем перемножения всех элементов главной диагонали, и он будет совпадать с определителем исходной матрицы.
-разложение имеет более эффективные аналоги для различных типов матриц. Для симметричных положительно определенных матриц используется разложение Холецкого, для таких же, но действительных матриц, — его модификация — -разложение.
Метод Гаусса
Этот метод подходит для решения систем с матрицей общего вида. Суть метода заключается в преобразовании матрицы в верхнюю треугольную и нахождении решения методом обратной подстановки. В целом, идея этого метода аналогична расмотренному ранее -разложению с той лишь разницей, что вычисляется только верхняя треугольная матрица, а затем выполняется только обратная подстановка. Мы рассматриваем метод Гаусса из-за его распространенности и простоты.
Разберем этот метод по шагам.
- Составляем расширенную матрицу, добавляя вектор свободных членов в качестве последней колонки исходной матрицы. Это делается для удобства объяснения метода.
- Движемся по колонкам матрицы и для каждой колонки ищем строку матрицы с максимальным диагональным элементом этой колонки. Меняем найденную строку и строку, номер которой совпадает с номером текущей колонки. Далее, используя элементарные операции над строками матрицы (сложение, вычитание и умножение на константу), делаем так, что все элементы текущей колонки во всех строках, находящихся ниже текущей, обнуляются. Для этого домножаем текущую строку на нужный коэффициент и вычитаем ее из строки, элемент которой нужно обнулить. Также домножаем текущую строку на нужный коэффициент, так чтобы ее диагональный элемент стал равен единице. Если диагональный элемент оказывается нулем, тогда система несовместна — такая система не имеет решения. Если мысленно исключить последнюю колонку, то получается верхняя треугольная матрица, на диагонали которой стоят единицы.
- Решаем получившуюся систему методом обратной подстановки.
Метод прогонки
Этот метод является более эффективным вариантом метода Гаусса для трехдиагональных матриц. Трехдиагональная матрица — это матрица, у которой все элементы кроме элементов главной диагонали и двух соседних равны нулю. Программисты называют такие матрицы ленточными, потому что в памяти удобно хранить три массива, соответствующих диагоналям, а не всю матрицу целиком.
Метод состоит из прямой и обратной прогонки.
void thomas(const float* a, const float* b, const float* c, const float* d, float* x, int n) { for (int i=1; i<n; ++i) { float w = a[i] / b[i-1]; b[i] -= w*c[i-1]; d[i] -= w*d[i-1]; } x[n-1] = d[n-1] / b[n-1]; for (int i=n-2; i>=0; --i) { x[i] = (d[i] + c[i]*x[i+1]) / b[i]; } }
Метод прогонки позволяет эффективно решать системы уравнений, образующиеся при решении неявных разностных уравнений, в которых на каждом шаге вместо явной формулы нужно решать СЛАУ для вычисления решения в следующий момент времени.
Уравнение теплопроводности (неявная схема)
Решим уравнение диффузии с помощью неявной схемы. В одномерном случае уравнение запишется как
Неявная схема получается, если вместо разности вперед по времени взять разность назад:
Раньше значение в следующий момент времени являлось линейной комбинацией предыдущих по времени значений из окружающих узлов сетки, а теперь все наборот: линейная комбинация значений в текущий момент времени равна значению в конкретном узле сетки в предыдущий момент времени. Другими словами, значение в предыдущий момент времени равно линейной комбинации значений в следующий момент времени! Как следствие, теперь нельзя вычислять значения в каждом узле сетки параллельно, вместо этого нужно составить систему уравнений, включающую уравнения для каждого узла сетки и решить эти уравнения совместно. Чтобы это сделать, сгруппируем коэффициенты для каждого узла сетки.
Теперь запишем систему уравнений для граничных условий :
В этой системе в левой части находятся слагаемые для текущего момента времени, в правой части находятся слагаемые для предыдущего момента времени, а каждая строчка соответствует одному узлу сетки. Строчки, соответствующие границам, убраны из матрицы, так как содержат одни нули.
Теперь проведем анализ устойчивости по методу фон Неймана.
Делим обе части уравнения на и получаем
Условие устойчивости запишется как
Второе неравенство никогда не выполнятся, значит наше предположение о знаке выражения под модулем было неверным, и мы можем это неравенство отбросить. Первое неравенство выполняется всегда, а это значит, что наше разностное уравнение безусловно устойчиво. Мы можем выбрать любой шаг по времени для этой системы уравнений, однако, не забывайте, что при больших шагах по времени разностное уравнение перестанет сходиться к дифференциальному!
Задания
Определитель v21 балл
Реализуйте вычисление определителя для квадратной матрицы произвольного размера. Для этого воспользуйтесь -разложением. Проверьте себя либо с помощью детерминантов для небольших матриц, либо с помощью Wolfram Alpha.
Уравнение диффузии v32 балла
Решите одномерное уравнение диффузии с помощью неявной разностной схемы (разности назад по времени) на регулярной сетке. Систему уравнений на каждом шаге решите методом прогонки. Граничные условия следующие.
Уравнение переноса v33 балла
Решите двухмерное уравнение переноса с помощью неявной разностной схемы (разности назад по времени) на регулярной сетке. Систему уравнений на каждом шаге решите методом прогонки/Гаусса/-разложения. Граничные условия следующие.