Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

AST409 Astronomide Sayısal Çözümleme VII. Python ve İntegrasyon.

Benzer bir sunumlar


... konulu sunumlar: "AST409 Astronomide Sayısal Çözümleme VII. Python ve İntegrasyon."— Sunum transkripti:

1 AST409 Astronomide Sayısal Çözümleme VII. Python ve İntegrasyon

2 scipy.integrate paketi quad fonksiyonu  quad fonksiyonu, scipy integrate paketinin belirli integral almak için en sık kullanılan fonksiyonudur. Fonksiyon “adaptive quadrature*” adı verilen bir algoritma ile integral hesabı yapar. Scipy.integrate paketine Fortran QUADPACK fonksiyonundan** uyarlanarak entegre edilmiştir. Örnek 1: from scipy import integrate as integral def integrant(x, a, b): return a * x + b a = 2 b = 1 altlim = 0 ustlim = 1 I = integral.quad(integrant, altlim, ustlim, args=(a,b)) print "%dx + %d fonksiyonunun x=%d ile x=%d arasindaki integrali %.16f 'e, bu degerin hatasi %.16f 'e esittir" % (a, b, altlim, ustlim, I[0], I[1]) Kodun ekran çıktısı: 2x + 1 fonksiyonunun x=0 ile x=1 arasindaki integrali 'e, bu degerin hatasi 'e esittir * **

3 scipy.integrate paketi quad fonksiyonu  Fonksiyonun ilk argümanı integrant (integrali alınacak fonksiyon) fonksiyonudur. Bu fonksiyonu dilediğiniz şekilde tanımlayabilirsiniz. Burada bir lambda fonksiyonu olarak tanımlayacağımız bir örnek görelim. Örnek 2: x2 = lambda x: x**2 altlim = 0 ustlim = 4 I = integral.quad(x2, altlim, ustlim) print "x^2 fonksiyonunun x=%d ile x=%d arasindaki integrali %.16f 'e, bu degerin hatasi %.16f 'e esittir" % (altlim, ustlim, I[0], I[1]) Kodun ekran çıktısı: x^2 fonksiyonunun x=0 ile x=4 arasindaki integrali 'e, bu degerin hatasi 'e esittir

4 scipy.integrate paketi quad fonksiyonu  Nümerik integrasyonun bir başka amacı da analitik yollarla alamadığımız integralleri alabilmektir. Örnek olarak, bu türden bir fonksiyon olan x x-1 fonksiyonunun x = 1 ile x =3 noktaları arasındaki integralini almaya çalışalım. Örnek 3: fonk = lambda x: x**(x-1) altlim = 1 ustlim = 3 I = integral.quad(fonk,altlim,ustlim) print "x^(x-1) fonksiyonunun x=%d ile x=%d arasindaki integrali %.16f 'e, bu degerin hatasi %.16f 'e esittir" % (altlim, ustlim, I[0], I[1]) Kodun ekran çıktısı: x^(x-1) fonksiyonunun x=1 ile x=3 arasindaki integrali 'e, bu degerin hatasi 'e esittir

5 scipy.integrate paketi quad fonksiyonu (sınırı sonsuzda olan integraller)  Limitlerden en az biri sonsuz olduğu zaman bu limit için numpy.inf fonksiyonunu kullanarak integral alabliiriz. Örnek olarak e -xt / t n fonksiyonun 1 ile sonsuz arasındaki integralini bulalım Örnek 4: def integrant(x,t,n): return np.exp(-x*t) / t**n t = 2 n = 1 I = integral.quad(integrant, 1, np.inf, args=(t,n)) print "(e^-2x)/2 fonksiyonunun x=%d ile x=%s arasindaki integrali %.16f 'e, bu degerin hatasi %.16f 'e esittir" % (1, "sonsuz", I[0], I[1]) Kodun ekran çıktısı: (e^-2x)/2 fonksiyonunun x=1 ile x=sonsuz arasindaki integrali 'e, bu degerin hatasi 'e esittir

6 scipy.integrate paketi quad fonksiyonu (çok katlı integraller)  Çoklu (ikili, üçlü, n’li) integralleri de scipy.integrate paketi fonksiyonları ile alabilmek mümkündür. İkili integraller için dblquad, üçlü integraller için tplquad, n’li integraller için nquad fonksiyonları kullanılır. Örnek 5: def I(n): return integral.dblquad(lambda t, x: np.exp(-x*t)/t**n, 0, np.inf, lambda x: 1, lambda x: np.inf) print "Verilen ikili integralin degeri %.16f 'e, bu degerin hatasi %.16f 'e esittir" % (I(4)[0], I(4)[1]) Kodun ekran çıktısı: Verilen ikili integralin degeri 'e, bu degerin hatasi 'e esittir Örnek olarak yandaki integrali almaya çalışalım

