Izhikevich Nöron Modeli
Genel Bakış
Bu örnek, Izhikevich nöron modelinin nasıl simüle edileceğini ve farklı giriş akımları altında membran potansiyelinin nasıl görselleştirileceğini adım adım göstermektedir. Örnek, dynlib'in bir simülasyonu devam ettirme, model ön ayarlarını değiştirme ve grafikleri açıklayıcı notlarla zenginleştirme yeteneklerini öne çıkarır. Bu sayede, sürücü akımındaki değişikliklerin nöronun ateşleme düzenini nasıl etkilediği net bir şekilde görülebilir.
Temel Kavramlar
- Kademeli Akım Simülasyonu: Simülasyonun durumunu koruyarak ve enjekte edilen akımı güncelleyerek tek bir simülasyonu çalıştırma. Bu yöntem, hem geçici dinamikleri hem de yeni çekerleri (attractors) yakalamayı sağlar.
- Ön Ayarları Uygulama:
sim.apply_preset("bursting")komutu ile nöronun uyarılabilirliğini belirleyenc,dgibi içsel parametreleri değiştirme. - Anlık Görüntü (Snapshot) Araçları: Farklı rejimlerden geçtikten sonra kaydedilen yapılandırmayı incelemek için
sim.list_snapshots()komutu vesource="snapshot"parametresi ilesim.param_vector/param_dictkullanma. - Açıklamalı Zaman Serisi Grafikleri:
series.plot, enjekte edilen akımın değiştiği rejimleri etiketlemek içinvbands(dikey şeritler) vevlines(dikey çizgiler) gibi görsel elemanları destekler.
Izhikevich Modeli
dynlib içerisindeki yerleşik model, aşağıdaki 2-boyutlu sistemi içerir:
Membran potansiyeli v bir eşik değerine (v_th, varsayılan 30.0) ulaştığında, bir sıfırlama olayı tetiklenir ve değişkenler şu şekilde güncellenir:
- v'nin yeni değeri c olur.
- u'nun yeni değeri u + d olur.
Varsayılan parametreler (a=0.02, b=0.2, c=-65, d=8, I=10) düzenli ateşleme (regular spiking) davranışı üretir. bursting (patlama) ön ayarı ise c ve d değerlerini değiştirerek, artan akımla birlikte ortaya çıkan hızlı ateşleme patlamaları oluşturur.
Örnek Kod
Aşağıdaki kod, farklı akım seviyelerinde simülasyonu çalıştırır ve "bursting" ön ayarını uygulayarak sonuçları görselleştirir.
from dynlib import setup
from dynlib.plot import series, export, fig
sim = setup("builtin://ode/izhikevich",
stepper="rk4",
jit=True,
dtype="float32")
I0, T0 = 0.0, 300.0
I1, T1 = 5.0, 600.0
I2, T2 = 10.0, 900.0
I3, T3 = 15.0, 1200.0
I4, T4 = 10.0, 1500.0
sim.config(dt=0.01)
sim.assign(I=I0)
sim.run(T=T0, transient=50.0)
sim.assign(I=I1)
sim.run(T=T1, resume=True)
sim.assign(I=I2)
sim.run(T=T2, resume=True)
sim.assign(I=I3)
sim.run(T=T3, resume=True)
sim.apply_preset("bursting")
sim.assign(I=I4)
sim.run(T=T4, resume=True)
res = sim.results()
ax = fig.single(size=(8, 4))
series.plot(x=res.t, y=res["v"],
ax=ax,
ylim=(-80, 50),
title="Membrane Potential (v)",
vbands=[(0,T0,"b"), (T0,T1,"m"), (T1,T2,"g"), (T2,T3,"r"), (T3,T4,"c")],
vlines=[(0, "I=0"), (T0, "I=5"), (T1, "I=10"), (T2, "I=15"), (T3, "I=10")],
vlines_color="red")
export.show()
print("SNAPSHOTS: ", sim.list_snapshots())
print("Snapshot Parameter Vector: ", sim.param_vector(source="snapshot"))
print("Snapshot Parameter Dictionary: ", sim.param_dict(source="snapshot"))
Kodda series.plot fonksiyonu, her bir akım adımını işaretlemek için dikey şeritler ve çizgiler ekler. run fonksiyonundaki resume=True parametresi, akım değeri değiştikçe simülasyonun durumunu koruyarak kesintisiz devam etmesini sağlar. Grafik çizdirildikten sonra, anlık görüntü (snapshot) yardımcı fonksiyonları, daha sonraki analizler için kaydedilen parametre setlerini yazdırır.
```