Поворот Гивенса — в линейной алгебре линейный оператор поворота вектора на некоторый заданный угол.
Поворот Гивенса вектора на плоскости определяется матрицей линейного оператора:
Поэтому для некоторого вектора
:
К примеру, для
:
Пусть хотим привести к трёхдиагональному виду симметричную матрицу:
Где . Тогда домножим её на матрицу вращения Гивенса: . — транспонированная матрица. При этом изменятся только элементы , и
Здесь штрих обозначает элемент возникающий после вращения. Выберем коэффициенты и так, чтобы обнулить недиагональный элемент и сохранить связь и с и
Тогда:
Такое вращение применяют последовательно, чтобы обнулить все элементы первой строки, кроме двух первых. То есть (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;
}
}
![]() |
Это заготовка статьи по математике. Вы можете помочь проекту, дополнив её. |
Для улучшения этой статьи желательно: |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .