Matlab'daki ODE'leri kullanarak adım boyutu seçimi


12

Selam ve soruma bakmak için zaman ayırdığınız için teşekkürler. Bu, daha önce physics.stackexchange.com'da gönderdiğim sorumun güncellenmiş bir versiyonudur.

Şu anda 2D eksiton spinor Bose-Einstein Kondensini inceliyorum ve bu sistemin temel durumunu merak ediyorum. Temel duruma ulaşmanın matematiksel yöntemine hayali zaman yöntemi denir .

Kuantum mekaniğinde zamanın hayali bir ile değiştirildiği yöntem çok basittir Bu ikame sistemimdeki yüksek enerjili parçacıkların düşük enerjili olanlardan daha hızlı bozulmasına neden olur. Hesaplamanın her adımında parçacık sayısını yeniden normalize ederek, en düşük enerji parçacıklarına sahip bir sistemle, yani. zemin durumu.

t=iτ

Söz konusu denklem (ler) doğrusal olmayan Schrödinger denklemi , bazen de Gross-Pitaevskii denklemi olarak adlandırılır . Sorunu çözmek için sistemi zaman içinde geliştiren ve nihayetinde zemin durumuna ulaşan Matlabs ode45 kullanıyorum.

  • Not! Doğrusal olmayan Schrödinger denklemi, laplacian ve uzaydaki diğer bazı diferansiyel terimleri içerir. Bunların hepsi hızlı Fourier dönüşümü kullanılarak çözüldü. Sonunda sadece bir zamanımız var. *

Benim sorunum ve soru: hesaplamalar gitmek için . Ode45 bir for döngüsüne konur, böylece aynı anda dev bir vektör hesaplamaz . İlk tur ode45 (odefun, ) ile başlar ve bir sonraki sefer . Burada zaman adımı benim sorunum. Zaman adımlarındaki farklı seçimler bana farklı zemin durumu çözümleri verir ve hangi zaman adımının bana "en" doğru zemin durumunu verdiğini nasıl belirleyeceğimi bilmiyorum!t f [ t 0 , , t f ] [ t 0 , t 0 + Δ / 2 , t 0 + Δ ] , y , t 0 + Δ Δt0tf[t0,,tf][t0,t0+Δ/2,t0+Δ],y,t0+ΔΔ

Girişim: Bu şemada, büyük zaman adımlarının, orijinal parçacık sayısına yeniden normalleştirilmeden önce çok sayıda parçacığın çürümesine neden olacağını, küçük zaman adımlarının da yeniden normalleştirilmeden önce daha az miktarda parçacığın çürümesine neden olacağını anlıyorum. İlk düşüncem, küçük zaman adımlarının daha doğru bir çözüm sunması gerektiğidir, ancak tam tersi görünüyor.

Ben sayısal bir uzman değilim o yüzden ode45 seçimi sadece keyfi idi. ode113 bana aynı şeyi veriyor. :(

Bu konuda herhangi bir düşüncesi olan var mı? Herhangi bir ek ayrıntıya ihtiyacınız olup olmadığını bize bildirin.

Teşekkür ederim.

Güncelleme 1: Hayali zaman yöntemini ve ODE'leri araştırıyorum. Zaman adımı yeterince küçük değilse, her şey kararsız hale gelir. Bu, doğrusal olmayan denklemlerimin sert olup olmadığını merak etmemi sağlıyor , bu da işleri anladığımdan çok daha zorlaştırıyor. Seni bilgilendirmeye devam edeceğiz.

Güncelleme 2: DÜZELTİLDİ: Sorun aslında ODE dışında normalleşmeye sahipti. Normalleştirme odefun içinde tutulursa, ODE farklı "dış" zaman adımlarının seçimleri için aynı sonucu döndürür. Meslektaşım bana eski kodları gösterdi ve ben de odefun'uma bir satır ekledim.

function y_out = odefun(t,y_in,...variables...) 

    ...
    [ Nonlinear equations evaluated ]  
    ...


    y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end

Son satır, mevcut partikül sayısı (Ntemp) ve sistemin tutması gereken partikül sayısı (N0) arasındaki farkı hesaplar. Partiküllerin bir kısmını çıktıya geri ekler ve böylece sistemde hepsinin çürümesi yerine toplam partikül sayısı stabilitesi yaratır.

Ayrıca sorunun boyutsallığı ve ODE'de zaman adımları olarak pikosaniye veya nanosaniye ile çalışmadaki bazı farklılıklar hakkında yeni bir soru ortaya koyacağım.

Hepinize teşekkür ederim. :)


3
Temel sorun, zorla ode45()dengelenmiş adımlar atmak gibi uyarlanabilir bir yöntem kullanmanızdır . Neden, "dev vektör" in oluşumundan kaçınıyorsunuz? Kesinlikle eşit aralıklı noktalara ihtiyacınız varsa, ode45()her zamanki gibi devam edin ve sonra enterpolasyon kullanın.
JM

Hmm ... sorun bu olabilir. Bu sabit adımların kökeni, parçacıkların sayısının tamamen bozulmadan önce yeniden normalleştirilmesi gereken bir yerdi. Ama bunu normalde odefun'a koyarak ve "dev zaman vektörünü" kullanarak yapabilirim. Ayrıca, ode45'e girişi 4 * 129 * 129 sayıdır. Zaman adımlarını kullanmazsam yeterli hafızam olmazdı. y

