Nhanh chóng, và The Backward-Ổn định (trái)


10

Tôi cần phải tính toán rất nhiều phần tử nghịch đảo ma trận (đối với Newton lặp phân hủy cực), với số lượng rất nhỏ các trường hợp thoái hóa ( < 0,1 % ).3×3<0.1%

Nghịch đảo rõ ràng (thông qua các ma trận nhỏ được chia cho định thức) dường như hoạt động và khoảng ~ 32 ~ 40 flop hợp nhất (tùy thuộc vào cách tôi tính toán đối ứng của định thức). Không xem xét đến yếu tố tỷ lệ det, nó chỉ có 18 flop hợp nhất (mỗi yếu tố trong số 9 yếu tố có dạng ab-cd, 2 flops hợp nhất).

Câu hỏi:

  • Có cách nào để tính toán nghịch đảo bằng cách sử dụng ít hơn 18 (với thang đo tùy ý) hoặc 32 (với tỷ lệ phù hợp, xem xét flop đối nghịch 1 op) không?3×3
  • Có một cách tiết kiệm (sử dụng ~ 50 f-flops) để tính toán một ngược ổn định trái nghịch đảo của một ma trận?3×3

Tôi đang sử dụng phao chính xác đơn (trò chơi iOS). Sự ổn định ngược là khái niệm mới thú vị đối với tôi và tôi muốn thử nghiệm. Đây là bài viết gây ra suy nghĩ.


Còn việc sử dụng định lý Cayley-Hamilton cho nghịch đảo thì sao?
nicoguaro

1
Nếu đây là một nút cổ chai đối với bạn, liệu thuật toán phân cực khác có thể nhanh hơn trong trường hợp này không? Qua SVD chẳng hạn? Hoặc tăng tốc phương pháp của Newton như trong 3.3 của eprints.ma.man.ac.uk/694/01/covered/MIMS_ep2007_9.pdf ?
Kirill

Câu trả lời:


5

3×3

A=[adgbehcfi]

1/det(A)Aa,,i

A1det(A)=adj(A)=[eifhdifggedhbichaicgahbgcebfafcdaebd]
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(eifh)+b(fgdi)+c(dhge)=a(eifh)b(difg)c(gedh)
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ế,

  1. Tính toán trong 18 lần kết hợpadj(A)
  2. 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)
  3. Tìm (giả sử 1 flop).1det(A)
  4. 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.