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