Trapezoid Kuralı ile Nümerik İntegrasyon | Python ile Bilimsel Programlama
Blog istatistiklerine göre; bilimsel programlama ve hesaplamalı fizik yazıları, bu blogun en çok okunan içerikleri durumunda. Bir süredir herhangi bir yazı yayınlamadığım için geri dönüşümü de bir bilimsel programlama yazısı ile yapmak istedim.
Bu yazıda trapezoid kuralı yardımıyla, girilen bir fonksiyonun nümerik olarak integralini alan bir kod yazmaya çalışacağız. Ben bu yazı için Python dilini tercih ettim. Elbette siz, herhangi başka bir programlama dili ile de bunu yapabilirsiniz. İşin kod kısmını yazının en sonuna bırakacağım. Zira, programlamada önemli olan her zaman algoritmadır. Kod, işin uygulama kısmıdır. Eğer algoritma, iyi anlaşılırsa kodu yazmak çok daha kolay olur.
Trapezoid kuralına girmeden önce nümerik integrasyon dediğimiz şeyin ne olduğundan bahsetmek istiyorum. Ama genel anlamda nümerik ve analitik yöntemlerin ne olduğundan ve aralarındaki farklardan, başka bir yazıda bahsetmeyi planlıyorum.
Nümerik integral ya da nümerik integrasyon, bir belirli integralin nümerik değerini hesaplamak için yazılmış çeşitli algoritmalardan oluşan yöntemler bütünüdür. Nümerik integrasyon, belirli integrale şu şekilde yaklaşır:
Trapezoid kuralı ya da trapezoidal kuralı bir belirli integrali hesaplamak için kullanılan yaklaşımlardan biridir.
Trapezoid kuralı, en basit tanımıyla yamuklar kullanarak bir fonksiyonun altında kalan alanı bulmamıza yarar. Yamukların sayısı, elde ettiğimiz sonucun hassaslığı ile doğru orantılıdır. Şimdi isterseniz koda dökeceğimiz formülü elde etmeye çalışalım.
Trapezoid kuralındaki hata payı, yani fonksiyon ile yamuğun üst kenarı arasında kalan bölgenin alanı, ise
Yararlanılan Kaynaklar:
https://www.amazon.com/Numerical-Methods-Engineering-Python-3-ebook/dp/B00ADP76WC
http://tutorial.math.lamar.edu/Classes/CalcII/ApproximatingDefIntegrals.aspx
https://en.wikipedia.org/wiki/Numerical_integration
https://en.wikipedia.org/wiki/Trapezoidal_rule
Bu yazıda trapezoid kuralı yardımıyla, girilen bir fonksiyonun nümerik olarak integralini alan bir kod yazmaya çalışacağız. Ben bu yazı için Python dilini tercih ettim. Elbette siz, herhangi başka bir programlama dili ile de bunu yapabilirsiniz. İşin kod kısmını yazının en sonuna bırakacağım. Zira, programlamada önemli olan her zaman algoritmadır. Kod, işin uygulama kısmıdır. Eğer algoritma, iyi anlaşılırsa kodu yazmak çok daha kolay olur.
Trapezoid kuralına girmeden önce nümerik integrasyon dediğimiz şeyin ne olduğundan bahsetmek istiyorum. Ama genel anlamda nümerik ve analitik yöntemlerin ne olduğundan ve aralarındaki farklardan, başka bir yazıda bahsetmeyi planlıyorum.
Nümerik integral ya da nümerik integrasyon, bir belirli integralin nümerik değerini hesaplamak için yazılmış çeşitli algoritmalardan oluşan yöntemler bütünüdür. Nümerik integrasyon, belirli integrale şu şekilde yaklaşır:
\[ \int_a^b f(x)\,dx \]
\[ I= \sum_{i=0}^n A_i f(x_i). \]
Genel olarak; nümerik integrasyon için Newton-Cotes formülleri gibi yöntemler kullanılır, bizim bu yazıda odaklanacağımız metot; Newton-Cotes formüllerinin içinde bir metot olan, trapezoid kuralı.Trapezoid kuralı ya da trapezoidal kuralı bir belirli integrali hesaplamak için kullanılan yaklaşımlardan biridir.
Trapezoid kuralı, en basit tanımıyla yamuklar kullanarak bir fonksiyonun altında kalan alanı bulmamıza yarar. Yamukların sayısı, elde ettiğimiz sonucun hassaslığı ile doğru orantılıdır. Şimdi isterseniz koda dökeceğimiz formülü elde etmeye çalışalım.
İşe bir belirli integral tanımlayarak başlayabiliriz:
\[ \int_a^b f(x)\,dx. \]
Bu integralin aralığını, - ($a$, $b$) - $n$ eşit parçaya bölelim. Bunun sonucunda, görselde de göründüğü gibi uzunluğu $h$ = ($b$ - $a$)/$n$ olan yeni aralıklar elde ederiz. Aralarında $h$ kadar uzaklık bulunan apsis üzerindeki $x_0,x_1,x_2,...,x_n$ noktalarının, fonksiyon üzerinde karşılık geldiği noktalara dikkat edelim. Bu adımda ise $f(x)$'e $n$'inci dereceden, fonksiyon üzerindeki bu noktaları kesen bir polinom gibi yaklaşacağız. Bu polinomun Lagrange formu ise, $l_i (x)$ bir kardinal fonksiyon olmak üzere, şu şekilde olur:
\[ P_n (x)= \sum_{i=0}^n f(x_i) l_i (x). \]
Ve $l_1$ de
Bunun sonucunda tanımladığımız integral şu şekilde olur:
\[ I= \int_a^b P_n (x)\,dx = \sum_{i=0}^n [f(x_i) \int_a^b l_i (x)\,dx]. \]
\[ I= \sum_{i=0}^n A_i f(x_i). \]
Burada $A_i$ dediğimiz terim ise,
\[ A_i= \int_a^b l_i (x)\,dx, \] \[ i = 0, 1, ..., n. \]
Bu son yazdığımız denklemler, Newton-Cotes formülleri. Bu formüllerin klasik örneklerinden biri de ($n=1$ durumu) trapezoid kuralı.
Eğer yukarıdaki görselde olduğu gibi; $n = 1$ ise, yani $h = b - a$ ise $l_0$,
\[ l_0 = \frac{x - x_1}{x_0 - x_1} = -\frac{x - b}{h} \]
şeklinde olur. Bunun sonucunda,
\[ A_0 = \frac{1}{h} \int_a^b (x - b)\,dx = \frac{1}{2h} (b - a)^2 = \frac{h}{2}. \]
\[ l_1= \frac{x - x_0}{x_1 - x_0} = \frac{x - a}{h} \]
şeklinde olur. Bu durumda $A_1$ de
\[ A_1= \frac{1}{h} \int_a^b (x - a)\,dx = \frac{1}{2h} (b - a)^2 = \frac{h}{2} \]
olur.
Yazdığımız Newton-Cotes formülü için yer değiştirme yaparsak, görseldeki yamuğun alanı
\[ I= [f(a) + f(b)] \frac{h}{2} \]
olur. Ki bu da trapezoid kuralı olarak bilinir.Trapezoid kuralındaki hata payı, yani fonksiyon ile yamuğun üst kenarı arasında kalan bölgenin alanı, ise
\[ E= \int_a^b f(x)\,dx - I \]
kadar olur.
Eğer elde ettiğimiz denklemi bir Python koduna uygulayarak aşağıdaki gibi bir fonksiyon elde edebiliriz. Eğer kodda anlaşılmayan bir bölüm varsa, aşağıdaki yorum bölümünden bana iletebilirsiniz.
Bu yazıda elimden geldiğince trapezoid kuralından ve nümerik integrasyondan bahsetmeye çalıştım. Umarım faydalı olmuştur. Diğer yazılarda görüşmek dileğiyle...
Bu yazıda anlaşılması zor, yanlış ya da eksik bir bilgi olduğunu düşünüyorsanız; lütfen aşağıdaki yorum bölümünden düşüncenizi belirtin.
Yararlanılan Kaynaklar:
https://www.amazon.com/Numerical-Methods-Engineering-Python-3-ebook/dp/B00ADP76WC
http://tutorial.math.lamar.edu/Classes/CalcII/ApproximatingDefIntegrals.aspx
https://en.wikipedia.org/wiki/Numerical_integration
https://en.wikipedia.org/wiki/Trapezoidal_rule




Yorumlar
Yorum Gönder