HBM512 Bilimsel Hesaplama II Ödev 2
Transcript of HBM512 Bilimsel Hesaplama II Ödev 2
HBM512
Bilimsel Hesaplama II
Ödev 2 Hazırlayan: Hamdi Nadir Tural 702061013 Hesaplamalı Bilim ve Mühendislik
1
1. Ayrık veriler;
x y x y x y 0 0.1 14 2.022 28 0.4308 2 1.884 16 1.65 30 0.203 4 2.732 18 1.5838 32 0.1652 6 3.388 20 1.35 34 -0.073 8 3.346 22 1.0082 36 -0.002
10 3 24 0.718 38 -0.1122 12 2.644 26 0.689 40 0.106
Bu ayrık verileri kullanarak 6. dereceden bir çokterimli yaklaşımı İleri Farklar Yöntemi kullanarak yapalım. Bu tablonun oluşturulması ve polinomun elde edilmesi için Matlab’te bir m-file kodu yazılmıştır;
Program girdileri: xi, yi : ayrık girdi noktaları n : girilen nokta sayısı Program çıktıları: Pn(x) : uydurulan çokterimli
Algoritma: Algoritmada önce 1. sütun, sonra 2. sütun vs. olarak, aşağıdaki tablonun sütunlarının doldurulması şeklinde yapılacaktır.
i,j 0f 0f∆ 0
2f∆ …
… 1 x 2 x x 3 x x x … x x x x … x x x x x
Başla: Oku x,y,n; %Tabloların oluşturulması: f(:,1)=y; % Y’ yi Fark Tablosunun Birinci Sütununa ata Döngü 1: j=2’den n’ye Döngü 2: i=j’den n’ye f(i,j)= f(i,j-1)-f(i-1,j-1) Döngü 2 Son Döngü 1 Son h=x(2)-x(1) % Adım aralığını hesapla
% alfa* 0f∆ +alfa.(alfa-1)* 02f∆ +...+alfa(alfa-1)...(alfa-(n-1))* 0f
n∆
% 0fn∆ değerleri için katsayılarının hesabı
2
faktor(1)=(xp-x(1))/h; % İlk değeri ata Döngü 3: i=2’den n’ye kadar
faktor(i)=faktor(i-1)*(xp-x(i))/(h*i); % ))...((!.
)( 100
−−−∆
= ni
i
xxxxhi
fifaktor hesabı
Döngü 3 Son Pxp=f(1,1); % İlk değeri ata, ilk değer= 0f Döngü 4: i=2’den n’ye kadar
Pxp=Pxp+f(i,i)*faktor(i-1) % Fark tablosunun diyagonalindeki değerlerle ile % katsayıları çarp
Döngü 4 Son Ekrana Yaz: Pxp Program Sonu
8 ve 15 anlamlı rakam için oluşturulan Farklar Tablosu
0f 0f∆ 02f∆ 0
3f∆ 04f∆ 0
5f∆ 06f∆ 0
7f∆ 08f∆ 0
9f∆ 010f∆ 0
11f∆ 012f∆ 0
13f∆ 014f∆ 0
15f∆ 016f∆ 0
17f∆ 018f∆ 0
19f∆ 020f∆
0.1
1.884 1.784
2.732 0.848 -0.936
3.388 0.656 -0.192 0.744
3.346 -0.042 -0.698 -0.506 -1.25
3 -0.346 -0.304 0.394 0.9 2.15
2.644 -0.356 -0.01 0.294 -0.1 -1 -3.15
2.022 -0.622 -0.266 -0.256 -0.55 -0.45 0.55 3.7
1.65 -0.372 0.25 0.516 0.772 1.322 1.772 1.222 -2.478
1.5838 -0.0662 0.3058 0.0558 -0.4602 -1.2322 -2.5542 -4.3262 -5.5482 -3.0702
1.35 -0.2338 -0.1676 -0.4734 -0.5292 -0.069 1.1632 3.7174 8.0436 13.5918 16.662
1.0082 -0.3418 -0.108 0.0596 0.533 1.0622 1.1312 -0.032 -3.7494 -11.793 -25.3848 -42.0468
0.718 -0.2902 0.0516 0.1596 0.1 -0.433 -1.4952 -2.6264 -2.5944 1.155 12.948 38.3328 80.3796
0.689 -0.029 0.2612 0.2096 0.05 -0.05 0.383 1.8782 4.5046 7.099 5.944 -7.004 -45.3368 -125.7164
0.4308 -0.2582 -0.2292 -0.4904 -0.7 -0.75 -0.7 -1.083 -2.9612 -7.4658 -14.5648 -20.5088 -13.5048 31.832 157.5484
0.203 -0.2278 0.0304 0.2596 0.75 1.45 2.2 2.9 3.983 6.9442 14.41 28.9748 49.4836 62.9884 31.1564 -126.392
0.1652 -0.0378 0.19 0.1596 -0.1 -0.85 -2.3 -4.5 -7.4 -11.383 -18.3272 -32.7372 -61.712 -111.1956 -174.184 -205.3404 -78.9484
-0.073 -0.2382 -0.2004 -0.3904 -0.55 -0.45 0.4 2.7 7.2 14.6 25.983 44.3102 77.0474 138.7594 249.955 424.139 629.4794 708.4278
-0.002 0.071 0.3092 0.5096 0.9 1.45 1.9 1.5 -1.2 -8.4 -23 -48.983 -93.2932 -170.3406 -309.1 -559.055 -983.194 -1612.6734 -2321.1012
-0.1122 -0.1102 -0.1812 -0.4904 -1 -1.9 -3.35 -5.25 -6.75 -5.55 2.85 25.85 74.833 168.1262 338.4668 647.5668 1206.6218 2189.8158 3802.4892 6123.5904
0.106 0.2182 0.3284 0.5096 1 2 3.9 7.25 12.5 19.25 24.8 21.95 -3.9 -78.733 -246.8592 -585.326 -1232.8928 -2439.5146 -4629.3304 -8431.8196 -14555.41
• Her iki durum için de farklar tablosu aynı değeri almaktadır. Çünkü 0f verileri maksimum 4 haneli hassasiyete sahip olduğu için toplama ve çıkarma
işlemleri hassasiyeti değiştirmemektedir. Ancak çarpma/bölme işlemlerine haiz bir işlem gerçekleştirilse idi, hassasiyetin değişeceği açıktı.
• Örneğin 3 adet sayıyı toplayalım; 87654.355314.22234.11.0 =++ :burada toplanan sayıların en küçük basamak değeri 510− mertebesinde olduğu
için, bulunan sonuç ta 510− hassasiyetinde oldu. Ancak çarpma veya bölme işlemi ele alınırsa; 4742559026.055314.22234.11.0 =xx :burada en
küçük basamak değeri 510− mertebesinde olmasına rağmen çarpımın hassasiyeti 1010− mertebesindedir.
6. dereceden uydurulan çokterimli 8 anlamlı rakam için;
0.10000000x1.8837500..x0.87687498-
.x0.25599478.x0.03769531-.x0.00261068.x0.00006836-(x)P2
34566
++
++ =
15 anlamlı rakam için;
00000000.10000000000000.x1.883750000000000.x0.87687500-1666667.x0.25599479
2500000.x0.03769531-7083333.x0.002610679375000.x0.00006835-(x)P23
4566
+++
+ =
20. dereceden uydurulan çokterimli 8 anlamlı rakam için;
0.10000000x594.17443.x1046.1312.-x804.37750.x363.68025.-x109.45685.
x23.467927.-x3.7377350..x0.45455031-.x0.04298993.x0.00319984-
.x0.00018872.x0.00000884-.x0.00000033.x0.00000001-.x0.00000000
.x0.00000000-.x0.00000000.x0.00000000x.00000000.0.x0.00000000(x)P
2345
678910
1112131415
161718192020
++++
++
+++
+++≈
15 anlamlı rakam için;
00000000.10000000861372.x594.174482009655.x1046.13134-
225810.x804.377571706640.x363.680280-040683.x109.456859
572214.x23.4679289-221487.x3.737735369610648.x0.45455034-
7111648.x0.042989931257355.x0.00319984-3103677.x0.00018872
0497737.x0.00000884-8240240.x0.000000329593031.x0.00000000-
0217823.x0.000000000003761.x0.00000000-0000048.x0.00000000
0000000.x0.00000000-0000000.x0.000000000000000.x0.00000000 (x)P
2
345
678
91011
121314
151617
18192020
++
++
+
++
+
++
+≈
İnceleme
- Yukarıdan da anlaşılacağı üzere, 8 anlamlı basamak kullanılarak 20. derece bir yaklaşım yapmak bu veri serisi ile mümkün olmamaktadır. Bu yorum 15 anlamlı basamak kullanarak uydurulan 20. derece çokterimli için de geçerlidir.
- 8 anlamlı basamak için )()( 1420 xPxP ≈ olurken, 15 anlamlı basamak için )()( 1720 xPxP ≈ olarak bulunur.
- Bunun sonucu olarak, çokterimli yaklaşımı bazı noktalarda girilen veriyi takip etmesine rağmen, bazı noktalarda tamamen bağımsız bir yol izleyerek ıraksama yapacaktır.
5
Şekil 1.
Şekil 2.
6
Şekil 3.
Şekil 4.
7
Yorumlar
- Yapılan 6. derece yaklaşımlarda hem 8 anlamlı hem de 15 anlamlı basamak göz önüne alındığında yaklaşım sağlamamıştır.
- Buradaki 6. derece çokterimli yaklaşımının bütün verinin trendini sağlamaması
normal bir sonuçtur. Çünkü alınan 21 datanın ilk 6 tanesine bağlı olarak yazılan çokterimli, ancak ilk 6 terimin bulunduğu aralıkta, yani [0,12] x ∈ aralığında bir yaklaşım sağlayabilir. Bu aralığın dışında ayrık datadan bağımsız hareketi de normal bir davranıştır. Bu değişimi Şekil 5’te görebiliriz.
Şekil 5.
- Şekil 5’ten de anlaşılacağı üzere, çokterimli yaklaşımı 7. noktadan sonra ıraksamaya başlıyor.
- Şekil 3’te olan ilginç bir durum, 6. derece uydurulan çokterimlilerin aksine, 20. derece 8 anlamlı basamak kullanıldığı zaman çokterimli +∞ ’a ıraksamaktadır. Yani çokterimlide pozitif katsayılar hâkim bir durumdadır.
- Yine 20. derece yaklaşımda bir değerlendirme yapılırsa, 15 anlamlı basamakta iyi bir yaklaşım yapılmıştır. Ancak yukarıda belirtildiği gibi, 20 derece çokterimlide
181920 ,, xxx elemanlarının katsayıları 15 basamağa kadar “0” olarak hesap edilebilmiştir. Yani, aslında )()( 1720 xPxP ≈ olacak şekilde 17. dereceye kadar olan bir çokterimli oluşturulabilmiştir.
- Bunun etkisi Şekil 4 üzerinde görülebilir. 18., 19., 20., 21. noktalar çokterimli yaklaşımı ile fonksiyondaki değerinden sapma göstermektedir.
- Data sıklığı artırılarak çizilen Şekil 6’da, başlangıç ve bitiş noktalarına doğru sıçramalar göze çarpmaktadır. Bu sıçramalar, yüksek mertebeli (17,16,15,.. vs) terimlerin etkisi olarak ortaya çıkmaktadır.
8
Şekil 6.
- Şekil 6’da görülen osilasyonlar şu şekilde açıklanabilir; öyle bir f(x)y = fonksiyonumuz olsun ki, x ’teki değişimler y ’de çok büyük değişimlere neden
olsun. Böyle bir durum ya üstel bir fonksiyonla ( .ay bXe= gibi) ya da yüksek
mertebeli parabolik fonksiyonlar ( .ay bx= gibi) kullanılarak elde edilir. - Bizim çokterimli yaklaşımımızda da 21 nokta kullanılması çokterimliyi ayrık veri
noktalarının dışında salınım yapmaya itmiştir. Veri sayısı arttıkça, çokterimlinin mertebesi artacak ve bunun sonucu olarak çokterimli ayrık noktalarda denklemin köklerini sağlamasına rağmen (girilen (x,y) ayrık veri çiftlerinde), ara değerlerde büyük salınımlar yapacağı açıktır. Bunun örneği Şekil 6’da çok iyi bir şekilde görülmektedir.
9
2. Lineer regresyon yaklaşımı ile hesap yapmak için fonksiyonu yeni bir forma dönüştürmek gerekmektedir. Bu yaklaşım;
XaaY .21 += şeklinde tanımlanan bir lineer fonksiyondur. Burada değişkenler şöyle tanımlanır;
)ln(.)( 21 xaaxy += için )(xyY = ve )ln(xX = Bu dönüşüme göre veriler yeniden oluşturulursa;
Asıl Fonksiyon
Dönüştürülmüş Fonksiyon
x y(x) X=ln(x) Y=y(x) 1 10 0,0000 10 2 14 0,6931 14 3 16 1,0986 16 4 18 1,3863 18 5 19 1,6094 19 6 20 1,7918 20 7 21 1,9459 21 8 22 2,0794 22 9 23 2,1972 23
10 23 2,3026 23 Oluşturulan yeni F(X,Y) çifti için hatayı minimize eden denklem takımı oluşturulursa;
∑∑==
=++n
ii
n
ii YaXan
02
01).1(
∑∑∑===
=+n
iii
n
ii
n
ii YXaXaX
02
0
2
01 ..
Burada katsayılar;
)1(0 += nS , ∑=
=n
iiXS
01 , ∑
=
=n
iiXS
0
22 , ∑
=
=n
iiYT
00 , ∑
=
=n
iiiYXT
01
Denklemin düzenlenmiş hali, 02110. TaSaS =+
12211. TaSaS =+ Buradan a1 ve a2 çözümleri;
2120
11021
SSS
TSTSa
−
−= ,
2120
01102
SSS
TSTSa
−
−=
olarak bulunur. Bu denklemler Matlab’te yazılan bir m-file kodu ile çözülmüştür.
Algoritma; Başla Oku x,y; Dönüşümü uygula; X=ln(x) Y=y Katsayıların hesabı;
İlk değerleri ata; S0=n+1, S1=0, S2=0, T0=0, T1=0,
Döngü 1: i=1’den n’ye kadar S1=S1+X(i) S2=S2+(X(i))^2 T0=T0+Y(i)
10
T1=T1+X(i)*Y(i); Döngü 1 Son Fonksiyonun Katsayılarını Hesapla; a1=(S2*T0-S1*T1)/(S0*S2-S1^2) a2=(S0*T1-S1*T0)/(S0*S2-S1^2) x=1.5 ve x=11 değerleri için fonksiyonu hesapla; y(1.5)=a1+a2*ln(1.5) y(11)=a1+a2*ln(11) Program Sonu
Program Çıktıları: S1= 15.104, S2= 27.65 T0= 186, T1= 308.76 a1= 6.3065, a2= 7.7215
4373.9)5.1ln(.7215.73065.6)5.1( =+=y 8218.24)11ln(.7215.73065.6)11( =+=y
Yorumlar:
- Yapılan lineer regresyonda, regresyonun merkezde dahi iyi bir sonuç verdiği aşağıdaki grafikten görülmektedir. Bunun temel nedeni, verilen datanın ]9,5[=x aralığında )ln(x fonksiyonuna daha uygun bir seyir izlemesidir.
- Burada dikkate alınacak bir husus ta, )ln(x fonksiyonunun hesabında yapılan
yakınsamadır. Yani anlamlı rakam olarak, 410− mertebesi kullanılmıştır. Burada alınacak daha küçük bir hesap mertebesi, fonksiyonla daha iyi bir çakışma sağlayacaktır.
Şekil 7
11
3. Verilen fonksiyon için veriler oluşturulursa
x f(x)=x4 0 0.0000
0.1 0.0001 0.2 0.0016 0.3 0.0081 0.4 0.0256 0.5 0.0625 0.6 0.1296 0.7 0.2401 0.8 0.4096 0.9 0.6561
1 1.0000 İleri farklar tabloları, 3 anlamlı basamak ve 6 anlamlı basamak için oluşturulmuştur. Fark tablolarının oluşturulmasında kullanılan genel ifade, E lineer kaydırma işlemcisi kullanılarak;
kk E )1( −=∆ Yani;
kk Ef )1(0 −=∆ şeklindeki binom açılımı kullanarak oluşturulur.
Önemli Not: Bütün Tabloların oluşturulması ve uydurulan Çokterimlinin katsayıları, değeri, HATA hesabı vs. işlemler sanki elimizde maksimum 3 ondalık ve/veya 6 ondalık sayıya kadar hesap yapabilen bir hesap makinesi varmış varsayımıyla hesaplanmıştır. Örneğin, gerçekte 2.0=x için 0016.0)2.0( =f olmasına rağmen, 3 anlamlı veri için benim hesap makinem 2.0=x için 002.0)2.0( =f olarak hesaplamakta. Başka bir örnek, Hata
hesabında )!1(
))...(1(+
−−n
nααα katsayısının üst kısmı(pay) çarpımsal bir döngüde hesap
edildiğinden, 3=n ‘e kadar yazarsak; 7.2=α
59.47.17.2)1( ==− xαα 213.37.059.4)2)(1( ==−− xααα
964.09639.0)3.0(213.3)3)(2)(1( −≅−=−=−−− xαααα olacak. Yani döngü 3. terimden sonra hep yuvarlama hatası yapacaktır. Ayrıca payda’daki faktöriyeli de düşünürsek bölme işlemi ile beraber, işlem bayağı yüksek bir yuvarlatma ve kesme hatasını içerecektir. Bu yüzden sonuçları incelerken veya katsayıları karşılaştırırken yuvarlatma ve kesme hatalarının, hesapta her zaman göz önünde bulundurulduğu dikkate alınmalıdır.
Tabloların oluşturulması ve çokterimlinin hesabı için Matlab’te bir m-file kodu yazılmıştır. Program girdileri: xi, yi : ayrık girdi noktaları xp : çokterimlinin hesap edileceği nokta n : girilen nokta sayısı Program çıktıları: Pn(x) : uydurulan çokterimlinin
12
Algoritma: Algoritmada önce 1. sütun, sonra 2. sütun vs. olarak, aşağıdaki tablonun sütunlarının doldurulması şeklinde yapılacaktır.
i,j 0f 0f∆ 0
2f∆ …
… 1 x 2 x x 3 x x x … x x x x … x x x x x
Başla: Oku x,y,n,xp; %Tabloların oluşturulması: f(:,1)=y; % Y’ yi Fark Tablosunun Birinci Sütununa ata Döngü 1: j=2’den n’ye Döngü 2: i=j’den n’ye f(i,j)= f(i,j-1)-f(i-1,j-1) Döngü 2 Son Döngü 1 Son h=x(2)-x(1) % Adım aralığını hesapla alfa=(xp-x(1))/(x(2)-x(1))
% alfa* 0f∆ +alfa.(alfa-1)* 02f∆ +...+alfa(alfa-1)...(alfa-(n-1))* 0f
n∆
% 0fn∆ değerleri için katsayılarının hesabı
faktor(1)=(xp-x(1))/h; % İlk değeri ata Döngü 3: i=2’den n’ye kadar
faktor(i)=faktor(i-1)*(xp-x(i))/(h*i); % ))...((!.
)( 100
−−−∆
= ni
i
xxxxhi
fifaktor hesabı
Döngü 3 Son Pxp=f(1,1); % İlk değeri ata, ilk değer= 0f Döngü 4: i=2’den n’ye kadar
Pxp=Pxp+f(i,i)*faktor(i-1) % Fark tablosunun diyagonalindeki değerlerle ile % katsayıları çarp
Döngü 4 Son Pxp(xp)’yi hesapla Rx % Hatayı hesapla Program Sonu
13
3 Anlamlı basamak için farklar tablosu;
0f 0f∆ 02f∆ 0
3f∆ 04f∆ 0
5f∆ 06f∆ 0
7f∆ 08f∆ 0
9f∆ 010f∆
0.000 0.000 0.000 0.002 0.002 0.002 0.008 0.006 0.004 0.002 0.026 0.018 0.012 0.008 0.006 0.063 0.037 0.019 0.007 -0.001 -0.007 0.130 0.067 0.030 0.011 0.004 0.005 0.012 0.240 0.110 0.043 0.013 0.002 -0.002 -0.007 -0.019 0.410 0.170 0.060 0.017 0.004 0.002 0.004 0.011 0.030 0.656 0.246 0.076 0.016 -0.001 -0.005 -0.007 -0.011 -0.022 -0.052 1.000 0.344 0.098 0.022 0.006 0.007 0.012 0.019 0.030 0.052 0.104
6 Anlamlı basamak için farklar tablosu;
0f 0f∆ 02f∆ 0
3f∆ 04f∆ 0
5f∆ 06f∆ 0
7f∆ 08f∆ 0
9f∆ 010f∆
0.0000 0.0001 0.0001 0.0016 0.0015 0.0014 0.0081 0.0065 0.0050 0.0036 0.0256 0.0175 0.0110 0.0060 0.0024 0.0625 0.0369 0.0194 0.0084 0.0024 0.000 0.1296 0.0671 0.0302 0.0108 0.0024 0.000 0.0000 0.2401 0.1105 0.0434 0.0132 0.0024 0.000 0.0000 0.0000 0.4096 0.1695 0.0590 0.0156 0.0024 0.000 0.0000 0.0000 0.0000 0.6561 0.2465 0.0770 0.0180 0.0024 0.000 0.0000 0.0000 0.0000 0.000 1.0000 0.3439 0.0974 0.0204 0.0024 0.000 0.0000 0.0000 0.0000 0.000 0.000 *Not: Burada 4 anlamlı basamak göstermek yeterli olmuştur. Zira 4. basamaktan sonraki sayılar sıfır değerini almaktadır.
Çokterimlinin 27.0=x Noktasında Değeri ve Hata Hesabı: İleri farklar çokterimlisinin ve Hatanın genel ifadesi;
))...((!.
...)()( 100
00
0 −−−∆
++−∆
+= nn
n
n xxxxhn
fxx
hf
fxP
))...(()!1()(
)( 0
1
n
n
n xxxxn
fxR −−
+=
+ ξ
hxx 0−
=α parametresi kullanılarak;
∑= −
∆=n
i
in ii
fxP0
0 !)!.(!
)(α
α
0111
)!1())...(1(
)()!1(
))...(1()( f
nn
fhn
nxR nnn
n+++ ∆
+−−
=+
−−=
αααξααα
Buna göre iki tabloyu da kullanarak x=0.27 değerine karşılık gelen P(0.27) hesap edilirse;
7.21.0
027.0=
−=α ve fark tablolarının diyagonallerindeki 0f , 0f∆ , 0
2f∆ ,.., 010f∆ katsayıları
kullanılarak,
14
3 anlamlı basamak için hesap edilen değerler;
!)1)...(1(
...!)!.(
!)( 000
00 n
nfff
iifxP n
n
i
in
+−−∆++∆+=
−∆= ∑
=
ααααα
α
Burada 0f , 0f∆ ,…, 010f∆ değerlerinin katsayıları olan
!)!.(!
ii−αα
değerlerine ia denirse;
0a 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a
1.000 2.700 2.295 0.536 -0.040 0.010 -0.004 0.002 -0.001 0.001 0.000 Ve farklar tablosundan;
0f 0f∆ 02f∆ 0
3f∆ 04f∆ 0
5f∆ 06f∆ 0
7f∆ 08f∆ 0
9f∆ 010f∆
0.000 0.000 0.002 0.002 0.006 -0.007 0.012 -0.019 0.030 -0.052 0.104 * Önemli Not kısmındaki çarpımsal hata burada göze çarpıyor. Tablodaki değerler kullanılarak çarpım yapılırsa;
!)1)...(1(
...)27.0( 010
0010 nn
fffP+−−
∆++∆+=αααα
006.0)27.0(10 =P bulunur. Hata hesabı: Fark tablosunda son değer 0
10f∆ ’dur ve tanım gereği 10R ’nun hesap edilebilmesi için
011f∆ değerinin bilinmesi gerekir. Bu yüzden, ancak 9R değerini hesaplamak mümkün
olacaktır. Burada iki farklı hata hesabı verilmiştir; Hatanın genel denklemi;
01
)!1())...(1(
)( fn
nxR n
n+∆
+−−
=ααα
a) 9R ’ün tablodaki değerleri kullanarak yuvarlatma yapmadan hesabı;
104.0)000376304.0(104.012...910
532318.1365)!19(
)97.2)...(17.2(7.2)( 0
199 x
xxxfxR −=
−=∆
+−−
= +
000039135.0)(9 −=xR b) 9R ’ün tablodaki değerleri kullanarak yuvarlatma yaparak hesabı (eski hesap makinemi kullanarak);
000.012...910
022.142104.0
12...910600.1365
)!19()97.2)...(17.2(7.2
)( 019
9 ==−
=∆+
−−= +
xxxxxxfxR
000.0)(9 =xR
15
6 anlamlı basamak için hesap edilen değerler;
Burada 0f , 0f∆ ,…, 010f∆ değerlerini ve
!)!.(!
iiai
−=
αα
katsayılarını 4=i ’e kadar almak
yeterli olacaktır. Zira 0f∆ ,…, 010f∆ değerleri 4=i ’den sonra “0” değerini almaktadır.
0a 1a 2a 3a 4a
1.000000 2.700000 2.295000 0.535500 -0.040163 Ve farklar tablosundan;
0f 0f∆ 02f∆ 0
3f∆ 04f∆
0.000000 0.000100 0.001400 0.003600 0.002400 Tablolardaki veriler denklemde yerine konursa;
!4)3)(2)(1(
...)27.0( 04
004−−−
∆++∆+=ααααα fffP
005315.0)7.2(10 =P olarak elde edilir. Hata hesabı:
Fark tablosunda 04f∆ ’e kadar olan değerleri kullandığımız için 4R değerini hesap edelim.
Burada da iki farklı hata hesabı verilmiştir; Hatanın genel denklemi;
01
)!1())...(1(
)( fn
nxR n
n+∆
+−−
=ααα
a) 4R ’ün tablodaki değerleri kullanarak yuvarlatma yapmadan hesabı;
(Burada 000000.005 =∆ f olduğu için 000000.0)(4 =xR olması gerekiyordu. Buna
rağmen 6 anlamlı basamak göz önüne alındığı için, minimum 0000005.0 gibi 7. basamakta oluşacak bir yuvarlatma hatası tanımlayabiliriz. Bu hatayı göz önüne alarak yapacağımız hesaba bakalım)
16
014
4
1022.50000005.0010442225.00000005.012345
25307.1
)0000005.0000000.0(12345
253070.1)!14(
)47.2)(37.2)(27.2)(17.2(7.2)(
−
+
≈==
+=∆+
−−−−=
xxxxxx
xxxxfxR
16
4 1022.5)( −= xxR b) 4R ’ün tablodaki değerleri kullanarak yuvarlatma yaparak hesabı (eski hesap makinemi kullanarak);
000000.0000000.0010442.0
000000.012345
253070.1)!14(
)47.2)(37.2)(27.2)(17.2(7.2)( 0
144
==
=∆+
−−−−= +
xxxxx
fxR
000000.0)(9 =xR
(Hesap makinem burada bayağı başarılı…)
16
İnceleme ve Yorumlar: - İlk olarak sonlu farklar tablolarına baktığımızda, 3 anlamlı basamak çokterimli
yaklaşımını 10. dereceye kadar götürmektedir. Oysaki 6 anlamlı basamak için oluşturulan tablodan görüleceği üzere, uydurulan 4. dereceden bir çokterimli ile fonksiyonu ifade etmek yeterli olacaktır.
- Çokterimli yaklaşımların yaklaşık hataları 0 (sıfır) olarak bulunsa da, gerçek hata ve bağıl gerçek hata göz önüne alınırsa; Üç anlamlı basamak için,
00531441.0)27.0()( 4 =→= fxxf 00068559.000531441.0006.0)27.0()27.0( =−=−= fPRgerçek
9.12%129.000531441.0
00531441.0006.0)27.0(
)27.0()27.0(lg =≈
−=
−=
ffP
R erçekbagı
Altı anlamlı basamak için, 00000059.000531441.0005315.0)27.0()27.0( =−=−= fPRgerçek
0111.0%000111.000531441.0
00531441.0005315.0)27.0(
)27.0()27.0(lg =≈
−=
−=
ffP
R erçekbagı
- Yapılan bütün adımlarda (fark tablosunun oluşturulması, katsayıların hesabı, vs.)
anlamlı basamak sayısı göz önüne alınmış, bu nedenle her adımda yapılan hata 1. durumda çok büyüyerek %13’e kadar çıkmıştır.
- Başka bir husus ta, hesap hassasiyeti artırılmadan, hesap edilecek yaklaşık hata terimleri hep 0 olarak bulunacaktır. Yani hassasiyet arttıkça hem hesap hem de hata değeri düzgün hesap edilebilecektir.(6 anlamlı rakam fark tablosuna bakılırsa
n>4 için 0fn∆ değerleri 0 olduğu için 0
1
)!1())...(1(
)( fn
nxR n
n+∆
+−−
=ααα
hep 0
olacaktır.) - Sonuç olarak, bir fonksiyona veya bir ayrık veri serisine eğri uydururken dikkat
edilmesi gereken önemli bir husus Hesap Hassasiyeti’dir. Hesap hassasiyetinin düşük olması, hem gereksiz yere işlem sayısının uzamasına (fark tablolarından görüleceği üzere 10-6 hassasiyetle hesap yapılırsa 4. dereceden çokterimli yeterli olurken, 10-3 hassasiyetle yapılırsa 10. dereceden çokterimli bile iyi bir sonuç vermiyor.) hem de hata değerinin büyümesine neden oluyor.
17
Kaynaklar: 1. Hoffman J.D., Numerical Methods for Engineers and Scientists, 2nd Ed., McGraw
Hill Inc., 2001. 2. Maron M.J., Numerical Analysis: A Practical Approach, Macmillan Publ. Co. Inc.,
1982. 3. Nielsen K.L., Methods in Numerical Analysis, Macmillan Publ. Co. Inc., 1964.
18
Ek1) 1. Soru için yazılan Matlab kodu; clear,clc; x=[0:2:40]'; y=[.1;1.884;2.732;3.388;3.346;3;2.644;2.022;1.65;1.5838;1.35;1.0082;.718;... .689;.4308;.203;.1652;-.073;-.002;-.1122;.106]; n=size(y,1); % Girdi verilerin sayısı f(:,1)=y; % Fark Tablosunun Birinci Kolonu % 15 anlamlı basamak durumu f15=round(f*1.e15)/(1.e15); for j=2:n for i=j:n f15(i,j)=round((1.e15)*(f15(i,j-1)-f15(i-1,j-1)))/(1.e15); end end % 8 anlamlı basamak durumu f8=f for j=2:n for i=j:n f8(i,j)=round(1.e8*(f8(i,j-1)-f8(i-1,j-1)))/(1.e8); end end syms xp; h=x(2)-x(1); % 8 anlamlı basamak durumu % alfa.f0+alfa.(alfa-1)*f0^2+...+alfa(alfa-1)...(alfa-(n-1))*f0^n % değerlerinin hesabı factor8(1)=(xp-x(1))/h; for i=2:n factor8(i)=vpa(factor8(i-1)*(xp-x(i))/(h*i),8); end % 15 anlamlı basamak durumu % alfa.f0+alfa.(alfa-1)*f0^2+...+alfa(alfa-1)...(alfa-(n-1))*f0^n % değerlerinin hesabı factor(1)=(xp-x(1))/h; for i=2:n factor(i)=vpa(factor(i-1)*(xp-x(i))/(h*i)); end Pxp15=f15(1,1); Pxp8=f8(1,1); for i=2:7 Pxp15=Pxp15+vpa(f15(i,i)*factor(i-1)) Pxp8=Pxp8+vpa(f8(i,i)*factor8(i-1)) end Pxp8=vpa(collect(Pxp8),8) % 8 anlamlı rakam yaklaşımı Pxp15=vpa(collect(Pxp15),15) % 15 anlamlı rakam yaklaşımı
19
xx=0:2:40; for i=1:21 yy(i)=subs(Pxp8,xx(i)); end figure plot(x,y,'.-r',xx,yy,'.b') grid on xlabel('x') ylabel('y') title('6. Dereceden Polinom Yaklasimi ve Ayrik Veri (8 anlamli rakam)') legend('Ayrik Veri','Polinom Yaklasimi',2) xx=0:2:40; for i=1:21 yy(i)=subs(Pxp15,xx(i)); end figure plot(x,y,'.-r',xx,yy,'.b') grid on xlabel('x') ylabel('y') title('6. Dereceden Polinom Yaklasimi ve Ayrik Veri (15 anlamli rakam)') legend('Ayrik Veri','Polinom Yaklasimi',2) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 20. derece çokterimli yaklaşımı %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear Pxp15; clear Pxp8; Pxp15=f15(1,1); Pxp8=f8(1,1); for i=2:n Pxp15=Pxp15+vpa(f15(i,i)*factor(i-1)) Pxp8=Pxp8+vpa(f8(i,i)*factor8(i-1)) end Pxp8=vpa(collect(Pxp8),8) % 8 anlamlı rakam yaklaşımı Pxp15=vpa(collect(Pxp15),15) % 15 anlamlı rakam yaklaşımı clear xx; clear yy; xx=0:2:40; for i=1:21 yy(i)=subs(Pxp8,xx(i)); end figure plot(x,y,'.-r',xx,yy,'.b') grid on xlabel('x') ylabel('y') title('20. Dereceden Polinom Yaklasimi ve Ayrik Veri (8 anlamli rakam)') legend('Ayrik Veri','Polinom Yaklasimi',2) xx=0:2:40; for i=1:21
20
yy(i)=subs(Pxp15,xx(i)); end figure plot(x,y,'.-r',xx,yy,'.b') grid on xlabel('x') ylabel('y') title('20. Dereceden Polinom Yaklasimi ve Ayrik Veri (15 anlamli rakam)') legend('Ayrik Veri','Polinom Yaklasimi',2)
21
Ek2) 2. Soru için yazılan Matlab kodu; clear,clc; x=1:1:10; y=[10 14 16 18 19 20 21 22 23 23]; X=log(x); Y=y; n=size(x,2); % girilen veri sayısı S0=n+1; % S1=0; % Başlangıç Değerleri S2=0; T0=0; T1=0; for i=1:10 S1=S1+X(i); S2=S2+(X(i))^2; T0=T0+Y(i); T1=T1+X(i)*Y(i); end a1=(S2*T0-S1*T1)/(S0*S2-S1^2); a2=(S0*T1-S1*T0)/(S0*S2-S1^2); % % Tekrar denkleme dönülürse % y(x)=a1+a2*ln(x) % x=1.5 ve x=11 değerleri için xs=[1.5 11]; ys=a1+a2*log(xs) % % Veri aralığı sıklaştırılarak çizilirse % xx=1:0.1:10; yy=a1+a2*log(xx); plot(xx,yy,'-k',x,y,'.r','MarkerSize',16) grid on axis ([0 10 0 25]) lab1=[num2str(a1) '+' num2str(a2) '*ln(x)']; lab2='Veri Noktalari'; legend(lab1,lab2,2) xlabel('x') ylabel('y=a1+a2*ln(x)') title('Lineer Regresyon Foksiyonu ve Ayrik Noktalar')
22
Ek3) 3. Soru için yazılan Matlab kodu; clear,clc; x=[0:0.1:1]'; y=[x.^4]; n=size(y,1); f(:,1)=y; % 3 anlamlı basamak durumu f3=round(f*1000)/(1000); for j=2:n for i=j:n f3(i,j)=round(1000*(f3(i,j-1)-f3(i-1,j-1)))/1000; end end % 6 anlamlı basamak durumu f6=f for j=2:n for i=j:n f6(i,j)=round(1.e6*(f6(i,j-1)-f6(i-1,j-1)))/(1.e6); end end xp=0.27; alfa=(xp-x(1))/(x(2)-x(1)) n=n-1 % 3 anlamlı basamak durumu % alfa.f0+alfa.(alfa-1)*f0^2+...+alfa(alfa-1)...(alfa-(n-1))*f0^n % değerlerinin hesabı for i=n:-1:1 fak3=1 for j=0:(n-i) fak3=round(1000*(fak3*(alfa-j)))/1000 end faktor3(n-i+1)=round(1000*fak3/factorial(n-i+1))/1000 end % 6 anlamlı basamak durumu % alfa*f0+alfa*(alfa-1)*f0^2+...+alfa(alfa-1)...(alfa-(n-1))*f0^n % değerlerinin hesabı for i=n:-1:1 fak6=1 for j=0:(n-i) fak6=round(1.e6*(fak6*(alfa-j)))/(1.e6) end faktor6(n-i+1)=round(1.e6*fak6/factorial(n-i+1))/(1.e6) end Pxp3=f3(1,1) for i=2:n+1 Pxp3=Pxp3+round(1000*(f3(i,i)*faktor3(i-1)))/1000 end Pxp6=f6(1,1) for i=2:n+1
23
Pxp6=Pxp6+round(1.e6*(f6(i,i)*faktor6(i-1)))/(1.e6); end % hata terimi için alfa.(alfa-1)...(alfa-n) katsayısının hesabı hfak3=1,hfak6=1; for i=0:9 hfak3=round(1000*(hfak3*(alfa-i)))/1000; hfak6=round(1.e6*(hfak6*(alfa-i)))/(1.e6); end %R9 değerlerini hesapla Rxp3=round(1000*(hfak3/factorial(n+1)*f3(n+1,n+1)))/1000 Rxp6=round(1.e6*(hfak6/factorial(n+1)*f6(n+1,n+1)))/(1.e6)