Newton'un yöntemi neden birbirine yaklaşmıyor?


22

Kullanıyorum PETSc 'in doğrusal olmayan çözücü paketi snes kısmi diferansiyel denklem kesikli ile elde edilen, doğrusal olmayan bir denklemler sistemini çözmek için. Çözücünün neden birbirine yakınlaşmadığını ve denklemlerimi başarılı bir şekilde çözmek için ne yapabilirim?


8
Tüm yinelemeli yöntemlerde olduğu gibi, Newton-Raphson yöntemini başlatmak için iyi bir tohum bulmak önemlidir. Zayıf bir başlangıç ​​noktası genellikle kaosa yol açar.
JM

6
Ben "çoğu zaman kaosla sonuçlanır" yanlış olduğunu düşünüyorum. Blum, Cucker, Shub ve Smale'ye bakıldığında, Newton kaotik yineleme ile sonuçlanabilecek sınırlarla ayrılmış çekici havzalara sahiptir. Dolayısıyla bu tür davranışların yakınsama ile karşılaştırılması çok düşüktür. Algoritma yalnızca gerçek çözümler arıyorsa, sık sık yakınsamayacaktır, ancak kaotik hale gelmeyecektir.
Matt Knepley

5
Teknik olmayan anlamda "kaos" demek istedim, @Matt; örneğin, sonsuzluğa sapma veya döngüsel davranış. Belki "felaket" daha iyi bir kelime seçimi olurdu?
JM,

Yanıtlar:


42

Newton'un yöntemi pek çok nedenden ötürü birleşmeyebilir, işte en yaygın olanlardan bazıları.

  • Jacobian yanlıştır (veya sırayla doğrudur, ancak paralel değildir).
  • Doğrusal sistem çözülmemiştir veya yeterince doğru bir şekilde çözülmemiştir.
  • Jacobian sistemi, lineer çözücünün kullanmadığı bir tekilliğe sahiptir.
  • İşlev değerlendirme yordamında bir hata var.
  • İşlev sürekli değildir veya sürekli ilk türevlere sahip değildir (örneğin faz değişimi veya TVD sınırlayıcıları).
  • Denklemlerin bir çözümü olmayabilir (örneğin sabit durum yerine limit döngüsü) veya ilk tahmin ile sabit durum arasında bir "tepe" olabilir (örneğin reaktifler sabit duruma gelmeden önce tutuşmalı ve yanmalıdır, fakat sabit devlet artıkları yanma sırasında daha büyük olacaktır).

İşte Newton'un yakınsama eksikliğinde hata ayıklamaya yardımcı olmanın yollarından bazıları.

  • Seçenekleri ile çalıştırın -snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason. Doğrusal çözülme yakınlaşmıyorsa, Jacobian'ın doğru olup olmadığını kontrol edin, sonra bu soruyu görün . Önkoşul kalan kalıntı yakınsaksa, ancak gerçek artık olmazsa, ön koşullandırma tekil olabilir. Doğrusal çözme iyi birleşiyorsa, ancak satır araması başarısız olursa Jacobian yanlış olabilir.
  • -pc_type lu or -pc_type svdSorunun zayıf bir doğrusal çözücü olup olmadığını görmek için birlikte koşun
  • Jacobian'ın makul görünüp görünmediğini görmek için -mat_viewveya ile koşun-mat_view_draw
  • -snes_type test -snes_test_displayKullanmakta olduğunuz Jacobian'ın yanlış olup olmadığını görmek için koşun . -mat_fd_type dsSonucun, farklılaşma parametresi seçimine duyarlı olup olmadığını görmek için eklerken çıktıyı karşılaştırın .
  • -snes_mf_operator -pc_type luKullanmakta olduğunuz Jacobian'ın yanlış olup olmadığını görmek için koşun . Sorun doğrudan çözme için çok büyükse, deneyin -snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12. -mat_mffd_type dsSonuç farklılaştırma parametresi seçimine karşı duyarlı olup olmadığını görmek için eklerken çıktıyı karşılaştırın .
  • Sorunun sadece paralel olup olmadığını görmek için bir işlemci üzerinde çalıştırın.
  • -snes_ls_monitorHat arama işleminin başarısız olup olmadığını görmek için koşun (bu genellikle kötü bir Jacobianın işaretidir).
  • -infoÇözüm süreci hakkında daha ayrıntılı bilgi almak için birlikte çalıştırın .

Yukarıdaki her şey kontrol edilirse Newton işlemine yardımcı olmanın bazı yolları

  • İnce ağınızda daha iyi ilk tahminler üretmek için ızgara dizilimi ile çalıştırın ( -snes_grid_sequencea ile çalışıyorsanız tek ihtiyacınız olan şey DM).
  • Dörtlü hassasiyetle çalıştırın ( ./configure --with-precision=__float128 --download-f2cblaslapackPETSc 3.2 ve sonrası, sürüm 4.6 veya üstü GNU derleyicileri gerekir)
  • Birimleri (boyutsuzlaştırma), sınır koşulu ölçeklendirmesini veya formülasyonunu, böylece Jacobian'ın daha iyi şartlandırılması için değiştirin.
  • İşlevsellikte sürekli ilk türevlere sahip olmayan fonksiyon özellikleri (genellikle ifartık değerlendirmede ifadeler olduğunda ortaya çıkar , örneğin faz değişimi veya TVD sınırlayıcıları). Değişken bir eşitsizlik çözücüsü kullanın (Süreksizliklerin temel bir önemi varsa, SNESVINEWTONRSLS ) kullanın.
  • Bir güven bölgesi yöntemi deneyin (-ts_type tr , parametreleri ayarlamanız gerekebilir).
  • Süreklilik parametresi ile çözümü bildiğiniz bir noktadan çalıştırın, sabit durum problemlerini çözmek için bkz. TSPSEUDO . Size mümkün olan tüm çözümleri alabilen (ve hepsini bulduğunu söyleyebileceğiniz) PHCpack gibi homotopy çözücü paketleri vardır, ancak bunlar ölçeklenebilir değildir ve küçük problemler dışında hiçbir şeyi çözemez.
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.