Tekil doğrusal ODE'nin öz sistemini bulmak için sonlu farklar yönteminin doğruluğunu nasıl geliştirirsiniz?


11

Bu tür bir denklemi çözmeye çalışıyorum:

(-2x2-f(x))ψ(x)=λψ(x)

Burada 0'daf(x) basit bir kutba sahiptir , en küçük N özdeğerleri ve özvektörleri için. Sınır koşulları şunlardır: ψ ( 0 ) = 0 ve ψ ( R ) = 0 ve sadece ( 0 , R ] üzerindeki işleve bakıyorum .0N-ψ(0)=0ψ(R,)=0(0,R,]

Ancak, çok basit, eşit aralıklı bir sonlu fark yöntemi yaparsam, en küçük özdeğer çok yanlıştır (bazen orada olması gerektiğini bildiğimden daha olumsuz birkaç büyüklük sırası olan "yanlış" bir özdeğer vardır, gerçek "ilk özdeğer" ikinci olur, ancak yine de fakirdir).

Böyle bir sonlu fark şemasının doğruluğunu ne etkiler? Tekilliğin soruna neden olan şey olduğunu ve düzensiz aralıklı bir ızgaranın işleri önemli ölçüde artıracağını varsayıyorum, beni iyi bir düzgün olmayan sonlu fark yöntemine yönlendirebilecek herhangi bir makale var mı? Ama belki daha yüksek bir düzen farkı şeması onu daha da iyileştirir? Nasıl karar veriyorsunuz (ya da sadece "her ikisini de deneyin ve bakın")

Not: Sonlu fark şemam, 3 köşegeninin bulunduğu simetrik üçgendir:

(-12Δ2,1Δ2-f(x),-12Δ2)

Burada ızgara aralıktır. Ve matrisi doğrudan simetrik bir çözücü kullanarak çözüyorum (doğruluğun çözücüden büyük ölçüde etkilenmediğini varsayıyorum, yanlış mıyım?)Δ


Sonlu farklı şablonun orta vadeli olmamalı yerine? 1Δ2-f(x)
Wolfgang Bangerth

Yanıtlar:


6

Sonlu fark şemasının doğruluğunu artırmak istiyorsanız, şablonunuzun derecesini her zaman artırmayı deneyebilirsiniz. Eşit uzaklıktaki noktalarda bu, sayısal dengesizliklere yol açabilir. Bu sorunları önlemek ve hala yüksek doğruluk elde etmek için Spektral Yöntemleri kullanmanızı öneririm .

Sorununuz sabit kutuplara sahipse, alanınızı bölerek ve iki bağlantılı sorunu çözerek bunlardan kurtulmayı deneyebilirsiniz.

Chebfun sistemi (uyarı: hangi Geliştiriciler biriyim), yukarıda belirtilen teknikler kullanan ve size sorunun hızlı bir spin verebilir chebguiarayüzüne. Ben kendim denemek istiyorum, ama alan veya ne olduğunu bilmiyorum .f(x)

chebgui[ - 1 , 1 ]-u"(x)-u(x)x=λu[1,1]

Basit bir ikinci mertebeden diferansiyel denklemin özdeğerlerini ve öz mododlarını hesaplamak için <code> chebgui </code> kullanın.

Güncelleme

Bu sorunu Chebfun'a çok fazla girmeden çözmek istiyorsanız, tüm detaylar Nick Trefethen'in " Matlab'daki Spektral Yöntemler " kitabının 9. Bölümünde olmalıdır .


Orijinal direğimi, direğe gerçekten bakmadığımı, sadece çok yakın olduğunu açıkça belirtmek için düzenledim. Bilgi için teşekkürler, chebfun'a bakmam gerekecek.
Andrew Spott

3
Yorum yapmadınız mı? Lütfen, herkesin yararına, bu cevabın nasıl geliştirilebileceğine dikkat çekebilir misiniz?
Pedro

0

İşleri hızlı bir şekilde daha iyi hale getirmenin bir yolu (muhtemelen daha iyi olmasa da ) kullandığınız en düşük dereceli sonlu fark yöntemleri ile en düşük dereceli sonlu eleman yöntemi arasındaki benzerliği göz önünde bulundurmaktır. 1d'de doğrusal sonlu eleman şekli işlevlerini kullanarak elde ettiğiniz tri-diyagonal matrisi hesaplarsanız, ikinci türevlerin ayrıklaştırılması tamamen aynı görünecektir (bir faktör ancak çıkıyor . Ben bilmiyorum sizin durumda görünüyor, ama nerede şu anda kullandığınız , bunun yerine böyle bir şey olacak buradaf ( x ) ψ ( x ) f ( x ) f ( x i ) x i + 1 x i - 1 f ( x ) φ i ( x ) φ i ( x ) x i f ( x )Δxf(x)ψ(x)f(x)f(xben)xben-1xben+1f(x)φben(x)φben(x) zirve yapan şapka fonksiyonudur . Eğer yeterince basittir, o zaman tam olarak bu integralini hesaplayabilir, ve bunu özdeğer bulmak zorunda olan daha doğru bir matris sağlayacaktır.xbenf(x)

Tabii ki, zaten sonlu elemanlar yapıyorsanız, 1d'de çok daha zor olmayan daha yüksek seviyeli elemanlar kullanmaya da yatırım yapabilirsiniz.

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.