Процес Грама — Шмідта

Матеріал з testwiki
Перейти до навігації Перейти до пошуку
Процес ортогоналізації Грама — Шмідта на трьох лінійно незалежних, неортогональних векторах

Процес Грама - Шмідта — найвідоміший алгоритм ортогоналізації, в якому за лінійно-незалежною системою 𝐯1,𝐯2,,𝐯k будується ортогональна система 𝐮1,𝐮2,,𝐮k така, що кожний вектор 𝐮i лінійно виражається через 𝐯1,𝐯2,,𝐯i, тобто матриця переходу від {𝐯i} до {𝐮i}верхня трикутна матриця.

Можна пронормувати систему {𝐮i} і зробити, щоб діагональні елементи матриці переходу були додатніми; ці умови однозначно визначають систему{𝐮i} та матрицю переходу.

Процес Грама — Шмідта застосований до матриці з лінійно-незалежними стовпцями є QR розкладом матриці (розклад на ортогональну і верхню трикутну матрицю з додатніми діагональними елементами).

Алгоритм

Перші 2 кроки ортогоналізації

Визначимо ортогонально-проєкційний оператор

proj𝐮𝐯=𝐮,𝐯𝐮,𝐮𝐮=𝐮𝐮𝐮,𝐮𝐯=𝐞𝐞𝐯,𝐞=𝐮𝐮,

де <u, v> означає скалярний добуток векторів u and v. Цей оператор проектує вектор v ортогонально на вектор u.

Приймемо 𝐮1=𝐯1 та запишемо рекурсивну формулу

𝐮i=𝐯ij=1i1𝐯i,𝐮j𝐮j,𝐮j𝐮j=𝐯i(j=1i1𝐞j𝐞j)𝐯i.

Нормуючи вектори 𝐮i, отримаємо ортонормовану систему о{𝐞i}.

Геометричний зміст процесу в тому, що вектор 𝐮i є проєкцією вектора 𝐯i на перпендикуляр до лінійної оболонки векторів 𝐯1,,𝐯i1.

Властивості

  • Для кожного  i лінійні оболонки систем 𝐯1,,𝐯i та 𝐮1,,𝐮i збігаються.
  • Добуток довжин 𝐮i дорівнює об'єму паралелепіпеда, побудованого на векторах системи {𝐯i}, як на ребрах.

Числова стійкість

Коли процес втілено на комп'ютері, вектори 𝐮k часто не точно ортогональні, через похибки заокруглювання. Для процесу Грама — Шмідта у вигляді описаному вище (іноді згадуваному як «класичний Грам — Шмідт») ця втрата ортогональності особливо шкідлива; кажуть, що (класичний) процес Грама — Шмідта числово нестійкий.

Процес Грама — Шмідта можна стабілізувати завдяки маленькій зміні; цю версію іноді згадують як модифікований Грам — Шмідт. Цей підхід дає той самий результат що й оригінальна формула в точній арифметиці і вводить менші похибки в арифметиці скінченної точності. Замість того, щоб обчислювати вектор uk як

𝐮k=𝐯kproj𝐮1(𝐯k)proj𝐮2(𝐯k)proj𝐮k1(𝐯k),

його обчислюють як

𝐮k(1)=𝐯kproj𝐮1(𝐯k),𝐮k(2)=𝐮k(1)proj𝐮2(𝐮k(1)),𝐮k(k2)=𝐮k(k3)proj𝐮k2(𝐮k(k3)),𝐮k(k1)=𝐮k(k2)proj𝐮k1(𝐮k(k2)).

Кожен крок знаходить вектор 𝐮k(i) ортогональний до 𝐮k(i1). Таким чином, 𝐮k(i) також ортогональний похибкам введеним під час обчислення 𝐮k(i1).

Джерела