PDE çözmek için multigrid yöntemi


15

Multigrid Metodu veya bununla ilgili bazı literatürün basit bir açıklamasına ihtiyacım var.

BiCGStab, CG, GS, Jacobi ve önkoşullama da dahil olmak üzere yinelemeli yöntemlere aşinayım, ancak multigrid yöntemiyle yeni başlayan biriyim.

Birisi bunu ayrıntılı olarak açıklayabilir veya en azından yeni başlayanlar için iyi literatürle bile açıkça sahte kod veya kaynak kodu sağlayabilir mi? Teşekkürler!

Yanıtlar:


15

Multigrid'in ardındaki ana fikir izdüşümdür. Bunu şöyle düşünmeye çalışıyorum:

Bir PDE'yi çok fazla doğrulukla çözmek istediğimi varsayalım, bu yüzden çok sayıda nokta içeren çok ince bir ızgarada etki alanını (diyelim ki sonlu fark yöntemi kullanarak) ayırmaya devam ediyorum. Sonunda denklem sistemimi kurdum ve çözmeye hazırım. En sevdiğim yinelemeli çözücümü (jacobi, gauss seidel, eşlenik gradyan, vb.) Kullanmaya çalışıyorum. Bir günden fazla beklemeye devam ediyorum ve bilgisayarım hala cevabı hesaplamaya çalışıyor!

Bu yinelemeli yöntemlerin hızlı bir şekilde çalışmamasının nedeni, (tipik olarak) böyle büyük bir denklem sistemi kurduğunuzda, matrisin özdeğerlerinin 1'e çok yakın olmasıdır. Bu neden önemlidir? Birçok yinelemeli yöntemin yakınsama oranı tersine, en büyük özdeğerle ters orantılıdır (bkz. Christian Clason'un Brigg'in Multigrid Eğitim Slaytlarına bağlantısı, bölüm 1, sayfa 27). Yani, en büyük özdeğer 1'e ne kadar yakınsa, yinelemeli yöntem o kadar yavaştır. (Not: Bu, işleri biraz basitleştiriyor, ancak multidrid ihtiyacını motive etmeye yardımcı oluyor).

Açıkçası, daha az bilinmeyen varsa (yani daha az grid noktası olan kaba bir ızgarada) sorunu çözmek her zaman daha hızlıdır. Ancak daha da önemlisi, daha kaba bir ızgara üzerindeki çözüm (veya yaklaşık çözüm), sorunu daha ince bir ızgarada çözmek için iyi bir başlangıç ​​noktasıdır. Bu, çoğu (hepsi değilse de) çoklu-çoklu yöntemlerin arkasındaki anahtar fikirdir. Neden böyle? Sezgisel olarak, mantıklı, ancak bunu doğrulamak için matematiksel olarak titiz bir yol var.

Orijinal ince ızgara sorununa uygulanan yinelemeli bir yöntemde hatanın fourier modlarına bakalım (argümanlar için, jacobi veya gauss seidel diyelim). İlk birkaç yinelemede, yüksek frekanslı (yüksek salınımlı) hataların çoğunun kaldırıldığını görüyoruz! Bu harika, ancak hala kalan ve hızlı bir şekilde geçmeyen düşük frekanslı (daha az salınımlı) bir hata var. Aslında, standart bir yinelemeli yöntemin hızlı bir şekilde yakınsamasını önleyen düşük frekans hatasıdır.

sorunu daha kaba bir ızgarada çözdüğümüzde (diyelim ki, jacobi veya gauss-seidel gibi yinelemeli bir yöntemle), düşük frekans hatalarını ince ızgaradan çok daha hızlı bir şekilde (yani daha az yineleme ile) kaldırabiliriz . Bu nedenle, kaba bir ızgara problemini çözersek, düşük frekans hataları önemli ölçüde azaltılmış bir çözümümüz var. Bu nedenle, ince ızgara üzerinde yinelemeli bir yöntem için bir başlangıç ​​noktası olarak yararlı olacaktır.

Farklı çoklu ızgara yöntemleri olsa da, çoğu aşağıdakilerin bazı varyasyonlarıyla çalışır:

  1. İnce ızgara problemiyle başlayın
  2. Kaba bir ızgara üzerine projelendirme ( kısıtlama olarak da bilinir )
  3. Kaba ızgaradaki yaklaşık çözümü (başka bir çözücü kullanarak)
  4. Kaba ızgara çözümünü daha ince ızgaraya yansıtın ( uzama olarak da bilinir )
  5. 4. tahminini kullanarak ilk tahmin olarak, ince ızgara problemini yinelemeli bir yöntemle çözün.

Benim için, multigrid yönteminin en zor kısmı ızgaralar arasındaki çıkıntılardır. @ChristianClason tarafından önerilen Briggs eğiticileri bu konuyu benden daha iyi ele alıyor.


Ayrıntılı cevap için teşekkürler! Şimdi multigrdi yöntemi hakkında temel bilgilerim var. Şimdi kısıtlama ve uzama süreçleri hakkında özel bir sorum var. Bazı Kısıtlama matrisi R ve Enterpolasyon Matrisi M ve A2 = RAI gibi formüllerin ızgaralar arasında projeksiyon yapmak için kullanıldığını okudum. Ama R ve I matrislerini nasıl oluşturacağımı anlamadım ..Bununla ilgili bir fikir var mı?
Nurlan

ChristianClason'un yayınladığı Briggs multigrid öğreticisinin 45-57 slaytlarına bakın (bölüm 1). Briggs orada Geometrik Çoklu-enerji Yöntemi yöntemini açıklar. Bulabileceğim en basit açıklama. Bununla ilgili başka sorularınız varsa, yeni bir soru göndermekten çekinmeyin! :)
Paul

15

Bu site muhtemelen sahte kod ile ayrıntılı bir açıklama istemek için iyi bir yer değildir ( SSS , "Sorunuzu cevaplayan bir kitabın tamamını hayal edebiliyorsanız, çok fazla soruyorsunuz."), bu konuyla ilgili klasik kitaplardan biriyle başlamak (aşağıda listelenmiştir) ve sorun yaşadığınız somut ayrıntılarla ilgili belirli sorularla geri dönmek.


2
Briggs gerçekten çok iyi!
vanCompute

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.