3×3
A=⎡⎣⎢abcdefghi⎤⎦⎥
1/det(A)Aa,…,i
A−1det(A)=adj(A)=⎡⎣⎢ei−fhbi−chce−bfdi−fgai−cgaf−cdge−dhah−bgae−bd⎤⎦⎥
adj(A)
Namun, beberapa perhitungan dapat digunakan kembali untuk perhitungan . Jika saya memperluasnya di kolom pertama (ada 5 pilihan lain):
Perhatikan, bahwa (* ) telah dihitung selama evaluasi . Jadi, kebalikan dari determinan dapat dihitung dalam 4 tambahan flop flop (jika timbal balik dianggap sebagai 1 flop).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)
Sekarang, setiap 9 elemen dari harus diskalakan dengan kebalikan dari determinan yang telah diperoleh, dengan menambahkan 9 flop jepit lainnya.adj(A)
Begitu,
- Hitung dalam 18 jepit menyatuadj(A)
- Hitung dalam 3 jepit menyatu menggunakan entri yang sudah dihitungdet(A)adj(A)
- Temukan (dengan asumsi 1 gagal).1det(A)
- Skala setiap elemen dari sudah dikomputasi oleh di 9 flop jepit lainnya.adj(A)1det(A)
Menghasilkan 18 + 3 + 1 + 9 = 31 jepit menyatu . Anda tidak menjelaskan cara Anda menghitung determinan, tetapi saya kira 1 kegagalan tambahan dapat disimpan. Atau dapat digunakan untuk melakukan pemeriksaan pada langkah 3, di mana adalah toleransi untuk kasus degenerasi (tidak dapat dibalikkan), menghasilkan 32 flop yang menyatu (dengan asumsi 1 flop).|det(A)|>ϵϵif
Saya tidak berpikir ada cara yang lebih cepat untuk menghitung kebalikan dari matriks umum karena semua perhitungan yang tersisa adalah unik. Menggunakan Cayley-Hamilton seharusnya tidak membantu dari perspektif kecepatan, seperti secara umum, itu akan memerlukan perhitungan untuk matriks selain beberapa operasi lainnya.3×3A23×3
NB:
- jawaban ini tidak berurusan dengan stabilitas numerik
- kemungkinan potensi vektorisasi dan optimalisasi pola akses memori juga tidak dibahas