Doğrusal denklemlerin çözümü için bir yöntem nasıl seçilir


31

Bildiğim kadarıyla, bir lineer denklem sistemini çözmenin 4 yolu vardır (eğer daha varsa beni düzeltin):

  1. Sistem matrisi tam dereceli bir kare matris ise, Cramer Kuralı'nı kullanabilirsiniz;
  2. Sistem matrisinin ters veya tersini hesaplayın;
  3. Matris ayrıştırma yöntemlerini kullanın (Gaussian veya Gauss-Jordan eleme, LU ayrıştırma olarak kabul edilir);
  4. Eşlenik gradyan yöntemi gibi yinelemeli yöntemler kullanın.

Aslında, Cramer kuralını kullanarak veya özellikle yüksek boyutlu matrisler için ters veya sözde tersini hesaplayarak denklemleri çözmek neredeyse hiç istemez, bu nedenle ilk soru sırasıyla ayrıştırma yöntemleri ve yinelemeli yöntemleri kullanmanızdır. Sistem matrisinin boyutuna ve özelliklerine bağlı olduğunu tahmin ediyorum.

İkinci soru, bilginize göre, nümerik stabilite ve verimlilik açısından belirli sistem matrisi için ne tür ayrışma yöntemleri veya yineleme yöntemleri en uygunudur.

Örneğin, eşlenik gradyan yöntemi, matrisin simetrik ve pozitif kesin olduğu denklemleri çözmek için kullanılır, ancak - . Ayrıca pozitif kesin matris için, çözümü aramak üzere Cholesky ayrıştırma yöntemini kullanabilirsiniz. Fakat ne zaman CG yöntemini seçeceğimi ve Cholesky ayrışmasını ne zaman seçeceğimi bilmiyorum. Benim hissim, büyük matrisler için CG yöntemini kullanmamız daha iyi.A T A x = A T bAx=bATAx=ATb

Dikdörtgen matrisler için, QR ayrıştırması veya SVD kullanabiliriz, ancak yine de bunlardan birini nasıl seçeceğimi bilmiyorum.

Diğer matrisler için, şimdi Hermitian / simetrik matrisler, seyrek matrisler, bant matrisleri vb. Gibi uygun çözücüyü nasıl seçeceğimi bilmiyorum.


1
Merhaba @chaohuang ve SciComp'a hoş geldiniz! Bu tartışmayı görmek isteyebilirsiniz: scicomp.stackexchange.com/questions/81/…
Paul

Merhaba @Paul, yorumlarınız için teşekkürler, bu konu yalnızca seyrek matrisler veya herhangi bir matrisle mi ilgili?
chaohuang

6
Sorunuz muazzam bir kapsamda ve burada stackexchange'te bulunan soru-cevap formatı için biraz geniş olabilir ... ilgilendiğiniz belirli bir matris sistemi sınıfı var mı?
Paul

3
@chaohuang Bu konuda çok sayıda kitap var. Bu soru tıp doktoruna "genel olarak" tedavileri nasıl seçtiklerini sormak gibi bir şey. Belirli bir problem sınıfına özgü olmayan bir soru sormak istiyorsanız, bir şeyi tam olarak sormak için alana yeterince aşina olmak için çalışmalısınız. Aksi takdirde, ilgilendiğiniz belirli sorunu açıklayın.
Jed Brown

2
SSS'den: Sorunuza cevap veren kitabın tamamını hayal edebiliyorsanız, çok fazla soru soruyorsunuz. Bu soruyla ilgili tüm dergiler ve yüzlerce kitap var.
David Ketcheson

Yanıtlar:


45

Sorunuz sürücüye bağlı olarak hangi tornavidanın seçileceğini sormak gibidir (slot, Phillips, Torx, ...): Çok fazla olmanın yanı sıra , seçim aynı zamanda sadece bir vidayı sıkmak mı yoksa bir montaj mı yapmak istediğinize bağlıdır. bütün kütüphane rafları. Bununla birlikte, sorunuzun kısmi cevabında, lineer sistemin çözümü için bir yöntem seçerken akılda tutmanız gereken konulardan bazıları . Kendimi tersinir matrislerle sınırlayacağım; Alt veya üst düzey sistemlerin durumları farklı bir konudur ve gerçekten ayrı sorular olmalıdır.Ax=b

Ax~

  1. x~x~ x *x~x<103x
  2. Ne kadar hızlı ihtiyacınız var? Buradaki tek ilgili metrik , makinenizdeki saat zamanıdır - bunlardan birine sahip değilseniz, büyük bir kümeye mükemmel ölçeklenen bir yöntem en iyi seçenek olmayabilir, ancak bu parlak yeni Tesla kartlarından birine sahipsiniz.

