Особые случаи
Процесс
Грама — Шмидта может применяться также
к бесконечной последовательности
линейно независимых векторов.
Кроме
того, процесс Грама — Шмидта может
применяться к линейно зависимым векторам.
В этом случае он выдаёт 0
(нулевой вектор) на шаге j, если
является линейной комбинацией векторов
.
Если это может случиться, то для сохранения
ортогональности выходных векторов и
для предотвращения деления на ноль при
ортонормировании алгоритм должен делать
проверку на нулевые вектора и отбрасывать
их. Количество векторов, выдаваемых
алгоритмом, будет равно размерности
подпространства, порождённого векторами
(т.е. количеству линейно независимых
векторов, которые можно выделить среди
исходных векторов).
Реализация
для пакета Mathematica
Данный
скрипт, предназначенный для пакета
Mathematica,
проводит процесс ортогонализации Грама
― Шмидта над векторами, заданными в
фигурных скобках предпоследней строки.
Количество векторов и их координат
могут быть произвольными. В данном
случае для примера взяты векторы
,
,
.
Projection[v1_,
v2_] := (v1.v2*v2)/v2.v2
MultipleProjection[v1_,
vecs_] := Plus @@ (Projection[v1, #1] &) /@ vecs
GramSchmidt[mat_]
:= Fold[Join[#1, {#2 - MultipleProjection[#2, #1]}] &, {}, mat]
GramSchmidt[{{-2,
1, 0}, {-2, 0, 1}, {-0.5, -1, 1}}]
Пример.
Ортогонализовать систему векторов
Решение.
Имеем:
Ответ.
.