Я спробую роздумати над першим запитанням щодо швидкої3×3обернена . Розглянемо
A=⎡⎣⎢abcdefghi⎤⎦⎥
Оскільки матриці невеликі та дуже загальні (не містять жодної відомої структури, нулів, відносної шкали елементів), я думаю, було б неможливо дати алгоритм довільної шкали (без 1/det(A)) Зворотний , що швидше , ніж 18 плавлених провалів, так як кожен з 9 елементів вимагають 2 злитих провалів, і всі продукти є унікальними і не передбачена ніякої попередньої інформацією про записів «s .
Тут позначає ад'югат (переносить кофактори), який по суті є обернена з "довільною шкалою" (за умови наявності зворотної).Aa,…,i
A−1det(A)=adj(A)=⎡⎣⎢ei−fhbi−chce−bfdi−fgai−cgaf−cdge−dhah−bgae−bd⎤⎦⎥
adj(A)
Однак деякі обчислення можуть бути використані повторно для обчислення . Якщо розгорнути його на перший стовпець (є ще 5 варіантів):
Зверніть увагу, що (* ) вже було обчислено під час оцінювання . Отже, зворотний коефіцієнт може бути обчислений у 4 додаткових конденсованих флопах (якщо взаємний вважається 1 флопом).det(A)
det(A)=a(ei−fh)+b(fg−di)+c(dh−ge)=a(ei−fh)∗−b(di−fg)∗−c(ge−dh)∗
adj(A)1/det(A)
Тепер кожне 9 елементів слід масштабувати за допомогою вже отриманого зворотного визначення детермінанта, додаючи ще 9 злитих флопів.adj(A)
Тому,
- Обчисліть у 18 плавлених флопахadj(A)
- Обчисліть у 3 плавлених флопах, використовуючи записи вже обчисленогоdet(A)adj(A)
- Знайдіть (припускаючи 1 флоп).1det(A)
- Масштабуйте кожен елемент вже обчисленого за допомогою ще в 9 плавлених флопах.adj(A)1det(A)
У результаті виходить 18 + 3 + 1 + 9 = 31 злиті флопи . Ви не описували свій спосіб обчислення визначника, але, мабуть, можна зберегти 1 додатковий флоп. Або він може бути використаний для виконання перевірки на кроці 3, де є допуском до виродженого (незворотного) випадку, в результаті чого 32 злиті флопи (якщо вважати, що це 1 флоп).|det(A)|>ϵϵif
Я не думаю, що існує більш швидкий спосіб обчислити зворотну загальну матрицю оскільки всі залишилися обчислення є унікальними. Використання Кейлі-Гамільтона не повинно допомогти з точки зору швидкості, як загалом, для деяких інших операцій потрібно буде обчислити для матриці .3×3A23×3
Примітка:
- ця відповідь не стосується чисельної стійкості
- можливий потенціал векторизації та оптимізації структури доступу до пам'яті також не обговорюється