Bedava öğle yemeği diye bir şey olmadığından, genellikle ikisi arasında bir takas karar vermelisiniz. Bundan sonra, iyi bir yönteme (veya daha iyi bir uygulama bulabileceğiniz yöntemi) karar vermek için matrisine (ve donanımınıza) bakmaya başlarsınız . (Buraya en iyi yazmayı nasıl önlediğime dikkat edin ...) Buradaki en alakalı özelliklerA

  • Yapı : Is simetrik? Yoğun mu seyrek mi? Bantlı?A
  • Özdeğerler : onlar (yani tüm olumlu Are pozitif tanımlı)? Kümelenmiş mi? Bazılarının çok küçük veya çok büyük büyüklüğü var mı?A

Bunu akılda tutarak, daha sonra (devasa) literatürü gözden geçirmeli ve kendi probleminiz için bulduğunuz farklı yöntemleri değerlendirmelisiniz. İşte bazı genel açıklamalar:

  • Çözümünüz için makine hassasiyetine gerçekten ihtiyacınız varsa (bu değere yakın) veya matrisiniz küçükse (örneğin, satıra kadar), özellikle yoğun sistemler için (bu durumda, her matris çarpımından dolayı) doğrudan yöntemleri yenmek zordur olacak Eğer tekrarlamalar çok gerekiyorsa ve bu kudreti uzakta olmayacak doğrudan bir yöntem ihtiyacı). Ayrıca, LU ayrışması (döner) en yinelemeli yöntemlerin aksine, herhangi bir tersinir olmayan matris için çalışır. (Elbette, eğer simetrik ve pozitif kesinse, Cholesky'yi kullanırsınız.)O ( n, 2 ) O ( n, 3 ) bir1000O(n2)O(n3)A

    Bu aynı zamanda (büyük) seyrek matrisler için de geçerlidir eğer genel olarak Seyrek matrisler seyrek LU ayrışma yok ve faktörler (hızlı) belleğe uymaz ise, bu yöntemler kullanılmaz hale: Eğer bellek sorunlarla yoktur.

    Ayrıca, doğrudan yöntemler uzun süredir kullanılmaktadır ve bant yapısından otomatik olarak faydalanabilecek çok yüksek kaliteli yazılımlar (örneğin, UMFPACK, MUMPS, SuperLU) .A

  • Daha az kesinliğe ihtiyacınız varsa veya doğrudan yöntemleri kullanamıyorsanız, durağan bir yöntem (örneğin Jacobi veya Gauss-Seidel gibi) yerine bir Krylov yöntemi (örn. simetrik pozitif bir tanım ise CG, yoksa GMRES veya BiCGStab) seçin: Bunlar genellikle yakınsamaları, spektral yarıçapı ile değil, koşul numarasının (karekökü) belirlemesi ve matrisin yapısına bağlı olmaması nedeniyle daha iyi çalışır. Bununla birlikte, bir Krylov yönteminden gerçekten iyi bir performans almak için, matrisiniz için iyi bir ön şartlayıcı seçmeniz gerekir - bu bir bilimden ziyade bir zanaattır ...AAA

  • Doğrusal sistemleri aynı matris ve farklı sağ taraflarla tekrar tekrar çözmeniz gerekiyorsa, doğrudan yöntemler yinelemeli yöntemlerden daha hızlı olabilir, çünkü ayrıştırmayı yalnızca bir kez hesaplamanız gerekir. (Bu sıralı bir çözüm varsaymaktadır; aynı anda tüm sağ taraflara sahipseniz, aynı zamanda Krylov yöntemlerini de kullanabilirsiniz.)

Tabii ki, bunlar sadece çok zorlu kurallar: Yukarıdaki ifadelerden herhangi biri için, görüşmenin doğru olduğu bir matris var.

Yorumlarda referanslar istediyseniz, işte başlayabilmeniz için bazı ders kitapları ve inceleme makaleleri. (Bunlardan hiçbiri - ne de küme - kapsamlı değildir; bu soru çok fazla geniş ve sizin sorununuza çok fazla bağlı.)


2
Tornavida benzetmenizi beğendim!
Paul

@chaohuang Bu sorunuzu cevapladıysa, kabul etmelisiniz. (
Olmadıysa

@ ChristianClason kabul etti. Bekleyen ve birilerinin dikdörtgen matris meselesine ışık tutabileceğini umuyordum. Uzun zamandan beri, sanırım böyle bir cevap asla olmayacak :(
chaohuang

@chaohuang Teşekkürler. Eğer hala dikdörtgen matrislerle ilgileniyorsanız, "Belirlenmiş sistemleri çözmek için nasıl bir yöntem seçileceği" konulu (bağlantılı) bir soru sormalısınız.
Christian Clason

İşte lineer denklem büyük seyrek sistemlerinin çözümünde iteratif yöntemlerin kullanımı ile ilgili bir başvuru.
chaohuang


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.