BattOS

Bir keresinde C++ ile integral hesabı yapmam gerekmişti, başta çok kolay olacağını düşünmüştüm. O zamanlar daha üniversiteye başlamamıştım. Lisede integral hesaplamak için bir yöntem öğreniriz. xadx=x(a+1)a+1+c Bu yöntemi kağıt üzerinde kullanabilsem de bilgisayarda yapamadım. Daha sonra araştırmalarım Simpson Kuralı diye bir şey gördüm ve çok üstüne araştırmadan sadece gördüğüm formülü kodlayıp geçmiştim. Şimdi Matematik ve Bilgisayar Bilimleri okuyorum ve bazı şeyler hakkında daha fazla bilgim, fikrim var. Gördüm ki Nümerik Analiz çok ilgi çekici bir konuymuş. Bu konu hakkında bildiklerim ile bir şeyler yazmaya çalıştım. Konu hakkında uzman değilim eğer yanlış gördüğünüz bir yer varsa bana eposta göndermekten çekinmeyin lütfen.

Nümerik Analiz

Nümerik (Sayısal) Analiz ve Amacı Nedir?

Nümerik analizin amacı çözümünü analitik yöntemlerle yapamadığımız herhangi bir matematik problemini çözmek için yöntemler/algoritmalar bulmak ve yaklaşık sonuç bulmaktır. Genelde mühendisler tarafından sürekli kullanılır. Daha fazla bilgi için vikipedi:Sayısal Analiz sayfasına bakabilirsiniz.

Sayısal İntegral Hesabı

Nümerik analizin farklı hesaplamalar için farklı alt türleri var. Bu yazıda göz atacağımız tür iste Sayısal İntegral. Bu noktada kullanabileceğimiz birçok yöntem var; Yamuklar Yöntemi, Simpson Yöntemi, Ramberg Algoritması, Gaussion Kuadroture Yöntemi… Bu yazıda ben Simpson Yöntemine değineceğim.

Simpson Yöntemi

İsmini Thomas Simpson’dan alır. Basitçe fonksiyona benzer bir veya birden fazla polinomun alanını bularak yaklaşık integral bulmayı hedefler. Örneğin abf(x)dx için a ve b den geçen, tepe noktası m=(a+b)/2 olan bir P(x) polinomu bulup abP(x)dx alırsak yaklaşık olarak bir sonuç bulabiliriz.

Örnek Görsel (Kaynak:wiki:Simpson's rule)

Bu eğri uydurma işlemine interpolasyon denir. Polinomlar için Lagrange İnterpolasyon Polinomu kullanılabilir.

Lagrange İnterpolasyonu

(x0,f0),(x1,f1),(x2,f2) gibi üç noktadan f(x)=a0+a1x+a2x2 polinomunun geçtiğini düşünelim. L0=(xx1)(xx2)(x0x1)(x0x2),L1=(xx0)(xx2)(x1x0)(x1x2),L2=(xx0)(xx1)(x2x0)(x2x1) olmak üzere f(x)=L0f0+L1f1+L2f2 dir. Daha genel bir tanım ve interpolasyonlar hakkında daha detaylı bilgiler için kaynaklara göz atabilirsiniz.

Simpson’s 1/3 rule

Simpson yönteminde n farklı parçaya ayırabilirsiniz, benim kullanacağım yöntem 2’ye ayırmak ve bir 2. dereceden polinom oluşturmak olacak. Bunun özel adı Simpson’un 1/3 kuralı veya Simpson’un 1. kuralıdır.

Lagrange interpolasyonu ile bir polinom oluşturalım. Yukarıdaki görseli hatırlayın. a,b ve m.

P(x)dx=f(a)(xm)(xb)(am)(ab)+f(m)(xa)(xb)(ma)(mb)+f(b)(xa)(xm)(ba)(bm) olur. İki tarafında integralini alıp düzenlersek şu ifadenin doğruluğunu gösterebiliriz: abP(x)dx=ba6[f(a)+4f(a+b2)+f(b)] Artık elimizde bir formül olduğuna göre bunu kodlayabiliriz.

# main.py
def simpson(f, x_0, x_2):
    h = (x_2 - x_0)/2
    x_1 = (x_2 + x_0)/2
    area = (h/3)*(f(x_0) + 4*f(x_1) + f(x_2))
    return area

Şimdi python da bu fonksiyon aracılığıyla integral hesaplayabiliriz. Örnek olarak 02x2dx i çözelim.

>>> from main import simpson
>>> def f(x):
...     return x*x
... 
>>> simpson(f, 0, 2)
2.6666666666666665

Gerçekten de sonuç olarak 83 yani 2.6666 verdiğini görebiliriz.

Merak edenler için formülü elde etmenin başka bir yöntemi daha var. Taylor Teoremi kullanabiliriz.

Görüntülemek için tıklayın ##### Simpson Yöntemi Merak edenler için formülü elde etmenin başka bir yöntemini daha yazmak istiyorum. Bu sefer *Taylor Teoremi* kullanacağım. fcn+1[a,b] olsun. Yani f fonksiyonu [a,b] aralığı üzerinde 1.,2.,...,(n+1). mertebeden sürekli türeve sahip olsun. Ayrıca x0[a,b] olsun. Bu durumda x[a,b] için f(x)=f(x0)+f(x0)(xx0)+f(x0)2!(xx0)2+...+fn(x0)n!(xx0)n+fn+1(x0)(n+1)!c(x)(xx0)n+1 Şimdi tekrardan abf(x)dx integralini düşünelim. f fonksiyonunun dördüncü mertebeden sürekli türeve sahip olduğunu var sayalım. [a,b] aralığını eşit uzunluklu iki alt aralığa bölelim. Bu durumda x0=a,x1=x0+h,x2=b olur. f fonksiyonunu x1 civarında Taylor Serisine açarsak: x0x2f(x)dx=x0x2f(x1)dx+x0x2f(x1)(xx1)dx+x0x2f(x1)(xx1)22dx+x0x2f(x1)(xx1)33!dx+x0x2f4(c)(xx1)44!dx x0x2f(x)dx=f(x1)x|x0x2+f(x1)2(xx1)2|x0x2+f(x1)6(xx1)3|x0x2+f(x1)24(xx1)4|x0x2+f(4)(c)120(xx1)5|x0x2 =f(x1)2h+0+f(x1)(h3)3+0+f(4)h560 f(x1)2h+h33(f(x0)2f(x1)+f(x2)h2f(4)(c(x))h212)+f(4)h560 h3(f(x0)4f(x1)+f(x2))h590f(4)(c) Hata terimini ihmal edersek x0x2f(x)dx=h3(f(x0)+4f(x1)+f(x2)) Yine aynı formülü elde edebiliriz. İnterpolasyon ile yaptığımı mantıksal olarak kavramak daha kolay ama matematik olarak formülü elde etmek daha zor, Taylor Teoreminde ise formülü elde etmek daha kolay ama mantık olarak kavramak zor geldi bana. Sonuç olarak ikisini de yazmak istedim.

Kaynakça

Vikipedi:Sayısal Analiz
Wikipedia:Simpson’s rule
Wikipedia:Lagrange polynomial
numerikanaliz.com:Nümerik Analiz Nedir?
itu.edu.tr:Eğri uydurma ve İnterpolasyon
KBUZEM:Sayısal Analiz 11. Hafta İnterpolasyon
KBUZEM:Sayısal Analiz 14. Hafta Sayısal Türev ve İntegral


Kerem Ü.
kerem.ullen@proton.me