Yardımcı (Aux) Değişkenler
Yardımcı değişkenler (DSL dosyalarında [aux]), ara veya türetilmiş ifadeleri isimlendirmenizi sağlar; böylece mantıklarını tekrarlamadan denklemler, olaylar ve fonksiyonlar boyunca yeniden kullanabilirsiniz. Her adımdan (step) sonra durum güncellemelerinin ardından değerlendirilirler ve her ifade model çalışmadan önce Python'a derlenir.
Sözdizimi (Sentaks)
[aux]
energy = "0.5 * mass * velocity^2"
gain = "baseline_gain * exp(-t / tau)"
# Döngü olmadığı sürece önceden tanımlanmış herhangi bir aux'u referans alabilirsiniz.
- Her değer bir dize (string) sabiti olmalıdır çünkü bir ifade olarak ayrıştırılır ve tür kontrolü yapılır. İfade
^içerdiğinde, derleyici Python uyumluluğu için bunu**olarak yeniden yazar. - Aux ifadeleri; durumlara (states), parametrelere, zamana (
t), diğer aux değişkenlerine (döngü olmamalı), kullanıcı tanımlı fonksiyonlara, matematik makrolarına ve üreteç (generator) ifadelerine başvurabilir. Olay (event) bağlamlarında çalışmadıkları için olay makrolarını kullanamazlar. t(zaman), denklemlerde olduğu gibi kullanılabilir, bu nedenle zamana bağlı aux değişkenleri yazmak kolaydır.
İfade Bağlamı
- Durumlar (States): Yalnızca mevcut değerler (gecikme/lag notasyonu durumları açıkça referans almalıdır).
- Parametreler:
[params]içinde tanımlanan sayısal sabitler. - Yardımcı (Auxiliary) değişkenler: Dosyanın daha önceki kısımlarında tanımlanmış başka bir aux kullanabilirsiniz.
- Yerleşik matematik fonksiyonları ve skaler makrolar:
dynlib'in DSL kütüphanesindeki her şey (sin,cos,clip,approx, üreteç ifadeleri vb.). - Kullanıcı tanımlı fonksiyonlar:
[functions]içinde beyan edildikten sonra isimleriyle çağrılabilirler (özyineleme/recursion yoktur). - Zaman (
t): Tıpkı denklemlerde olduğu gibi ifadelerde her zaman mevcuttur. - Gecikme (Lag) notasyonu: Yalnızca referans verilen sembol bir durum (state) ise kullanılabilir; aux değişkenleri doğrudan gecikmeli (lagged) olamaz.
Örnek Kullanım
- Enerji, kuvvetler veya kayıt (logging) yardımcıları gibi paylaşılan ifadeleri hesaplamak için aux kullanın, böylece uzun hesaplamaları tekrarlamazsınız.
- İfadeleri yeniden yazmak yerine
cond,actionveyaloglistelerinde referans vererek aux'ları olaylarla (events) eşleştirin. - Aux, aynı alt ifade birden fazla denklemde göründüğünde Jacobian girdilerini veya üreteç ifadelerini basitleştirebilir.
Mod'lar (Mods) ile Etkileşim
Mod'lar; remove (kaldır), replace (değiştir), add (ekle) ve set (ayarla) fiillerini kullanarak yardımcı değişkenleri manipüle edebilir.
mod.remove.aux, aux'un var olmasını gerektirir ve onu modelden basitçe düşürür.mod.replace.aux, aynı ismi koruyarak tanımı değiştirmenize olanak tanır.mod.add.aux, yeni bir yardımcı değişken ekler (isim zaten varsa hata verir).mod.set.aux, ifadeyi ekler veya günceller (eksikse oluşturur, varsa günceller).
Bu fiiller mod fiil sırasına (remove → replace → add → set) saygı duyar, böylece aynı mod içinde bir aux'u kaldırabilir ve daha sonra aynı isimle yeni bir tanım ekleyebilirsiniz.
En İyi Uygulamalar
- Okunabilirliğe öncelik verin: Aux isimlerini niceliği tanımlayacak şekilde verin (
kinetic_energy,normalized_voltage), böylece karmaşıklığı gizlemek yerine yardımcı olsunlar. - Döngülerden kaçının: Aux değişkenleri arasında karşılıklı bağımlılıklar oluşturmayın; derleyici yönlü döngüsüz bir yapıyı (DAG) zorunlu kılar.
- İfadeleri odaklı tutun: Gecikmeli (lagged) değerlere veya türevsel davranışlara ihtiyaç duymaya başlarsanız, niceliği aux mantığına aşırı yüklemek yerine bir duruma (state) terfi ettirmeyi düşünün.
- Niyeti belgeleyin: Aux tanımının yanındaki kısa bir TOML yorumu, gelecekteki okuyuculara türetilen niceliğin neden var olduğunu hatırlatmak için yeterlidir.
- Dikkatli yeniden kullanım: Aux, tekrarlanan matematik için harikadır, ancak matematiği sadece karmaşıklaştıran önemsiz takma adlarla modeli aşırı doldurmayın.