MATLAB'de kalıcı değişken tanımlarken kullanabileceğiniz bir anahtar sözcük var: persistent. Yaratılan değişkenin siz fonksiyondan çıksanız bile hafızada korunmasını sağlıyor. C'deki static anahtar sözcüğü gibi düşünebilirsiniz. Örneğin bir koşan ortalama (running averager) fonksiyonu yazalım:

function ortalama = kosanOrtalama(x)
persistent n;
persistent toplam;
if x == 'sifirla' % Kalıcı değişkenleri ilklendir
    n = 0;
    toplam = 0;
    ortalama = 0;
else % Yeni veri geldi
    n = n + 1;
    toplam = toplam + x;
    ortalama = toplam / n; % Ortalamayı güncelle.
end

Üstteki fonksiyonda n ve toplam değişkenlerini kalıcı olarak yarattık. Fonksiyonu 'sifirla' parametresi ile çağırdığımızda değerleri ilklendirecek. Eğer sayı verirsek ise o sayıyı kullanarak ortalamayı güncelleyecek.

kosanOrtalama('sifirla')

ans =
     0

>> kosanOrtalama(10)

ans =
    10

>> kosanOrtalama(5)

ans =
    7.5000

Şu sıralar yazdığım kodda veri üstünde bir model için olabilirlik değeri hesaplıyorum ve bunu yeni veriler geldikçe veya döngüde ilerlerken güncelleyerek yapıyorum. Bu durumda güncellediğim değerleri fonksiyondan alıp sonra yine vermek yerine persistent ile kalıcı yaratmak işimi bir hayli hızlandırdı.

Bilgisayarla görüde popüler olan aktif görü (active vision) alanı da bu biçimde değişkenler için biçilmiş kaftan. Çünkü orada da yeni veri geldikçe güncellenen sonuçlar mevcut.

Kaynak: CITS1005 dersi

Güncelleme: Barış'ın katkılarıyla kodun daha anlaşılır ve hızlı çalışan sürümü şöyle:

function ortalama = kosanOrtalama(x)
    persistent n;
    persistent toplam;
    if isempty(n)
        n = 0;
        toplam = 0;
    end

    n = n + 1;
    toplam = toplam + x;
    ortalama = toplam / n; % Ortalamayi güncelle.
end

Sıfırlamak için de clear kosanOrtalama; yazmak gerekiyor.