Bilgisayar Programlamaya Giriş I

advertisement
Bilgisayar Programlamaya Giriş I 2012
KAREKÖK BULMA
Acaba hesap makinesi bir sayının karekökünü nasıl buluyor?
başlangıç değeri olmak üzere,
dizisi
değerine yakınsar. Yani;
olur.
Burada birinci sorun başlangıç değerinin belirlenmesidir. İkinci sorun ise bu işlemin ne zaman
duracağıdır. Bu bilgileri kullanıcıya sorarak buraya kadar verilenler altında bir sayının
karekökünü alan QBASIC programı aşağıdaki gibidir.
CLS
INPUT “Karekökü ALINACAK SAYIYI GiRiNiZ …”, d
INPUT “ADIM SAYISINI GiRiNiZ …”, n
INPUT “BASLANGIC DEGERINI GiRiNiZ …”, x0
say=0
home:
x1=0.5*(x0+b/x0)
say=say+1
PRINT “ADIM SAYISI:” ; say ; “YAKLASIK KOK:” , x1
IF say>n THEN END
x0=x1
GOTO home
1
Abdullah YALÇINKAYA
Bilgisayar Programlamaya Giriş I 2012
Aslında bir
sayının karekökünü bulmak
fonksiyonunun kökünü bulmak ile
aynı anlama gelir. Bu düşünce ile aşağıdaki BOLZANO teoremi yardımıyla başlangıç değeri
belirlenebilir.
BOLZANO TEOREMİ.
ise
,
aralığında sürekli bir fonksiyon olmak üzere, eğer
vardır öyle ki
olur.
Algoritmanın ne zaman duracağı ile ilgili olan ikinci sorun ise 3 farklı yol ile çözülebilir.
1. Bir n sayısı belirlenir. n tane terim hesaplanır ve program durur.
olduğu zaman program durur. ( olabildiğince küçük bir sayı)
2.
olduğu zaman program durur. ( olabildiğince küçük bir sayı)
3.
Yukarıdaki algoritma bu durdurma kurallarına göre yeniden yazılabilir.
fonksiyonunun kökünü bulmak demek
Herhangi bir
olacak şekilde
değerini
elde etmek demektir. Bu işlemi yapabilmek için çeşitli yöntemler vardır. Bu yöntemlerden
bazıları Yarılama yöntemi ve Newton Raphson yöntemi olmak üzere aşağıda verilmiştir.
YARILAMA YÖNTEMİ
Bir fonksiyonun kökünü bulmak için kullanılan bir yöntemdir. Fonksiyonun içinde bulunduğu
aralık ikiye iki eşit parçaya bölünür ve BOLZANO teoremi yardımıyla kökün hangi parçada
olduğu öğrenilip yeni aralık belirlenir. Benzer şekilde bu işlem tekrarlanır ve kök
olabildiğince küçük bir aralık içine alınır. Böylece köke yaklaşılmış olur.
1. BOLZANO teoremine göre
Aralığı belirlenir.
2.
eşit iki parçaya bölünür;
2
Abdullah YALÇINKAYA
olacak şekilde kökü içeren
Bilgisayar Programlamaya Giriş I 2012
3. Eğer,
Kök bulunmuştur. DUR.
4. Değilse,
5. Adım 2’deki işlemler tekrarlanır ve bir sonraki aralık belirlenir. Benzer şekilde n adım
gidilir. Böylece
aralığı belirlenir.
6. Yaklaşık kök;
olarak elde edilir.
Yarılama yöntemi kullanılarak karekök bulan QBASIC programı aşağıdaki gibidir.
CLS
INPUT "ARALIGIN ALT SINIRI: ", a
INPUT "ARALIGIN UST SINIRI: ", b
INPUT "KAREKOKU ALINACAK SAYI:", d
say = 0
home:
fa = a ^ 2 - d
c = (a + b) / 2
fc = c ^ 2 - d
say = say + 1
IF ABS(fc) < 0.01 THEN
PRINT "YARILAMA SONUCUNDA YAKLASIK KOK: ", c
END
END IF
IF fa * fc < 0 THEN
b=c
ELSE
a=c
END IF
GOTO home
3
Abdullah YALÇINKAYA
Bilgisayar Programlamaya Giriş I 2012
NEWTON RAPHSON YÖNTEMİ
aralığında sürekli ve türevlenebilir bir fonksiyon ve
,
başlangıç değeri olmak
üzere;
Şeklindeki fonksiyonun köklerini bulmak bazen tam olarak mümkün olmayabilir.
fonksiyonunun köklerini belli bir hata ile bulmak mümkündür.
Ancak
Fonksiyonunun köklerini bulma yöntemlerinden biride Newton – Raphson yöntemidir. Bu
yöntem aynı zamanda Newton yöntemi olarak da bilinir.
Fonksiyonun
eksenini kestiği noktanın tahmin yoluyla
olduğunu düşünelim.
Noktasında
eğrisine tanjant doğrusu veya
teğet doğrusu çizelim.
Bu teğet doğrusu
eksenini
noktasında keser.
Dolayısıyla
noktası
fonksiyonunun
köküne yakınsa
noktası
fonksiyonu
köküne
daha da yakın olur.
noktasında çizilen teğet doğrusunun denklemi:
Burada,
Eğer
fonksiyonu
eksenini
yazılabilir.
4
Abdullah YALÇINKAYA
noktasında kesiyorsa bu teğet denklemi aşağıdaki gibi
Bilgisayar Programlamaya Giriş I 2012
elde edilir. Eğer
Buradan
yalnız bırakılırsa aşağıdaki
eşitlik elde edilir.
Eğer
ikinci bir tahmin olarak alınırsa:
değeri
inci bir tahmin olarak alınırsa:
Bu şekilde
dizisi elde edilir. Amaç bu dizinin yakınsak olması ve limitinin de
denkleminin çözümü olmasıdır.
Verilenlere göre Newton Raphson yöntemi ile bir sayının karekökünü alan QBASIC programı
aşağıdaki gibidir.
CLS
INPUT "BASLANGIC DEGERI:", x0
INPUT "DELTA:", delta
INPUT "KAREKOKU ALINACAK SAYI:", d
newtonhome:
x1 = x0 - (x0 ^ 2 - d) / (2 * x0)
PRINT "YAKLASIK KOK:", x1
IF ABS(x1 - x0) < delta THEN END
x0 = x1
GOTO newtonhome
5
Abdullah YALÇINKAYA
Download