5. 5/13
Kök Bulma Metotları
Avantaj Dezavantaj
Ardışık yakınlaşma
(Successive Approx.)
● Anlamak ve kullanmak kolay ● Yakınsama garantisi yok
● Yavaş yakınsama
● Yakınsama için güzel başlangıç
değeri tahmin edilmeli
İkiye bölme
(Bisection)
● Anlamak ve kullanmak kolay
● Aralık doğru belirlenebilirse,
yakınsama garantisi var.
● Aralık doğru tahmin edilmeli
● Yavaş yakınsama
Newton-Raphson ● Anlamak ve kullanmak kolay
● Hızlı (üstel) yaklaşım. Köke
yaklaştıkça hız artar.
● Türevin analitik çözümü gerekli
● Türev sıfır olduğunda, işe
yaramaz
● Başlangıç değer tahmini gerekir.
Sekant
(Kiriş)
● Tek kök olduğunda, doğrusal
yaklaşıma göre daha hızlıdır.
● Çok kök varsa doğrusal yaklaşım
hızındadır.
● Türev işlemine gerek yoktur.
● İterasyon ıraksak olabilir.
● Hata miktarı kestirilebilir değildir.
6. 6/13
ÖRNEKLER
● Colebrook denklemi
– Akışkanlar mekaniğinde, boruda türbülans hesabı yaparken,
borunun çapını bulmak için kullanılıyor.
● Re: Reynold sayısı
● E : pürüzlülük katsayısı
● f: Darcy sürtünme katsayısı
● D: boru çapı
8. 8/13
İkiye Bölme Algoritması
● f(xa) ve f(xü) değerleri hesaplanır.
● f(xa) * f(xü) < 0 olup olmadığı kontrol edilir.
● Yeni yaklaşık kök (xy) bulunarak ve f(xy)
hesaplanır. Bunun için aralığın orta noktası
alınır.
● Eğer f(xa).f(xy) < 0 ise xü=xy değilse xa=xy alınır.
● Hata toleransına ulaşınca kök bulunmuş olur.
9. 9/13
Colebrook Bisection uygulaması
% bisection_cb.m
function x=bisection_cb(y,a,b,tol)
sfb = sign(y(b));
width = b-a;
%disp(' a b sfx')
while width > tol
width = width/2;
x = a + width;
sfx = sign(y(x));
%disp(sprintf('%0.8f %0.8f %2.0f',
[a b sfx]))
disp(sprintf('%0.8f', b))
if sfx == 0, a = x; b = x; return
elseif sfx == sfb, b = x;
else, a = x; end
end
%cb.m
Re = input('n Reynolds Numarası (Re) = ');
e = input(' Bağıl pürüzlülük (e/D) = ');
y = @(f) 1/sqrt(f) + 0.86*log(e/3.7 +
2.51/Re/sqrt(f));
bisection_cb(y,0.7,0.8,1e-3);
>> bisection_cb(y,0.7,0.8,1e-3);
0.80000000
0.75000000
0.72500000
0.71250000
0.70625000
0.70312500
0.70156250
12. 12/13
Eliptik Yörünge Newton-Raphson
%CalcEA.m
function E = CalcEA(M,e,tol)
%Checking for user inputed tolerance
if nargin == 2
%using default value
tol = 10^-8;
elseif nargin > 3
error('Too many inputs. See help CalcE')
elseif nargin < 2
error('Too few inputs. See help CalcE')
end
Etemp = M;
ratio = 1;
while abs(ratio) > tol
f_E = Etemp - e*sin(Etemp) - M;
f_Eprime = 1 - e*cos(Etemp);
ratio = f_E/f_Eprime;
if abs(ratio) > tol
Etemp = Etemp - ratio;
else
E = Etemp;
end
end
>> CalcEA(2,2)
ans =
2.754673754247060
>>
>> CalcEA(2,2,10^-2)
ans =
2.758967322944334