Мне нужно вычислить много матрицы (для итерационного полярного разложения Ньютона) с очень небольшим числом вырожденных случаев ( ).
Кажется, что работает явное обратное (через младшие матрицы, разделенные по определителю), и составляет ~ 32 ~ 40 слитых флопов (в зависимости от того, как я вычисляю обратную величину по определителю). Не учитывая масштабный коэффициент det, это всего 18 плавких флопов (каждый из 9 элементов имеет форму ab-cd, 2 плавких флопа).
Вопрос:
- Есть ли способ вычислить обратное значение используя менее 18 (с произвольным масштабом) или 32 (с правильным масштабом, учитывая обратный 1 оп) слитые флопы?
- Существует ли экономичный способ (использование ~ 50 флопс) для вычисления обратно-стабильной левой обратной матрицы ?
Я использую поплавки одинарной точности (игра для iOS). Обратная стабильность - интересная новая концепция для меня, и я хочу экспериментировать. Вот статья, которая спровоцировала мысль.
matrix
matrix-equations
inverse
matrix-factorization
Сергей Мигдальский
источник
источник
Ответы:
Я постараюсь высказать свое мнение по первому вопросу относительно быстрого3×3 обратное . Рассматривать
Поскольку матрицы являются небольшими и очень общими (не имеют никакой известной структуры, нулей, относительных масштабов элементов), я думаю, что было бы невозможно дать алгоритм для произвольного масштаба (без1/det(A) ) обратный, который быстрее, чем 18 плавких флопов, поскольку для каждого из 9 элементов требуется 2 плавких флопа, а все продукты уникальны, при условии отсутствия предварительной информации о A записи a,…,i ,
Тем не менее, некоторые расчеты могут быть повторно использованы для расчетаdet(A) , Если я расширю его до первого столбца (есть еще 5 вариантов):
Теперь каждый из 9 элементовadj(A) следует масштабировать по уже полученной обратной величине определителя, добавив еще 9 слитых флопов.
Так,
В результате 18 + 3 + 1 + 9 = 31 слитых флопов . Вы не описали свой способ вычисления определителя, но я думаю, 1 дополнительный флоп может быть сохранен. Или это может быть использовано для проверки|det(A)|>ϵ на шаге 3, где ϵ - допуск для вырожденного (не обратимого) случая, в результате которого получается 32 плавных
if
флопа (при условии, что 1 флоп).Я не думаю, что есть более быстрый способ вычисления обратного3×3 Общая матрица, так как все остальные расчеты являются уникальными. Использование Cayley-Hamilton не должно помочь с точки зрения скорости, так как в общем случае это потребует расчетаA2 для 3×3 матрица помимо некоторых других операций.
NB:
источник