Upload
murat-oezalp
View
450
Download
1
Embed Size (px)
Citation preview
1/13
Sayısal Yöntemlerle Kök Bulma
Sayısal yöntemler neden kullanılır?
• Fonksiyon yoksa• Fonksiyon çok karmaşıksa• Fonksiyon “kara kutu” ise
2/13
Kök bulma temelleri
3/13
İterasyon kavramı
4/13
Ne kadar iterasyon?
5/13
Kök Bulma Metotları
Avantaj DezavantajArdışı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/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ı
7/13
Colebrook Denklemi
● Eşitliğin bir tarafında 0 kalacak şekilde düzenlenebilir:
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/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
10/13
ÖRNEKLER
● Kepler Yasası & İki cisim problemi
11/13
Newton Raphson Metodu
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
13/13
Kaynaklar
● http://utkstair.org/clausius/docs/che301/pdf/rootfind.pdf
● http://butler.cc.tut.fi/~piche/numa/lecture0506.pdf
● http://www.pearsonhighered.com/samplechapter/0130138517.pdf
● http://www.imo.org.tr/resimler/ekutuphane/pdf/5148.pdf
● http://www.math.utah.edu/mathcircle/notes/non_linear_root_finding.pdf
● http://binnerd.blogspot.com.tr/2012/04/elliptical-motion-solver.html
● http://www.mathworks.com/moler/zeros.pdf
● http://people.cs.uchicago.edu/~ridg/newna/nalrs.pdf
● https://www.wolframalpha.com/examples/NumericalRootFinding.html