Minimum bant genişliği bantlı bir matris üretmek için değişkenleri nasıl yeniden sıralayabilirim?


15

2B Poisson denklemini sonlu farklarla çözmeye çalışıyorum. Bu süreçte, her denklemde sadece değişkenli seyrek bir matris elde ediyorum . Örneğin, değişkenler U olsaydı, o zaman ayrıklaştırma şöyle olur:5U

Ui1,j+Ui+1,j4Ui,j+Ui,j1+Ui,j+1=fi,j

Bu sistemi yinelemeli bir yöntemle çözebileceğimi biliyorum, ama değişkenleri uygun şekilde sipariş etsem, doğrudan bir yöntemle (yani Gauss eleme w / o oynar). Mümkün mü? Bunu, belki de daha az yapılandırılmış seyrek sistemler için yapmak için herhangi bir strateji var mı?


2
Cuthill-McKee gibi bir şey mi?
JM

İlginç ... Cuthill-McKee algoritmasını daha önce hiç duymamıştım! :)
Paul

1
Ayrıca bir Ters Cuthill-McKee de var.
Geoff Oxberry

1
Bunun yanıtlarından açıktır umuyoruz, ancak do not bu soruna yönelik bir bantlı çözücü kullanmak, ne de en aza indirir bant genişliği dair bir sipariş seçmek istiyorum. Belki de soru veya seçilen cevap bunu netleştirmek için düzenlenebilir, aksi takdirde bu efsanenin devam edeceğinden korkuyorum. Görsel bir karşılaştırma yaptım ve scicomp.stackexchange.com/a/880/119'daki dolguyu karşılaştırdım .
Jed Brown

@JedBrown: Aslında, aslında bir poisson problemi ile çalışmıyorum ... Benim problemim poisson problemine benzer bir yapıya sahip ... Değişkenlerin göstergeleri (i ve j) tamamen aynı ve matris diyagonal olarak baskın diyagonal girdilerle (aynı satır içinde) tam olarak diyagonal girişin toplamına eklenir.
Paul

Yanıtlar:


13

Bu seyrek doğrudan çözücüler alanında iyi çalışılmış bir sorundur. Yeniden sıralamaların ve süper düğümlerin doldurma ve çözüm süresini nasıl etkilediği hakkında daha iyi bir fikir edinmek için Joseph Liu'nun multifrontal yönteme genel bakışını okumanızı şiddetle tavsiye ederim .

İç içe diseksiyon, yeniden sıralama oluşturmak için son derece yaygın bir yoldur ve esasen özyinelemeli grafik bölümlendirmeden oluşur. Metis grafiği bölünmesi için fiili standart olduğunu ve bunun arkasında bazı fikirleri okuyabilirsiniz burada . Yaygın olarak kullanılan bir başka paket SCOTCH'dur ve Chaco da önemlidir, çünkü yazarları MeTiS'in arkasındaki temel fikir olan çok seviyeli grafik bölümlemeyi tanıttı .

George ve Liu gösterdi kendi klasik kitabında 2d seyrek doğrudan çözümleri sadece gerektirir çalışması ve O ( n, log n ) gerektirir 3d seyrek doğrudan ise, bellek O ( n, 2 ) çalışması ve O ( n, 4 / 3 ) bellek.O(n3/2)O(nlogn)O(n2)O(n4/3)


George ve Liu referansı için bir alıntı var mı?
Paul

Katma; İlk gönderdiğimde arabadan çıkmak üzereydim. Kitabın bir yerde çevrimiçi serbestçe kullanılabilir bir sürümü olduğunu biliyorum (Jed nerede olduğunu biliyor), ama bulamadım.
Jack Poulson

Bağlantıyı, kitap incelemesi yerine kitabın PDF'sini gösterecek şekilde güncelledim.
Jed Brown

@JedBrown Harika bir referanstı! Çok teşekkürler! :)
Paul

1
@Alexander Herkes 3D'yi George ve Liu'ya bağlıyor, ancak kitapta açıkça işaret edip etmediklerini bilmiyorum. Ancak teoriden açıktır. Bir için en az tepe ayırıcı ızgara olup , n 2 / 3 = m x m . Bu Supernode ile bağlantılı yoğun bir matris sahiptir ( n, 2 / 3 ) 2 = n 4 / 3 girdileri gerektirir ve ( n- 2 / 3 ) 3 = n 2n=m×m×mn2/3=m×m(n2/3)2=n4/3(n2/3)3=n2faktörlü işlemler. 2D vakadaki logaritmik terim daha incedir ve Alt Sınırı sağlayan Bölüm 8'de İç İçe Diseksiyonda tedavi edilir.
Jed Brown

