C
dead_doomer обсуждали проблему неустойчивости ранга матрицы к небольшим возмущениям матриц. Придумалась простая процедурка для оценки области неустойчивости и собственно вычисления ранга. Не нашел, описывал ли кто подобную вещь, так что пусть полежит здесь. Может кто покритикует, найдет ошибку или еще что-то дельное предложит по этому поводу.
Дана прямоугольная матрица без имени, хотим устойчиво оценить ее ранг. Дополним ее до квадратной матрицы нулями и эту квадратную матрицу уже как-нибудь обзовем, например $A$, ее размер $N\times N$. Рассмотрим функцию детерминанта на всех матрицах размера $n$. $\det A = |A|: Mat(n,n)\to\mathbb{R}$. Если мы рассмотрим окрестность любой матрицы, то закономерно увидим, что есть только одно направление изменения значения определителя: его градиент и ортогональная компонента, в которой как матрицы ни меняй, определитель не заметит.
Кстати, градиент определителя определяется красивой формулой: $\nabla |A| = adj(A)^t$. Или даже еще более прекрасной формулой $\nabla\log |A| = (A^{-1})^t$. Для симметрических матриц совсем красота выходит: аналогия с производной логарифма числа. Немного технических подробностей есть в
лекциях. Ну это совершенно классический результат, про это все даже
статья в википедии есть.
Раз у нас есть выделенное направление, разложим функцию определителя в ряд по малому изменению $\eps$ матриц вдоль градиента относительно матрицы $A$:
$$|A+\nabla|A|\cdot\eps| = P(\eps)$$
Теперь мы можем посчитать коранг (размерность ядра отображения $A$ или попросту $N - rank(A)$) матрицы $A$, как степень первого ненулевого члена разложения $P(\eps)$, ну и в целом оценить перспективы поиметь изменение коранга в той или иной окрестности матрицы, поискав нули многочлена $\frac{P(\eps)}{\eps^{corank A}}$. Нули такой функции будут описывать, где у определителя ноль более высокого порядка.
Ясное дело, что можно из одномерной матричной окрестности сделать многомерную, посчитав проекции. Но это уже скучные технические детали о том, как $\eps$ соотносится с окрестностью матрицы в более привычном смысле.
upd: увы, разложить матрицу может оказаться непросто: градиент запросто может оказаться нулевой матрицей. Так что для вырожденных матриц (какие и представляют интерес) потребуется посчитать "градиент" высокого порядка, чтобы понимать, в ряд вдоль какой матрицы раскладывать.