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

Image for post
Image for post
Leonhard Euler (1707–1783). foto

Euler yöntemi, diferansiyel denklemlerin sayısal çözümünde kullanılan yöntemlerden birisidir. Taylor serisinin birinci mertebeden ifadelerini içerir ve her adımda yenilenerek devam eder.

Image for post
Image for post

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 olarak ifade edilir. Adım aralığı sabit veya değişken olabilir. Sayısal yöntemler, denklemleri kağıt üzerinde (analitik şekilde) çözdüğümüz gibi doğru 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, hata değerinin her zaman azalacağı anlamına gelmez.
  • Denklemde h değerini yerine yazarsak:
Image for post
Image for post

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 denmektedir. Başlangıç koşullarının tanımlanmasıyla denklemimiz çözülebilir hale gelir.

Euler yöntemini Python üzerinde kodlamayı deneyelim:

Image for post
Image for post
  • 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 şekildedir:

Image for post
Image for post
  • Burada diferansiyel denklem bir dizi olarak değil, fonksiyon olarak verilmektedir.

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

Image for post
Image for post

Şekildeki gibi m kütleli bir cisim, yerçekiminin etkisinde aşağıya 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:

Image for post
Image for post
konum fonksiyonu
Image for post
Image for post
hız fonksiyonu
Image for post
Image for post
ivme fonksiyonu

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

Image for post
Image for post
ilk konum.
Image for post
Image for post
ilk hız.
Image for post
Image for post
ilk ivme.

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

Image for post
Image for post
ivme fonksiyonunun oluşturulması.
Image for post
Image for post
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 fonksiyonunun oluşturulması.
Image for post
Image for post
hız grafiği.
  • Son olarak konum grafiğini de aynı şekilde hesaplayalım:
Image for post
Image for post
konum fonksiyonunun hesaplanması.
Image for post
Image for post
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:

Image for post
Image for post
konum fonksiyonu.
Image for post
Image for post
hız fonksiyonu.
Image for post
Image for post
ivme fonksiyonu.

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

Image for post
Image for post
analitik değerlerin hesaplanması.

Şimdi de analitik değerler ile euler yöntemiyle hesapladığımız değerler arasındaki farkı hesaplayalım:

Image for post
Image for post
hatanın hesaplanması.

Elde ettiğimiz hata grafiği şu şekildedir:

Image for post
Image for post
h = 0.1 için.

Grafikten anlaşıldığı gibi; hız değerlerinde sabit bir hata oluşurken, konum değerlerinde oluşan hata iterasyon boyunca artmaktadır.

Adım aralığını azaltmayı deneyelim:

Image for post
Image for post
h = 0.01 için.

Adım aralığını 10 kat küçülttüğümüzde, hata miktarının görece daha az olduğu görülmektedir. Konum değerlerindeki hata yine artmaya devam ediyor. Ek olarak, adım aralığını azalttığımızda iterasyon sayısının da bunun nispetinde arttığını söylebiliriz.

Uygulamanın kodlarına buradan ulaşabilirsiniz.

Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store