7 scipy.integrate paketi quad fonksiyonu (değişken sınırlı integraller)  Bu tür integralleri scipy.integrate paketi çoklu integrasyon fonksiyonlarını kullanarak alırken içerdeki integrallerin limitlerinin sabit olması da şart değildir! Örnek 6: I = integral.dblquad(lambda x, y: x*y, 0, 0.5, lambda x: 0, lambda x: 1-2*x) print "Verilen ikili integralin degeri %.16f 'e, bu degerin hatasi %.16f 'e esittir" % (I[0], I[1]) Kodun ekran çıktısı: Verilen ikili integralin degeri 'e, bu degerin hatasi 'e esittir Bu kez yandaki ikili integrali almaya çalışalım

8 Bölünmüş Yamuklar Yöntemiyle İntegrasyon  scipy.integrate paketi bölünmüş yamuk yöntemi ile integrasyon için de bir fonksiyon sağlar: trapz. Bu fonksiyon dizi değişkenlerle çalışır. Fonksiyonun argümanı belirli h (dx) aralıkları ile verilen fonskiyon değerleri (f(x 0 ), f(x 1 ), f(x 2 ),…, f(x n )) ve her bir yamuğun yüksekliği olan aralık uzunluğudur (h = dx). Örnek 7: # cos x fonksiyonunun h = pi/16. yamuk yuksekligi icin x=-pi/2 ile x=pi/2 # arasindaki integralini alalim # yamuk yuksekligini degistirerek aradaki hassasiyet farkini gormeye calisiniz h = np.pi/16. altlim = -1*np.pi/2. ustlim = np.pi/2. x = np.arange(altlim, ustlim + h, h) y = np.cos(x) I = integral.trapz(y, dx = h) I_quad = integral.quad(lambda x: np.cos(x), altlim, ustlim) quada_gore_hata = abs(I - I_quad[0]) / I_quad[0] print "Yamuk yontemiyle hesaplanan deger %.16f, quad fonksiyonuna gore hatasi"\ "%.16f" % (I, quada_gore_hata) # Soz konusu integralin gercek degeri 2'dir (analitik olarak almayi deneyiniz!) gercek_integral = 2 print "Gercege gore bagil hatasi %.16f" %\ (abs((gercek_integral-I)/gercek_integral)) Kodun ekran çıktısı: Yamuk yontemiyle hesaplanan deger , hatasi Gercege gore bagil hatasi

9 Simpson Yöntemiyle İntegrasyon  scipy.integrate paketi Simpson (1/3) yöntemi ile integrasyon için de bir fonksiyon sağlar: simps. simps fonksiyonu da tıpkı trapz gibi dizi değişkenlerle çalışır. Örnek 8: # cos x fonksiyonunun x = -pi/2 ile x = +pi/2 arasindaki integralini bu kez # Simpson yontemiyle hesaplayalim h = np.pi/16. altlim = -1*np.pi/2. ustlim = np.pi/2. x = np.arange(altlim, ustlim + h, h) y = np.cos(x) I = integral.simps(y,x) I_quad = integral.quad(lambda x: np.cos(x), altlim, ustlim) quada_gore_hata = abs(I - I_quad[0]) / I_quad[0] print "Simpson yontemiyle hesaplanan deger %.16f, quada gore hatasi %.16f" % \ (I, quada_gore_hata) ### Soz konusu integralin gercek degeri 2'dir (analitik olarak almayi deneyiniz!) gercek_integral = 2 print "Gercege gore bagil hatasi %.16f" %\ (abs((gercek_integral-I)/gercek_integral)) Kodun ekran çıktısı: Simpson yontemiyle hesaplanan deger , quada gore hatasi Gercege gore bagil hatasi

10 SymPy integrate fonksiyonu ile sembolik integraller  Daha önce de gördüğümüz gibi SymPy integrate fonksiyonu da sembolik integral almak için kullanılabilir. Aşağıdaki yeni örneklerle bu fonksiyonu bir kez daha hatırlayalım Örnek 9: x = sym.Symbol("x") print "1/x fonksiyonunun integrali %s" % sym.integrate(1/x, x) ### belirli integralleri almak icin de kullanabiliriz print "e^-x**2 / pi fonksiyonunun x=1 ile x=2 arasindaki integrali %s" %\ sym.integrate(sym.exp(x) / sym.pi, (x, -1, 1)) ### bir diger ornek ### kodun ekran ciktisina dikkat! "nan" degeri bu integralin bu sinirlar ### dahilinde alinamadigi anlamina geliyor, nedenini dusununuz! print "1 + tan(x)**2'in x=-pi/2 ile x=pi/2 arasindaki integrali %s" %\ sym.integrate(sym.tan(x)**2 + 1., (x, -1*sym.pi/2, sym.pi/2)) Kodun ekran çıktısı: 1/x fonksiyonunun integrali log(x) e^-x**2 / pi fonksiyonunun x=1 ile x=2 arasindaki integrali -exp(-1)/pi + E/pi 1 + tan(x)**2'in x=-pi/2 ile x=pi/2 arasindaki integrali nan


"AST409 Astronomide Sayısal Çözümleme VII. Python ve İntegrasyon." indir ppt

Benzer bir sunumlar


Google Reklamları