Приведение матрицы к диагональному виду
Дана матрица n x m.
Необходимо с помощью следующих операций:
- Поменять местами две строки
- Прибавить к одной строке другую строку, умноженную на некоторое число
Приведём матрицу к треугольному виду. Будем последовательно вычитать текущую строку матрицы из всех верхних строк, чтобы занулить их вторые элементы. В результате получим диагональную матрицу.
Асимптотика O(N3).
Реализацию класса matrix смотрите здесь.
Листинг C++
// приведение матрицы к диагональному виду
matrix diagonal (matrix & a)
{
matrix c = gauss (a);
for (int i = 1; i < c.N (); ++ i)
for (int j = 0; j < i; ++ j)
{
if (abs (c[i][i]) < eps)
return matrix ();
double q = - c[j][i] / c[i][i];
for (int k = c.M () - 1; k >= i; -- k)
c[j][k] += q * c[i][k];
}
return c;
}
Создана 16:44 04.01.2011
Изменена 16:47 04.01.2011
По всем вопросам обращаться: rumterg@gmail.com