Euler Yöntemi ile Diferansiyel Denklem Çözümü (Python)

Leonhard Euler (1707–1783) —kaynak

Euler yöntemi, diferansiyel denklemlerin sayısal çözümünde kullanılan yöntemlerden birisidir. Taylor serisinin birinci mertebeden ifadelerini içermektedir.

Yukarıdaki formülde:

  • n indisli ifadeler, mevcut iterasyon için hesaplanan değerleri,
  • n-1 indisli ifadeler ise bir önceki iterasyonda hesaplanan değerleri ifade etmektedir.
  • x’in n ve n-1 indisli ifadelerinin farkı ise adım aralığını belirtmektedir ve genellikle h sembolüyle ifade edilir. Adım aralığı sabit veya değişken olabilir. Sayısal yöntemler, denklemlerin kağıt üzerinde (analitik) çözümüyle aynı sonuçları vermeyebilir. Bu yüzden adım aralığının azaltılması, hesaplama maliyetini arttırdığı gibi, analitik çözüme yakınsama miktarını da arttıracaktır. Fakat h değerinin sürekli azaltılması da, hatanın her zaman azalacağı anlamına gelmez.
  • Denklemde h değerini yerine yazarsak:

formülünü elde ederiz.

  • Farkettiyseniz, n indisli değerleri çözmeden önce n-1 indisli değerleri çözmek gerekmektedir. Onlardan önce de n-2 indisli değerleri, onlardan önce de n-3 indisli değerleri ve geri kalan diğerlerini. n-1 indisli değerleri; sistemin ortaya çıktığı andaki ilk değerleri olarak düşünürsek, bu değerleri tanımlayarak denklemi çözebiliriz. İşte bu ilk değerlere başlangıç koşulu (ing. initial condition) denmektedir. Başlangıç koşullarının tanımlanmasıyla denklemimiz çözülebilir hale gelir.

Euler yöntemini Python üzerinde kodlamayı deneyelim:

  • y listesi, dif. denkleminin çözümünü tutarken; dy listesi ise dif. denklemin kendisini tutmaktadır.
  • yi değeri başlangıç koşulu, h değeri ise adım aralığıdır.

Alternatif bir tanım ise şu şekilde olabilir:

  • Burada diferansiyel denklem bir liste olarak değil, fonksiyon olarak verilmektedir.

Dilerseniz, basit bir örnek ile oluşturduğumuz fonksiyonu test edelim:

Şekildeki gibi M kütleli bir cisim, yerçekiminin etkisinde aşağı düşmekte olsun. Soruyu basitleştirmek için sürtünmeden kaynaklanan etkiyi ihmal edelim.

x ifadesini zamana bağlı bir yer değiştirme fonksiyonu olarak düşünürsek:

  • x’in birinci türevi zamana bağlı hız fonksiyonunu,
  • x’in ikinci türevi (hızın birinci türevi) zamana bağlı ivme fonksiyonunu verecektir.

Sisteme etki eden tek kuvvet yerçekimi kuvveti olduğu için, aynı zamanda sistem g yerçekimi ivmesinin etkisindedir diyebiliriz.

Bu bilgilere göre, sistemi ifade eden diferansiyel denklemleri şu şekilde oluşturabiliriz:

konum fonksiyonu
hız fonksiyonu
ivme fonksiyonu

t = 0 iken sistemin başlangıç koşulları aşağıdaki gibi olsun:

ilk konum
ilk hız
ilk ivme

Şimdi Python’a tekrar dönelim ve denklemleri oluşturmaya başlayalım:

ivme fonksiyonunun oluşturulması.
ivme grafiği.
  • 3 saniye için 0.1'er saniye aralıklarla ivme grafiğini şekildeki gibi oluşturduk.
  • Hız fonksiyonunu oluşturmak içinse yukarıda tanımladığımız euler fonksiyonunu kullanalım:
hız grafiği.
  • Son olarak konum grafiğini de aynı şekilde hesaplayalım:
konum grafiği.

Sağlama

Bahsettiğimiz gibi sayısal çözümler, analitik çözümler kadar kesin sonuçlar üretmezler. Belirli bir hata ile hesaplama yaparlar. Örneğimiz için hatanın boyutuna göz atalım.

Sistemin analitik çözümü şu şekildedir:

konum fonksiyonu.
hız fonksiyonu.
ivme fonksiyonu.

Belirlenen aralık ve zaman için fonksiyonların ürettiği değerleri Python üzerinde hesaplayalım:

Analatik çözümle Euler çözümünü kıyasladığımızda, elde ettiğimiz grafik şu şekildedir:

h=0.1 için.

Grafikten anlaşıldığı gibi; hızın hesaplanması neredeyse hatasızken, konum değerlerinde zamanla ayırt edilebilir bir hata göze çarpmaktadır.

Bu noktadaki hata seviyesi, eğer kabul edilebilir limitteyse görmezden gelinebilir. Fakat daha hassas hesaplamalar için adım aralığını küçültmek gerecektir. Bu da, hatayı azaltabilmek için makul gözükse de; iterasyon sayısını, dolayısıyla hesaplama maliyetini arttıracaktır. Aradaki uygun dengeyi sağlayabilmek, operatörün tasarrufunda olmalıdır.

Uygulamanın kodlarına buradan ulaşabilirsiniz.