5

Cuthill-McKee , yapmak istediğiniz şey için fiili standarttır. Bu yöntemle oynamak istiyorsanız, Boost Graph Library'de (BGL) algoritmanın (ve tersinin) kullanımı kolay bir uygulaması vardır ve belgelerde bunun nasıl kullanılacağı ile ilgili örnekler bulunmaktadır.


aslında Cuhill-McKee'yi tersine çevirir; genellikle daha az dolgu sağlar. Ancak iç içe bir diseksiyon sıralaması, düşük bant genişliği sıralamasından çok daha üstündür.
Arnold Neumaier

4

Multifrontal yöntemlerden bahsetmişken, LU çarpanlarına ayırma ( UMFPACK ) için multifrontal yöntemler üzerinde çalışan Tim Davis , doldurmayı en aza indirgemek için matrisleri yeniden düzenleyecek bir dizi rutine sahiptir. Bunları burada SuiteSparse'ın bir parçası olarak bulabilirsiniz . SuiteSparse, MeTiS kullanır.

Dikkat edilmesi gereken başka bir şey: Bazı problemlerde, bu algoritmaları çağırmanın sorununu (ve CPU zamanını) kurtarabilecek şeritli veya şeritli desenlere sahip olmanız için değişkenleri sipariş etmek konusunda akıllı olabilirsiniz. Bununla birlikte, bu akıllı yeniden sıralama sizin görüşünüze ihtiyaç duyar ve insanların cevaplarında burada bahsettikleri grafik-teori tabanlı yeniden sıralama algoritmaları kadar genel bir yere sahip değildir.


Bir şey değil, Paul. Eğer isterseniz, oy verin.
Geoff Oxberry

3

Uygulanan matematik çevrelerinde ADI (Değişken Yön Örtülü) ve temelde açıkladığınız şeyi yapan fizik çevrelerinde Split-operatörü adı verilen bir algoritma vardır. Yinelemeli bir yöntemdir ve bu temel prosedürü takip eder:

  1. Her değeri için y , rahatla xdoğrultusu. Bu matris tridiagonal olmalıdır, bu yüzden nispeten kısa sürede doğrudan çözülebilir.

  2. Her değeri için x , rahatla ydoğrultusu. Yine, bu oldukça hızlı olmalı.

  3. Hata olmasını istediğiniz kadar küçük olana kadar 1 ve 2'yi tekrarlayın.

Bu algoritmanın biçimsel karmaşıklığını bilmiyorum, ama bunu her kullandığımda Jacobi ve Gauss-Seidel gibi şeylerden daha az yinelemede birleştiğini buldum.


2
Operatör bölme yoluna gitmeye karar verirseniz, dikkatli olmak isteyeceğiniz bir şey, operatör bölmenin bazı durumlarda sabit durum çözümlerinde hatalarla sonuçlandığı bilinmesidir. (Laboratuvar arkadaşlarımdan biri bu zorluğun üstesinden gelmek için bir yol geliştirdi, ancak henüz yayınladığına inanmıyorum.) Ayrıca, operatör bölünmesinin sayısal hatalara neden olduğu bilinmektedir. Bu hataları posteriori olarak tahmin etmenin sağlam yolları vardır ; Don Estep bu alanda mükemmel çalışmalar yaptı.
Geoff Oxberry

@GeoffOxberry Kulağa farklı bir bölmeye başvuruyormuşsunuz gibi geliyor. ADI'yi, sistemi gerçekten çözdüğü için bölme hatası olmayan tamamen örtük bir şemada kullanabilirsiniz. Ayrım hatalarını titizlikle kontrol eden IMEX yöntemleri de vardır.
Jed Brown

@JedBrown: Godunov ve Strang bölünmesinden bahsediyordum; x ve yterimleri. Benim hatam. (İnsanlara doktora sonrası PDE yöntemlerini öğrenmek istediğimi söylüyorum ...)
Geoff Oxberry

Godunov ve Strang'ın ayrıldığını hiç duymadım. Operatörümü Baker-Campbell-Hausdorf formülü ile bölme eğilimindeyim. Bu aynı şey mi?
Dan
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.