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)
Tuy nhiên, một số tính toán có thể được sử dụng lại để tính toán . Nếu tôi mở rộng nó qua cột đầu tiên (có thêm 5 lựa chọn):
Lưu ý rằng (* ) đã được tính toán trong quá trình đánh giá . Vì vậy, đối ứng của định thức có thể được tính trong 4 flop hợp nhất bổ sung (nếu đối ứng được coi là 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)
Bây giờ, mỗi 9 phần tử của phải được thu nhỏ bằng cách có được đối ứng đã xác định, thêm 9 flop hợp nhất.adj(A)
Vì thế,
- Tính toán trong 18 lần kết hợpadj(A)
- Tính toán trong 3 flop hợp nhất bằng cách sử dụng các mục của đã được tính toándet(A)adj(A)
- Tìm (giả sử 1 flop).1det(A)
- Chia tỷ lệ từng elelemt đã được tính toán theo trong 9 flops hợp nhất khác.adj(A)1det(A)
Kết quả là 18 + 3 + 1 + 9 = 31 flop hợp nhất . Bạn đã không mô tả cách tính toán của bạn, nhưng tôi đoán có thể lưu thêm 1 flop. Hoặc nó có thể được sử dụng để thực hiện việc kiểm tra trong bước 3, nơi là khoan dung đối với thoái hóa (không khả nghịch) trường hợp, kết quả là 32 flops hợp nhất (giả sử là 1 flop).|det(A)|>ϵϵif
Tôi không nghĩ có một cách nhanh hơn để tính toán nghịch đảo của ma trận tổng quát vì tất cả các phép tính còn lại là duy nhất. Sử dụng Cayley-Hamilton không giúp ích gì từ góc độ tốc độ, vì nói chung, nó sẽ yêu cầu tính toán cho ma trận bên cạnh một số thao tác khác.3×3A23×3
Lưu ý:
- câu trả lời này không liên quan đến sự ổn định số
- tiềm năng có thể cho vector hóa và tối ưu hóa mô hình truy cập bộ nhớ cũng không được thảo luận