Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

AST409 Astronomide Sayısal Çözümleme

Benzer bir sunumlar


... konulu sunumlar: "AST409 Astronomide Sayısal Çözümleme"— 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 xx-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 / tn 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 olarak yandaki integrali almaya çalışalım Ö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

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! Bu kez yandaki ikili integrali almaya çalışalım Ö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

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(x0), f(x1), f(x2),…, f(xn)) 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" indir ppt

Benzer bir sunumlar


Google Reklamları