HBM512 Bilimsel Hesaplama II Ödev 4 Hazırlayan: Hamdi Nadir Tural 702061013 Hesaplamalı Bilim ve Mühendislik π ∫ sin xdx 1. 0 Kompozit Trapez yöntemi kullanılarak yukarıdaki integralin 10 −12 mertebesinde bir hata ile hesaplanması için gerekli panel sayısının bulunması istenmektedir. Bu yüzden önce kompozit trapez metodunun çıkarılmasını ve hatanın tanımını inceleyelim. Trapez Yöntemi: Bu yöntem temel olarak bir fonksiyonun birinci mertebe bir çokterimli ile ifade edilmesi ve bu çokterimlinin integrasyon başlangıç ve bitiş noktalarından geçen bir lineer yaklaşımla oluşturulmasından ibarettir. Bu integral ise oluşan yamuğun altında kalan alanı ifade etmektedir. Ancak bu yaklaşım, eğimin ani değişmeler gösterdiği fonksiyonların (eksponansiyel, logaritmik veya 3.,4.,5. vb. mertebe fonksiyonlar) integrasyonunda çok büyük bir hata ile hesap yapabilmektedir. Bu sorunu çözmek için Kompozit Trapez Metodu geliştirilmiştir. Integral hesabını ve hatayı ifade edelim, x1 b ∫ f ( x )dx = a ∫ P1 (x)dx + R1 * x0 f ( x ) ≈ P1 ( x ) varsayarak ileri farklar çokterimlisini kullanalım, P1 ( x ) = f 0 + (x − x 0 ) ∆f 0 = f 0 + α ∆f 0 h b x1 x1 a x0 x0 ∫ f (x)dx = α = ∫ P1 (x)dx = ∫ (f0 + α∆f0 )dx x − x0 1 → dα = dx → dx = hdα h h 1 x1 1 α2 1 h (f 0 + α∆f 0 )dx = h (f 0 + α∆f 0 )dα = hf 0α + ∆f 0 = h(f 0 + ∆f 0 ) = (f 0 + f1 ) 2 2 2 0 x0 0 ∫ ∫ b h ∫ f (x)dx ≅ 2 (f0 + f1 ) a Hata ifadesi için, R1* x1 = ∫ x1 R1 ( x )dx = x0 R1* h3 = 2 R1* = − ∫ x0 1 ∫ (α 0 h2 α (α − 1)f ′′(ξ )dx 2 ( dx = hdα kullanılırsa) 1 2 α3 α2 h3 − α )f ′′(ξ )dα = − f ′′(ξ )( ) 2 2 3 0 h3 f ′′(ξ ) 12 2 Kompozit Trapez: Trapez yönteminin geliştirilmiş halidir. Genel mantık aynı olmakla beraber, integrasyon aralığı daha küçük aralıklara bölünürerek hatayı minimize etmeye çalışılmıştır. Integral hesabını ve hatayı ifade edelim, b ∫ f (x)dx ≅ a h (f 0 + f1 ) trapez kuralı için bulunan bu ifade n adet panel için 2 genelleştirilerek, b ∫ f (x)dx ≅ a b n −1 h ∑ 2 (f i + f i +1 ) = i =0 f0 ∫ f (x)dx ≅ h( 2 h (f 0 + 2f1 + 2f 2 + ... + 2f n − 1 + f n ) 2 + 2f1 + 2f 2 + ... + 2f n − 1 + a fn ) 2 Hata ifadesi ise, Bir adet panel için R1* = − R1* = − h3 f ′′(ξ ) idi. Bütün panellerde yapılan hatalar toplanarak, 12 h3 [f ′′(ξ1 ) + f ′′(ξ 2 ) + ... + f ′′(ξ n )] 12 ( x 0 < ξ 1 < x1 , x1 < ξ 2 < x 2 ,…, x n − 1 < ξ n < x n ) Burada, f ′′(ξ ) [a, b] aralığında sürekli olduğu zaman, öyle bir f ′′(ξ ) değeri vardır ki f ′′(ξ i ) lerin değerine eşittir. Bu tanım kullanılarak, R1* = − h3 nf ′′(ξ ) olur. n.h = (b − a) denklemde yerine konularak, 12 R1* = − (b − a) 2 h f ′′(ξ ) bulunur. 12 f(x) f(x) a b x a b x Şekil1. Trapez ve Kompozit Trapez metotları kullanılarak bir fonksiyonun integralinin alınması (sol grafik: Trapez Metodu, sağ grafik: Kompozit Trapez) 3 Problemin Çözümü: Kompozit Trapez yöntemi için çıkardığımız hata ifadesi kullanılarak, R1* = − (b − a) 2 h f ′′(ξ ) < 10 − 12 12 f ( x ) = sin( x ) → f ′( x ) = cos(x ) → f ′′(x ) = − sin( x ) Burada, [a, b] aralığında f ′′(ξ i ) lerin eşit olduğu bir f ′′(ξ ) değeri aramaktayız. Bu değerin aralığımızın içindeki maksimum değer olduğunu varsayarsak, f ′′(x ) ’in mutlak olarak π [0, π ] aralığındaki en büyük değeri olan f ′′(ξ ) = sin( ) = 1 alınabilir. Panel sayısını hesap 2 edeceğimiz için formülde n:Panel Sayısı belirgin hale getirilmelidir. Bu açıdan h = b−a n de kullanılarak denklem düzenlenirse, 2 − (b − a)3 (b − a) b − a (b − a) 2 f ′′(ξ ).1012 < n 2 h f ′′(ξ ) < 10 − 12 → − f ′′(ξ ) < 10 − 12 → − 12 12 n 12 Hatanın mutlak değerini alalım ve değerleri yerine koyalım ( a = 0, b = π , f (ξ ) = 1 ), n2 > (π − 0)3 π3 1.1012 → n 2 > 1012 → n 2 > 2.5838 x1012 12 12 n > 1607420.3 Yani, yaklaşık olarak 1607500 (bir milyon altı yüz yedi bin beş yüz) adet panel alındığında, 10 −12 mertebesindeki hatadan daha küçük bir hata ile hesap yapmış oluruz. 4 2π 2. ∫ cos(2x).e −x dx integralini Simpson ve Trapez (terim karmaşası yok ise Kompozit 0 Trapez olarak anlıyorum) yöntemleri kullanılarak hesap edilecektir. Kompozit trapez yöntemi yukarıda izah edilmiştir. Simpson yöntemini inceleyelim; Simpson yönteminde, f ( x ) fonksiyonunun n. dereceden bir Pn ( x ) çokterimlisi şeklinde ifade edilmesi ve bu çokterimlinin integrasyonu şeklinde yazabiliriz. Bu durumda ileri farklar çokterimlisi cinsinden, f ( x ) ≅ Pn ( x ) = f 0 + ∆f 0 ∆n f 0 ( x − x 0 ) + ... + ( x − x 0 )...(x − x n − 1 ) h n!.h n α dönüşümü ile, f ( x ) ≅ Pn ( x ) = f 0 + ∆f 0α + ... + ∆n f 0 α (α − 1)...(α − n + 1) n! Burada n alınan panel sayısına belirtmek şartıyla, örneğin n=1 panel için Simpson yönteminin uygulamasını yapalım, f ( x ) ≅ P1 ( x ) = f 0 + x1 b ∫ f ( x )dx ≅ a α = b (x − x 0 ) ∆f 0 = f 0 + α∆f 0 h ∫ x0 x1 P1 ( x )dx = ∫ (f0 + α∆f0 )dx x0 x − x0 1 → dα = dx → dx = hdα dönüşümü uygulanırsa, h h x1 1 1 1 α2 h f ( x )dx ≅ (f 0 + α∆f 0 )dx = h (f 0 + α∆f 0 )dα = hf 0α + ∆f 0 = h(f 0 + ∆f 0 ) = (f 0 + f1 ) 2 2 2 0 a x0 0 ∫ ∫ ∫ Görüleceği üzere n=1 için integrasyon trapez yöntemi ile aynı değeri almaktadır. Bu yöntem başka n değerleri için de yazılabilir. Ancak burada sadece denklemin nasıl çıkarıldığı gösterilecek, diğer değerler için oluşturulan algoritma ile hesap yapılacaktır. Problemin çözümü için Matlab’te bir kod yazılmıştır. Bu kod hem Kompozit trapez yöntemini hem de Simpson yöntemini kullanarak verilen integrali hesaplamaktadır. 5 Program Çıktıları: Analitik olarak integrasyon yapılırsa; 2π ∫ cos(2x).e 0 (*integrasyon −x 2π 1 2 dx = − e − x cos(2 x ) + e − x sin(2 x ) 5 5 0 ∫ udv = u.v − ∫ vdu It Et 3.1475 2.94783289 1.7095 1.50986372 0.90432 0.704689429 0.5141 0.314471207 0.37388 0.174256634 0.31088 0.111257421 0.27723 0.0776016656 0.25705 0.0574223476 = 0.19962651 yapılarak çözülmüştür.) Is 3.1475 1.2302 0.62392 0.041331 0.064928 0.093421 0.14201 0.22072 Es 2.94783289 1.03054066 0.424296496 -0.158295205 -0.134698593 -0.106205220 -0.0576206478 0.0210949074 Grafikler: n=1 için; 6 n=2 için; n=3 için; 7 n=4 için; n=5 için; 8 n=6 için; n=7 için; 9 n=8 için; Yorumlar: • Grafiklerden ve hata tablosundan da anlaşılacağı üzere, h adım aralığı küçüldükçe, yapılan integrasyon hatası da mutlak değer olarak azalmaktadır. • Burada göze çarpan en önemli özellik, integre edilen fonksiyondaki dalgalanmaların [0, π ] aralığında yüksek olması nedeni ile trapez yönteminin panel sayısı artırılmasına rağmen iyi bir yaklaşım yapamamasıdır. 10 1 3. Gauss-Legendre Dördülü (Quadrature) kullanılarak ∫x 5 dx integrali hesap edilecektir. 0 Bu yöntemin hesap yapısı aşağıda belirtilmektedir. Önce integral sınırları [a, b] olan fonksiyon [−1,1] sınırları kullanılacak şekilde • ötelenir. Sonra ötelenen fonksiyon için alınacak nokta sayısına (veya panel) göre ağırlık • fonksiyonları belirlenir. • Bu noktalar ötelenmiş fonksiyonda yerine konularak değerler oluşturulur. • Oluşturulan değerler, kendilerine karşılık gelen ağırlık katsayıları ile çarpılarak toplanır. b ∫ f ( x )dx = a b−a 2 1 ∫ f (t )dt ≅ −1 b−a 2 n ∑ Wi .F (t i ) i =0 Fonksiyonun değişken dönüşümü, x = b+a b−a + t 2 2 dx = b−a dt 2 b + a b − a f ( x ) = x 5 → F (t ) = + t 2 2 5 İntegrasyon yeniden yazılırsa, b b−a ∫ f (x)dx = 2 a 1 b−a ∫ F (t )dt ≅ 2 −1 n b + a b − a ∑ Wi . 2 + 2 t i i =0 5 Değerleri yerine koyalım, ( a = 0, b = 1 ), b ∫ f (x)dx ≅ a 1 2 n 1 1 ∑ Wi . 2 + 2 t i i =0 5 Nokta sayısına bağlı olarak ağırlık çarpanları; iki nokta (n=1) üç nokta (n=2) dört nokta (n=3) ti ± 0.5773502691 0.0000000000 ± 0.7745966692 ± 0.3399810436 ± 0.8611363116 wi 1.0000000000 0.8888888889 0.5555555556 0.6521451549 0.3478548451 *Değerler Lale Tükenmez Ergene’nin ders notlarından alınmıştır 11 Çözüm için Matlab’te bir kod yazılmıştır. Algoritma yerine n=1 için adımlar gösterilmiştir. Diğerleri için direk sonuçlar verilmiştir. n=1 için, 1 I1 = ∫ f (x)dx ≅ 0 1 2 1 1 1 ∑ Wi . 2 + 2 t i i =0 1 1 F (t 0 ) = + 0.5773502691 2 2 1 1 F (t1 ) = − 0.5773502691 2 2 1 I1 = ∫x 5 dx ≅ 0 5 5 5 = 0.305134098 = 4.214567421x10 − 4 1 (W0 F (t 0 ) + W1 F (t1 )) = 1x0.305134098 + 1x 4.214567421x10 − 4 2 I1 = 0.1527777777 n=2 için, 1 I2 = ∫ f (x)dx ≅ 0 1 I2 = ∫x 5 dx ≅ 0 1 2 5 2 1 1 ∑ Wi . 2 + 2 t i i =0 1 (W0 F (t 0 ) + W1 F (t1 ) + W2 F (t 2 )) 2 I 2 = 0.1666666667 n=3 için, 1 I3 = ∫ f (x)dx ≅ 0 1 I3 = ∫x 5 dx ≅ 0 1 2 3 1 1 ∑ Wi . 2 + 2 t i i =0 5 1 (W0 F (t 0 ) + W1 F (t1 ) + W2 F (t 2 ) + W3 F (t 3 )) 2 I 3 = 0.1666666667 Integralin Analitik olarak Hesabı; 1 I analitik = 5 ∫ x dx = 0 1 1 6 1 x = 6 6 0 I analitik = 0.1666666667 12 Sonuçlar ve Yorumlar: Hata analizi yaparsak, n=1 için, I1 − I analitik 0.1527777777 − 0.1666666667 = = 0.08333 ≈ %8.3 I analitik 0.1666666667 Rbagil = n=2 için, Rbagil = I 2 − I analitik 0.1666666667 − 0.1666666667 = =0 I analitik 0.1666666667 n=3 için, Rbagil = • I 3 − I analitik 0.1666666667 − 0.1666666667 = =0 0.1666666667 I analitik Görüldüğü üzere iki nokta alındığında %8 mertebesinde bir hata ile hesap yapılabilmektedir. Bu hata (2 nokta için) trapez kuralı uygulansa idi çok daha büyük mertebelerde olacaktı. • Tahmin edileceği gibi en küçük hatayı (aslında tam hesap edildi), dört nokta alarak yapılmıştır. Ancak üç nokta alınarak yapılan hesap ta tam doğru cevabı vermiştir. • Burada hatanın oluşmasındaki başka bir etken, sayıların maksimum 10 anlamlı basamak kullanılarak hesap edilmesinden de doğmaktadır. 13 Kaynaklar: 1. Hildebrand F.B., Introduction to Numerical Analysis, 2nd Ed., McGraw Hill Inc., 1974. 2. Scheid F., Theory and Problems of Numerical Analysis, McGraw Hill Inc., 1968. 3. Greenspan D., Casulti V., Numerical Analysis for Applied Mathematics, Science and Engineering, Addison-Wesley, 1988. 14 Ek1) 2. Soru için yazılan Matlab kodu; clear,clc; syms x alfa; a=0; b=2*pi; fx=cos(2*x)*exp(-x); for i=1:8 h(i)=(b-a)/i; for j=1:i+1 xi(j)=a+h(i)*(j-1) fxi(j)=subs(fx,xi(j)) end Ikt(i)=0 for j=1:i Ikt(i)=Ikt(i)+h(i)/2*(fxi(j)+fxi(j+1)) end f=fxi' for j=2:i+1 for k=j:i+1 f(k,j)=f(k,j-1)-f(k-1,j-1) end end n=i for k=n:-1:1 fak=1 for j=0:(n-k) fak=fak*(alfa-j) end faktor(n-k+1)=fak/factorial(n-k+1) end Px=f(1,1) for k=2:n+1 Px=vpa(Px+(f(k,k)*faktor(k-1))) end figure ii=0:0.25:i; dd=0:0.01:2*pi; yy=ii*h(i); zz=subs(Px,ii); xz=subs(fx,dd); plot(dd,xz,'-b') hold on plot(yy,zz,'.r') hold off hold on plot(xi,fxi,'-g') hold off grid on 15 title('Gercek Fonksiyon, Alinan Noktalar ve Ileri Farklar Cokterimlisi') legend('Gercek Fonksiyon','Cokterimli Yaklasimi','Kompozit Trapezler') Pxint=int(Px) Isimp(i)=h(i)*(subs(Pxint,i)-subs(Pxint,0)) end Ikt=Ikt' Isimp=Isimp' Igercek=vpa(subs(int(fx),2*pi)-subs(int(fx),0)); etrapez=vpa(Ikt-Igercek,9) esimpson=vpa(Isimp-Igercek,9) 16 Ek2) 3. Soru için yazılan Matlab kodu; clear,clc; ti=vpa([0.5773502691 -0.5773502691 0.0 0.0 0.0000000000 0.7745966692 -0.7745966692 0.0 0.3399810436 -0.3399810436 0.8611363116 -0.8611363116],10); w=vpa([1.0000000000 1.0000000000 0.0 0.0 0.8888888889 0.5555555556 0.5555555556 0.0 0.6521451549 0.6521451549 0.3478548451 0.3478548451],10); syms t; Ft=vpa((0.5*(t+1))^5,10); for i=1:3 for j=1:i+1 FT(j)=subs(Ft,ti(i,j))*w(i,j); end I(i)=vpa(0.5*sum(FT),10); end Ianalitik=vpa(1/6,10); 17