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.
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:
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:
- 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:
- Burada diferansiyel denklem bir dizi 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ğı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:
t = 0 iken sistemin başlangıç koşulları ise aşağıdaki gibi olsun:
Şimdi Python’a tekrar dönelim ve denklemleri oluşturmaya başlayalım:
- 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:
- Son olarak konum grafiğini de aynı şekilde hesaplayalım:
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:
Belirlenen aralık ve zaman için fonksiyonların ürettiği değerleri Python üzerinde hesaplayalım:
Şimdi de analitik değerler ile euler yöntemiyle hesapladığımız değerler arasındaki farkı hesaplayalım:
Elde ettiğimiz hata grafiği şu şekildedir:
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:
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.