Bu sayfadaki yazılar
Sayfanın metni
Sayfa 26
Bir polinom düşünün! 5. dereceden ve ucubik katsayılara sahip olsun. Bu polinomun köklerini bulmak için ihtiyacınız olan işte böyle bir programdır.
Programda Newton-Raphson metodu kullanılmaktadır. Bu metotda, işleme bir sayı alınarak başlanır. Daha sonra bu sayının denklemi sağlayıp sağlamadığına bakılır. Eğer sağlamıyorsa, ki büyük bir olasılıkla ilk alınan bu sayı kök olmayacaktır, fonksiyonun türevinin bu sayı için değeri bulunur. Ve bir sonraki deneme noktası aşağıdaki eşitliğe göre hesaplanır:
Buna göre deneme aralığında polinomun türevinin sıfıra eşit olması gerekiyor. Aynı zamanda polinom deneme aralığında ya "concave up" ya da "concave down" olmalıdır. Yani fonksiyonun ikinci türevinin işareti, deneme aralığında x'in her değeri için aynı olmalıdır. Bu metodun grafik olarak açıklamasını ise şöyle yapabiliriz. Önce aşağıdaki gibi herhangi bir fonksiyonun grafiğini düşünün.
[a, b] aralığında fonksiyon "concave up"'tır. Programda ilk olarak seçilen sayının ise real ve x1 noktasında olduğunu varsayın. X1 noktasında fonksiyonun sıfır değerini almadığı grafikten görülmektedir. Öyleyse başka bir sayıyı denemeliyiz. Bunun için önce fonksiyonun türevinin x1 noktasındaki değeri bulunur. Şimdi, m noktasından eğriye bir teğet çizelim. Bu teğet x-eksenini x2 noktasında kessin. Fonksiyonun, türevinin x1'deki değeri q açısının tanjantıdır. Ve bu da f(x1)/(x1-x2)'ye eşittir. Buradan da bir sonraki denenecek olan sayı x2 çekilebilir. Fakat fonksiyon x2 noktasında da sıfır değerini almıyor. Öyleyse yukarıdaki işlemleri bir daha tekrar edip fonksiyon istenen hassasiyet değerinin altına düşünceye kadar hesaplamalara devam ederiz. Peki ya ilk deneme noktası fonksiyonun eksi olduğu yere, örneğin c noktasına denk gelseydi ne olacaktı? Bu noktadan çizilen teğet x-eksenini fonksiyonun artı değerlere sahip olduğu yerde kesiyor. Yani program bu bölgeye sıçrayacak ve köke yine bu kısımdan yaklaşmaya başlayacaktır.
Başka bir soru: İlk deneme sayısı yerel minimum veya maksimum noktalarına denk gelseydi ne olurdu? Buralarda birinci türevin sıfır olması nedeniyle "?DIVISION BY ZERO" hatası bekliyoruz. Ama C-64 bu hatayı vermiyor. Çünkü, ilk başta alınan karmaşık sayı polinomda yerine
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 27
yerleştirilirken önce polar forma çevriliyor. Polar formdaki bir sayının gereken kuvveti kolayca alındıktan sonra tekrar rectangular forma geri dönüyoruz. Bu işlemler sırasında yapılan yuvarlatmalar, recursive eşitlikteki o türevle bölümenin sonsuz değil ama çok büyük bir sayı çıkmasını sağlıyor. Böylece bizde kökten oldukça uzaklara sıçramış bulunuyoruz. Buradan tekrar bir köke yaklaşma başlıyor ve kökü daha uzun bir zaman sonra buluyoruz. İlk kökü bulduktan sonra, buna r diyelim, program orijinal polinomu x-r'e böler. Böylece polinomun derecesi bir azalır ve son kök bulununcaya kadar yukarıdaki işlemlere tekrar başlanır.
Program karmaşık sayı olan kökleri de bulabilmektedir. Orijinal polinomun katsayıları karmaşık sayı olabilir. En fazla 10. dereceden olan polinomların köklerini bulabilirsiniz. Öte yandan, işlemlerdeki çözünürlüğün sınırlı olması nedeniyle fonksiyonun tam sıfır olduğu noktayı bulamıyoruz. İşte bunun için programda bir hassasiyet derecesi tanımlanmıştır. Örneğin hassasiyet derecesi 1E-6 demek, fonksiyonun kökü kabul edilen sayı için aldığı değerin 1E-6 sayısından küçük olması kabul edilebilir demektir. Hassasiyeti ne kadar küçük tutarsanız sonuç o kadar hassas olur ama çok küçültmemeye de dikkat etmeliyiz. Çünkü eğer hassasiyeti çok küçük seçersek, örneğin 1E-12, C-64 hiçbir zaman fonksiyonda yerine koyduğu zaman bu sayıdan ufak sonuç verecek kökü bulamayabilir. Bu durumda bilgisayar sonsuz döngüye girecek ve sıfır noktasının etrafında bir o yana, bir bu yana gidip gelecek ama asla istenilen hassasiyete ulaşamayacaktır. Bu durumu engellemek için programı durdurup, daha düşük bir hassasiyet vererek yeniden çalıştırmalısınız.
Örnek: (x+2-j2)x(x+2+j2)x(x-3)x(x+1.25)=0
Programı denemek için, önce kökleri yukarıdaki gibi çarpan halinde yazalım ki programın bulduğu kökleri karşılaştırabilelim. Eğer parantezleri açarsak aşağıdaki polinomu elde ederiz:
x 4+2.25xx3-2.75xx 2-29xx-30=0
Şimdi programı çalıştıralım. Program ilk önce bizden polinomun derecesini isteyecektir. Örneğimizdeki polinomun derecesi 4. Daha sonra hassasiyet derecesini vermeliyiz. Bunu 1E-6 olarak bırakalım (açıkladığı değeri budur). Daha sonra x'in en yüksek kuvvetinden başlayarak sıraya polinomun katsayıları verilir. Katsayıları verirken önce real kısmı daha sonra da sanal kısmı veriyoruz. İlk sayıyı birbirinden virgülle ayırarak da verebilirsiniz. Son katsayı da verildikten sonra program çözüme başlayacaktır. 25 saniye sonra aşağıdaki sonuçları alırız:
-1.25+j(-9.30497235E-10) -2+j(-2) 3+j(2.01920614E-09) -2+j(2)
Dikkat edilirse, real kısmı 3 ve -1.25 olan köklerin, aslında da olmaması gereken çok küçük sanal kısımların da var. Bir de hassasiyeti 1E-3 yapıp deneyin. Bu sefer sonuçlar daha az kesin olacaktır. İşlemlerinizde buna dikkat etmelisiniz.