Hızlı ve Geriye İstikrarlı (solda)


10

Çok fazla hesaplamak zorundayım 3×3 çok az sayıda dejenere vaka ile (Newton yineleme polar ayrışması için) matris tersleri (<0.1%).

Açık ters (determinant ile bölünen matris küçükler aracılığıyla) işe yarıyor gibi görünüyor ve yaklaşık ~ 32 ~ 40 kaynaşmış flop (determinantın karşılıklı nasıl hesapladığım bağlı olarak). Det ölçeği faktörü göz önüne alındığında, sadece 18 kaynaşmış flop (9 elementin her biri ab-cd, 2 kaynaşmış flop şeklindedir).

Soru:

  • Tersini hesaplamanın bir yolu var mı 3×3 18'den az (keyfi skala ile) veya 32 (uygun skala ile karşılıklı 1 op dikkate alınarak) kaynaşmış floplar mı kullanıyorsunuz?
  • Bir ters geriye doğru sol hesaplamak için ekonomik bir yolu var mı (~ 50 f-flop kullanarak) 3×3 matris?

Tek duyarlıklı şamandıralar kullanıyorum (iOS oyunu). Geriye dönük istikrar benim için ilginç yeni bir kavram ve denemek istiyorum. İşte düşünceyi kışkırtan makale .


Cayley-Hamilton teoremini tersine kullanmaya ne dersiniz?
nicoguaro

1
Bu sizin için böyle bir darboğazsa, kutup ayrışması için başka bir algoritma bu durumda daha hızlı olabilir mi? Örneğin, SVD aracılığıyla? Veya eprints.ma.man.ac.uk/694/01/covered/MIMS_ep2007_9.pdf 3.3 ' te olduğu gibi Newton yöntemini hızlandırmak ?
Kirill

Yanıtlar:


5

Hızlı ile ilgili ilk soru üzerine düşüncelerimi vermeye çalışacağım3×3ters . Düşünmek

A=[adgbehcfi]

Matrisler küçük ve çok genel olduğundan (bilinen herhangi bir yapı, sıfırlar, elementlerin göreceli ölçeklerini içermez), bence keyfi ölçek için bir algoritma vermenin imkansız olacağını düşünüyorum ( 1/det(A)) tersine, 18 kaynaşmış floptan daha hızlıdır, çünkü 9 öğeden her biri 2 kaynaşmış flop gerektirir ve girişleri . Burada , esasen bir "keyfi ölçek" ile ters (tersi olduğu takdirde).Aa,,i

A1det(A)=adj(A)=[eifhdifggedhbichaicgahbgcebfafcdaebd]
adj(A)

Ancak, nın hesaplanması için bazı hesaplamalar yeniden kullanılabilir . İlk sütun üzerinde genişletirsem (5 seçenek daha vardır): Dikkat edin, (* ), değerlendirilmesi sırasında zaten hesaplanmıştır . Böylece, determinantın karşılıklılığı 4 ek kaynaşmış flopta hesaplanabilir (eğer karşılıklı 1 flop olarak kabul edilirse ).det(A)

det(A)=a(eifh)+b(fgdi)+c(dhge)=a(eifh)b(difg)c(gedh)
adj(A)1/det(A)

Şimdi, nın her 9 unsuru , belirleyicinin halihazırda elde edilen karşılığı ile ölçeklenmeli ve 9 kaynaşmış başka bir flop eklenmelidir.adj(A)

Yani,

  1. 18 kaynaşmış flopta hesaplaadj(A)
  2. Zaten hesaplanmış girişlerini kullanarak 3 kaynaşmış flopta hesapladet(A)adj(A)
  3. bulun (1 flop olduğu varsayılarak).1det(A)
  4. Önceden hesaplanmış her elelemt Scale ile başka 9 kaynaşık flop.adj(A)1det(A)

Sonuç 18 + 3 + 1 + 9 = 31 kaynaşmış flop . Determinant hesaplama yolunuzu tarif etmediniz, ama sanırım 1 ek flop kaydedilebilir. Veya adım 3'te kontrolünü gerçekleştirmek için kullanılabilir , burada , dejenere (ters çevrilemez) durum için toleranstır ve 32 kaynaşmış flop ile sonuçlanır ( 1 flop olduğu varsayılarak ).|det(A)|>ϵϵif

Kalan tüm hesaplamalar benzersiz olduğundan genel matrisin tersini hesaplamanın daha hızlı bir yolu olduğunu düşünmüyorum . Cayley-Hamilton kullanmak hız açısından yardımcı olmamalıdır, genel olarak, diğer bazı işlemlerin yanı sıra matris için hesaplanmasını gerektirecektir .3×3A23×3

NB:

  • bu cevap sayısal kararlılıkla ilgilenmiyor
  • bellek erişim düzeninin vektörleştirilmesi ve optimize edilmesi için olası potansiyel de tartışılmamıştır
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.