HBM512 Bilimsel Hesaplama II Ödev 4

advertisement
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α = hf 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α = hf 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
Download