Поворот Гивенса

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Поворот Гивенса — в линейной алгебре линейный оператор поворота вектора на некоторый заданный угол.

Матрица Гивенса[править | править вики-текст]

Поворот Гивенса вектора на плоскости определяется матрицей линейного оператора:

Поэтому для некоторого вектора :

К примеру, для :

Использование матриц Гивенса для трёхдиагонализации[править | править вики-текст]

Пусть хотим привести к трёхдиагональному виду симметричную матрицу:

Где . Тогда домножим её на матрицу вращения Гивенса: . G' - транспонированная матрица. При этом изменятся только элементы , и

Здесь штрих обозначает элемент возникающий после вращения. Выберем коэффициенты c и s так, чтобы обнулить недиагональный элемент и сохранить связь c и s с и

Тогда:

Такое вращение применяют последовательно, чтобы обнулить все элементы первой строки, кроме двух первых. То есть (1,2), (1,3), (1,4)...(1,n) Потом ко-второй строке (2,3),(2, 4)...(2,n)

Код на C++:

     for (unsigned int i=0; i<N-1; ++i) 
     {
         for (unsigned int j=i+2; j<N; ++j)               
         {
             t = 2*matr[i][j]/(matr[i][i] - matr[j][j]);
             phi = 0.5 * atan(t);
             c = cos(phi);
             s = sin(phi);

             bii = c*c*matr[i][i] + 2*c*s*matr[i][j] + s*s*matr[j][j];
             bij = s*c*(matr[j][j] - matr[i][i]) + matr[i][j] * (c*c - s*s);
             bjj = s*s*matr[i][i] + c*c*matr[j][j] - 2*c*s*matr[i][j];
             bji = bij;

             matr[i][i] = bii;
             matr[i][j] = bij;
             matr[j][i] = bji;
             matr[j][j] = bjj;
        }
    }