1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7

# конспект · шаг 7 из 7

Конспект: матрицы, системы уравнений и погрешность

выжимка - её можно унести в заметки

Понятия

Матрица системы - таблица коэффициентов; правые части - отдельный столбец. Система - A x = b.

Ведущий элемент - число на диагонали, на которое делят на очередном шаге исключения.

Машинный эпсилон - наименьшая относительная прибавка, которую дробное число замечает: около 2,2 · 10⁻¹⁶; вдвое меньшая уже пропадает.

Невязка - разность A x − b для найденного x. Плохо обусловленная система - та, у которой малая ошибка данных даёт большую ошибку решения.

LU-разложение - A = L · U: множители метода Гаусса и результат прямого хода. Определитель - произведение диагонали U с учётом знака перестановок.

Что унести

ПРЯМОЙ ХОД                                        ОБРАТНЫЙ ХОД
для столбца i от 0 до n − 1:                      для строки i от n − 1 до 0:
    выбрать ведущий: наибольший |a[r][i]|, r ≥ i      x[i] = (b[i] − Σ a[i][c] · x[c]) / a[i][i]
    поменять строки r и i (и b[r], b[i])                              c > i
    для строки j ниже i:
        k = a[j][i] / a[i][i]
        строка j −= k · строка i;  b[j] −= k · b[i]

2  1  1 |  7          2  1  1 |  7          2  1  1 |  7          z = 6 / 2 = 3
4  3  3 | 19    →     0  1  1 |  5    →     0  1  1 |  5    →     y = 5 − 3 = 2
8  7  9 | 49          0  3  5 | 21          0  0  2 |  6          x = (7 − 2 − 3) / 2 = 1
n метод Гаусса с выбором ведущего LU-разложение одно решение по LU
10 1 515 1 690 1 169 431
20 9 920 10 570 8 634 1 451
40 71 430 73 930 66 464 5 291
80 541 250 551 050

Цена. Исключение - n³, решение треугольной системы - n². Вдвое больше уравнений - в восемь раз дороже. Много правых частей - разложить один раз.

ДРОБНЫЕ ЧИСЛА: 53 двоичных разряда, около 16 десятичных цифр
0.1 + 0.2 = 0.30000000000000004           десять раз по 0.1 = 0.9999999999999999
10¹⁶ + 1 = 10¹⁶                           (1 + 10⁻¹⁵) − 1 = 1.11 · 10⁻¹⁵   ← потеря значащих цифр
ведущий элемент без выбора с выбором
10⁻¹⁷ [0.0, 1.0] [1.0, 1.0]
10⁻¹⁰ [1.000000082740371, 0.9999999999] [1.0000000001, 0.9999999999]
0 деление на ноль [1.0, 1.0]
матрица Гильберта, n ошибка решения невязка
5 6 · 10⁻¹³ 4 · 10⁻¹⁶
9 2 · 10⁻⁵ 4 · 10⁻¹⁶
13 4,2 9 · 10⁻¹⁶

Два источника ошибки. Маленький ведущий элемент - вина алгоритма, лечится перестановкой строк. Плохая обусловленность - свойство задачи, перестановки строк её не устраняют. Малая невязка не гарантирует малую ошибку решения. Повышенная точность уменьшает округление; точная арифметика для точных входов устраняет его, но не неопределённость данных.

LU:  множители записываются на место нулей
2  1  1          2  1  1            L: 1 0 0     U: 2 1 1        определитель = 2 · 1 · 2 = 4
4  3  3    →     2  1  1               2 1 0        0 1 1
8  7  9          4  3  2               4 3 1        0 0 2
решение:  L y = b сверху вниз,  U x = y снизу вверх

Точная арифметика. По простому модулю деление - умножение на обратный элемент; погрешности нет. 1/5 по модулю 1 000 003 - это 600 002.

В библиотеках: numpy.linalg.solve, numpy.linalg.cond, scipy.linalg.lu_factor и lu_solve.

Степень перехода: рекуррента порядка k считается за O(k³ log n) обычных арифметических операций; Aᴸ для матрицы смежности считает маршруты из L рёбер.

Ловушки джокера

Деление на диагональ не глядя. Ноль - остановка, почти ноль - неверный ответ без ошибки.

Перестановка «только если ноль». Число 10⁻¹⁷ не ноль. Искать наибольший по модулю.

Обмен строк без обмена правых частей. Решается другая система.

== 0 и == 0.3 для дробных. Сравнивать с допуском.

Обратный ход сверху вниз. Начинать с уравнения, где неизвестное одно.

Вера в невязку. «Подставил - сошлось» не означает, что ответ верен.

Большое плюс маленькие по одному. Тысяча единиц, прибавленных к 10¹⁶, исчезают. Складывать с малых.

Деньги в дробных. Десять раз по 0,1 - не единица.

Обратная матрица ради решения. Втрое дороже разложения и менее точно.

Определитель по школьной формуле. n! слагаемых вместо n³.

Определитель как мера вырожденности. Зависит от масштаба; смотреть на число обусловленности.

Забытый знак определителя. Каждая перестановка строк меняет его.

Испорченные входные данные. После gauss в a и b лежит треугольная система.

Куда это ведёт

Глава закрывает раздел с неожиданной стороны: в целых числах всё было точно и трудность сидела в цене, в дробных цена известна и скромна, а трудность - в доверии к ответу. Конспект раздела собирает обе половины в одну таблицу: какое действие сколько стоит и что в нём может пойти не так.

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.