Приведение матрицы к диагональному виду



   Дана матрица 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