Bellek hizmet veriyorsa, ode45()belirli bir eşikten daha büyük adımları korumanıza izin veren bir seçenek olmalıdır ; Belki içine bakmak istersin.
JM

1
Cevap sadece yerel bir hata tahmini kullanmaktır. ODE45'te yerleşik bir tane var, bu yüzden en kolay şey bunu kullanmaktır, ancak alternatif olarak kendi kodunuzu yazabilirsiniz.
David Ketcheson

1
Takip cevap olarak söz o çıkıyor boyutlar ile boyutsal miktar . ile daha tutarlı sonuçlar elde edilebilir, burada zaman adımıdır? 1 / zaman α0.11/timeΔtαΔt(NtN0)Δt
Stefano M

Yanıtlar:


4

MATLAB kodunuzu göndermediğiniz için, ode45'i nasıl çağırdığınızdan emin değilim. Ben ode45 her çağrıda tspan vektörü (ikinci argüman) değiştiriyor sanırım. Anlaşılması gereken ilk şey, tspan vektörünün ode45 tarafından kullanılan zaman adımı üzerinde (neredeyse) hiçbir etkisi olmadığıdır. Tspan vektörü, entegrasyonun zaman aralığını ve ne zaman çıktı almak istediğinizi ode45'e iletmenizi sağlar. Ode45'te Runga-Kutta algoritması tarafından kullanılan zaman adımı, öngörülen bir doğruluk elde etmek için dahili olarak ayarlanır. Bu doğruluğu kontrol eden iki parametre ode45'e aktarılan seçenekler yapısındaki RelTol ve AbsTol'dur. Makul varsayılanları var ve bunlardan bahsetmediğiniz için, onları değiştirmediğinizi varsayıyorum.

Ben "neredeyse" normal ode45 zaman adımı üzerinde hiçbir etkisi dedi. Ode45'in zaman adımına göre çok küçük zaman aralıklarında çıktı talep ediyorsanız, çıktı isteğinizi karşılamak için zaman adımını azaltmanız gerekecektir. JM'in böyle olduğunu varsaydığı şey olduğuna inanıyorum. Neden bu kadar çok çıktı zamanında çözüme ihtiyacınız var? Genellikle düzgün bir çizim oluşturmak için yeterli zamanda çıktı talep etmek yeterlidir.

Gördüğünüz çözümdeki değişikliğe gelince, belki RelTol ve AbsTol'ün varsayılan değerleri sorununuz için uygun olmayabilir. Ode45'teki döngünüzü tek bir çağrı ile değiştirmenizi, makul sayıda çıktı talep etmenizi ve birleşik bir çözüm elde edene kadar daha küçük RelTol ve AbsTol değerlerini denemenizi öneririz.


Cevap için teşekkürler. Birçok çıkış zamanında bir çözüme ihtiyacımın nedeni, dalga fonksiyonu düzenli olarak normalleştirilmezse, her şey bozulur ve sistemim boştur. Bu yüzden ode45'i küçük tspan vektörleriyle bir döngüye koydum, böylece her tspan vektöründen sonra yeniden normalleştirebildim.

2

Doğrusal olmayan Schrödinger denklemi, doğrusal olmayan olduğundan, bazıları kararlı olabilecek çok sayıda durağan duruma sahip olabilir. Fiziksel gerçeklikte, belirli bir durumdan başlayarak, sistem deterministik olarak bir son duruma dönüşecektir. Sayısal şema size farklı takdir yetkileri (zaman adımları) için farklı sonuçlar verirse, bu sizin takdir yetkinizin temel kusurudur. Kodunuzu kontrol edin.

Bir durumuyla , gerçekten sabit bir durum olup olmadığını doğrulamak kolaydır: Zaman evrimi ile verilirse sonra Gerçekten farklı durağan durumlarla karşılaşırsanız, Gibbs enerjilerini Burada enerji yoğunluğudur. Ne zaman , sıklıkla Ginzburg-Landau denklemleri için, örneğin, oldukça basit görünüyor .d ψψ0F(ψ0)=0.G(ψ)=ΩE(ψ)E()F(ψ)=0E(ψ)E(ψ)=-| ψ| 4

dψdt=F(ψ),
F(ψ0)=0.
G(ψ)=ΩE(ψ)
E()F(ψ)=0E(ψ)E(ψ)=|ψ|4

Evet. Çıktı çözümümün yoğunluk profilini çiziyorum ve uzun bir süre değişmediğinde, temel olarak evrilmeyi bıraktığımda, sabit bir duruma ulaştığımı varsayıyorum. Ancak enerji yoğunluğuna bakmanın yardımcı olabileceğinden emin değilim çünkü dalga fonksiyonu (+2, +1, -1, -2) spin bileşenlerine sahip bir spinördür. Her bileşenin entegre edilmesinin bana kondens enerjisini söyleyeceğini sanmıyorum, ancak zemin durumuna geldiğimde, enerji yoğunluğu sabit olmalı ve böylece zaman içinde sabit olmalı, bu doğru bir çözüm için bir ipucu.

1

Sorun çözüldü:

Normalizasyon, ODE'de değerlendirilen işlevin bir parçası olmalıdır. ODE'yi birçok adımda ayırmak ve bunlar arasında normalleştirmek, görünüşte sayısal dengesizliğe neden olur ve ODE'nin kırıldığı zaman aralıklarına bağlı olarak farklı sonuçlar üretir. (Daha fazla ayrıntı için söz konusu düzenleme 2'ye bakın.)

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.