линейные комбинации. Следовательно, имеет вид
Дальнейшее умножение справа на не меняет первого столбца, и, следовательно, имеет в этом столбце элемент. Продолжая таким же образом далее, видим, что имеет только элементов ниже диагонали в каждом столбце (исключая, конечно, последние столбцов). Однако мы знаем, что окончательная матрица симметрична, и следовательно, элементы в позициях где должны аннулироваться.
Очевидно, что для вычисления нижнего треугольника матрицы мы используем только элементы в позициях при Следовательно, при вычислении нужно получать только первые ненулевых элементов в каждой строке.
63. Для использования этого факта и симметрии потребуется дополнительный объем памяти. Для простоты предположим сначала, что вычисление завершено прежде, чем мы начинаем вычислять Приведение к треугольному виду наиболее просто описывается, если рассмотреть один шаг. Поэтому рассмотрим четвертый основной шаг в приведении к треугольному виду матрицы в случае Состояние в начале этого шага будет таким:
Матрица состоит из векторов матриц В дополнительной памяти хранятся в общем случае векторов с элементами в каждом. В нашем случае перед началом четвертого основного шага в ней уже содержатся векторы-строки, обозначенные которые представляют собой частично обработанные строки 4 и 5. Расположение (63.1) такое, какое получилось бы при неприведенном к треугольному виду правом нижнем углу полной матрицы. Индексы векторов обозначают различные расположения относительно диагонали. Четвертый шаг состоит в следующем:
(i) Переносим полную строку 6 матрицы в дополнительную память и применяем сдвиг, как показано. (Заметим, что все необходимые строки имеются в распоряжении.)
(ii) По элементам вычисляем вектор (В общем случае имеет ненулевых элементов.) Записываем как четвертую строку
Умножаем слева на При этом меняются только элементы, записанные в дополнительной памяти. Эффект этого умножения (но не распределения памяти) показан в (63.2). Нужно вычислять только первые три элемента четвертой строки
По мере вычисления четвертой строки она записывается на месте четвертой строки (заметим, что вычислены три первые компоненты), и по мере того, как вычисляются элементы они записываются в позициях для в дополнительной памяти. Следовательно, после завершения (iii) все готово для проведения пятого основного шага. Конечно, здесь есть обычные эффекты окончания. Так как использование неудачных разложений при -алгорифме исключено, мы всегда можем записать на место
64. Рассматривая переумножение, видим, что вычисляется строка за строкой и записывается на место На самом деле мы вычисляем поддиагональные элементы каждого столбца и затем представляем их как наддиагональные элементы соответствующей строки используя тем самым известную симметрию и сильно экономя в вычислениях.
Опишем основной шаг, в котором будет вычислена четвертая строка Дополнительная память в общем случае содержит массив ячеек. В нашем случае перед началом четвертого основного шага векторы-столбцы (волна означает, что эти величины не связаны с величинами в уже находятся в дополнительной памяти, как показано в (64.1):
Четвертый основной шаг состоит в следующем:
(i) Переносим элементы шестого столбца в дополнительную память, как показано.
(ii) Умножаем справа матрицу третьего порядка в дополнительной памяти на подматрицу которая является функцией Первый столбец полученной матрицы дает соответствующие элементы четвертой строки Два остальных столбца дают векторы для следующего основного шага. Заметим, что на самом деле выполняется только часть вычислений, связанных с умножением справа на
Теперь очевидно, что разложение и переумножение могут быть скомбинированы. В нашем примере после вычисления первых трех строк имеется достаточно информации для определения первой строки . В общем случае разложение должно на шагов опережать переумножение, и если будем делать так, надо будет запоминать не всю а только