Lyapunov analizi
Dynlib, maksimum Lyapunov üssünü (MLE) ve tam Lyapunov spektrumunu hesaplamak için çalışma zamanına entegre “observer” (gözlemci) modülleri sağlar. Bu gözlemciler, dynlib.runtime.observers altında factory (gözlemci fabrikası) olarak sunulur. Observer’ların çalışma zamanı tarafındaki ayrıntıları genel olarak observers rehberinde anlatılır; bu sayfa ise özellikle lyapunov_mle_observer ve lyapunov_spectrum_observer’ı, ister tek başına ister başka observer’larla birlikte, pratikte nasıl kullanacağınızı özetler.
Lyapunov tanılamaları ne zaman kullanılır?
Lyapunov üsleri, yörünge boyunca sonsuz küçük pertürbasyonların ortalama olarak nasıl büyüyüp küçüldüğünü nicelendirir:
- Pozitif MLE, başlangıç koşullarına hassas bağımlılığı ve kaotik rejimleri işaret eder.
- Sıfır veya sıfıra yakın MLE, çoğunlukla periyodik ya da yarı-periyodik hareketle ilişkilidir.
- Negatif MLE, kararlı çekicileri (özellikle kararlı sabit noktalar / “sink”) gösterir.
Lyapunov spektrumu ise tek bir üsle yetinmeyip birden fazla yöndeki genişleme/daralma oranlarını birlikte verir. Birden çok kararsız/kararlı yönün önemli olduğu sistemlerde (ör. daha yüksek boyutlu akışlar ya da bazı haritalar) daha bütünlüklü bir kararlılık resmi sağlar.
Observer factory’leri
İki factory de dynlib.runtime.observers içindedir ve aynı genel kullanım desenini paylaşır:
from dynlib.runtime.observers import lyapunov_mle_observer, lyapunov_spectrum_observer
factory = lyapunov_mle_observer(model=sim.model, record_interval=record_every)
Ortak argümanlar
model: DerlenmişModel. Doğrudanmodel=...verebilir ya da factory modunda bırakıpSim.run(...)sırasında modelin enjekte edilmesini sağlayabilirsiniz.mode:"flow","map"veya"auto"."auto"seçilirsemodel.spec.kindüzerinden türetilir ("ode" -> "flow","map" -> "map")."flow": payda (denominator) zamandır."map": payda iterasyon/adım sayısıdır.record_interval/trace_plan: Yakınsama izinin (trace) hangi aralıkla örnekleneceğini belirler. Uygulamada izleme, bu observer’ların standart çıktısının bir parçasıdır; bellek kullanımını azaltmak için daha büyük birrecord_intervalveya uygun birtrace_planseçin.prefer_variational_combined(MLE için): Stepper destekliyorsa, durum + tanjant vektörünün birleşik entegrasyonunu (combined variational stepping) tercih eder; destek yoksa stepper’ın tanjant-adımı yoluna (tangent-only variational stepping) düşer.
Spektruma özgü argümanlar
k: Hesaplanacak önde gelen üs sayısı. İlk üs MLE’dir. (1 <= k <= n_stateolmalı.)init_basis: İsterseniz başlangıç için(n_state, k)boyutlu bir başlangıç tabanı verebilirsiniz; verilmezse kanonik taban kullanılır.
Çalıştırıcı/stepper gereksinimleri
Her iki observer da ObserverRequirements üzerinden gereksinimlerini beyan eder (özellikle need_jvp=True). Ayrıca:
"flow"modunda, sayısal olarak tutarlı sonuçlar için stepper’ın varyasyonel adımlama desteği gerekir. Bu destek yoksa observer hata verir ve uyumlu stepper’lara yönlendirir."map"modunda, tanjant evrimiJ*v(Jacobian–vektör çarpımı, JVP) ile yürütüldüğünden stepper’ın varyasyonel adım desteği zorunlu değildir; ancak modelinjvpsağlaması gerekir.
Tipik iş akışı
Sim.run(...)çağrısında observer’ları ekleyin.- Yakınsama eğrisini izlemek istiyorsanız
record_intervalveyatrace_planile iz örneklemesini ayarlayın. - Çalıştırma bittiğinde
sim.results()üzerinden observer çıktıları ve izlerini okuyun.
Örnek (lojistik harita)
Lojistik harita demosu (examples/analysis/lyapunov_logistic_map_demo.py) tipik bir kurulum gösterir:
sim.assign(x=0.4, r=4.0)
sim.run(
N=5000,
dt=1.0,
record_interval=1,
observers=[
lyapunov_mle_observer(record_interval=1),
lyapunov_spectrum_observer(k=1, record_interval=1),
],
)
result = sim.results()
Çıktıları okuma
Her Lyapunov observer’ı iki tür veri üretir:
- Çıkış alanları (output): Çalışma sonunda biriken/nihai istatistikler.
- İz (trace): Çalışma boyunca örneklenen “anlık tahminler” (yakınsama eğrisi).
MLE observer çıktıları
lyapunov_mle_observer modülü aşağıdaki output alanlarını üretir:
log_growth: Birikenlog(||v||)toplamıdenom:"flow"için toplam zaman,"map"için toplam adım sayısısteps: adım sayacıvariational_mode: kullanılan varyasyonel yolun meta bilgisi (0: basit/Euler, 1: combined, 2: tangent-only)
Trace tarafında ise:
mle:log_growth / denomolarak örneklenen MLE yakınsama izi
Spektrum observer çıktıları
lyapunov_spectrum_observer modülü:
log_r0 ... log_r{k-1}: QR (Modified Gram–Schmidt) adımında birikenlog(diag(R))toplamlarıdenom,steps,variational_mode
Trace tarafında:
lyap0 ... lyap{k-1}: her bir üs içinlog_rj / denomyakınsama izleri
ResultView.observers sözlüğü üzerinden ilgili anahtarla erişip (ör. "lyapunov_mle", "lyapunov_spectrum"), çıktı alanlarını ve izleri inceleyebilirsiniz. İzleri, kaydedilen yörünge ile hizalamak için trace_steps, trace_time gibi yardımcılar ve doğrudan indeksleme (örn. result["..."]) kullanılabilir.
İpuçları
- MLE’yi başka tanılamalarla birlikte çalıştıracaksanız, mümkünse aynı
trace_plan/record_intervaldüzenini kullanın; böylece izler aynı örnekleme ızgarasına oturur. - Bellek kullanımını düşürmek için
record_intervaldeğerini büyütün. Yakınsama eğrisini “yaklaşık” görmek çoğu zaman yeterlidir. - Spektrum izlerinde
k’yi gereksiz büyük seçmeyin: çalışma alanı ve hesap maliyetikile birlikte artar. "flow"modunda hata alıyorsanız, seçtiğiniz stepper’ın varyasyonel adımlamayı desteklemediği anlamına gelir. Bu durumda ya uyumlu bir stepper seçin ya da model türüne uygunsa"map"modunu tercih edin.- Yalnızca nihai değere odaklanıyorsanız, izleri çizmek yerine output alanlarından (
log_growth/denomveyalog_rj/denom) nihai sonucu türetin; trace’i sadece gerektiğinde inceleyin.