Commodore sayı 58, sayfa 23

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 23

X - SQR (X) - 5 = 0 Böylece 10. satır: DEF FN A(X) = X - SQR (X) - 5 halini alır. İşte burada bir sorunla karşılaşıyoruz. Başlangıç değerlerinde FN A(X) sıfıra eşit olduğundan 40. satırda sıfıra bölme hatası ortaya çıkıyor. X0=0 ve X=3 olarak başlangıç değerlerini değiştirsek bile başka bir sorunla karşılaşırız. X'in değeri bir süre sonra eksiye düşer ve 70. satırda “Illegal Quantity Error” verilir. Bunun sebebi eksi bir sayının karekökünün alınmaya çalışılmasıdır. Bu problemin üstesinden gelmek için Y değişkenini X'in karesi olarak tanımlamak yeterli olacaktır: DEF FN A(Y) = Y^2-Y-5

DEF komutunda bahsi geçen değişkenin ne olduğu hiç önemli değildir. Şu anda uğraştığımız değişken eskisinin karesi olduğu için beklediğimizden farklı bir sonuçla karşılaşmamız gayet normaldir. Bu sefer başarıya ulaşıyoruz. Denklemin kökü olarak, bilgisayar yaklaşık 2.7912874 cevabını verir. Bu sayı aslında Y değeridir ve X değerini bulmak için karesini almamız gerekir. Problemin cevabı X = 2.7912874 olarak bulunur. Bu sonuç işlemi sağlamaktadır, sayının karekökü kendisinden 5 fazladır. Gerçekten kendinizi zorlamak istiyorsanız, kökü kendisinden 5 az olan sayıyı arayın. Şimdi battınız işte. Bu problemde ortaya, reel ve imajiner kısımlarıyla, kompleks sayılar çıkar. Aslında siz kompleks sayılarla başa çıkabiliyorsanız iterasyon metodu sizi yolda bırakmayacaktır. Ama böyle bir problemde gerçek bir kök olmadığı için bir sonuç elde edemezsiniz. Matematiksel iterasyon sanırım oldukça sıktı. Son bir örnekle bu konuyu kapatıyoruz. 10. satırdaki fonksiyonu şöyle değiştirin: DEF FN A(X) = SIN (X) Böylece X'in hangi değerlerinde SIN (X)'in 0'a eşit olduğunu bulabilirsiniz. Aslında bunun sonsuz sayıda çözümü vardır. Genel ifadeyse X = n * PI şeklindedir. Burada n herhangi bir tamsayı, PI de yaklaşık 3.14 olarak bilinen sabittir. İteratif Çözümler adlı programı X0=0 ve X = 1 değerleriyle başlatırsanız sıfıra bölme hatasıyla karşılaşırsınız. Bunun için 20. satırdaki değerleri X0=1 ve X = 3 olarak değiştirin. Kök olarak X = 3.14 kolayca bulunur. Daha önce de belirttiğimiz gibi başlangıç X değerlerinin işlem üzerinde büyük etkisi vardır. Örneğin X0 = 3 ve X = 6 olarak verilen başlangıç değerleriyle program çalıştırıldığında sonuç 6.28 bulunur. Fonksiyonun bir taslağı size hangi başlangıç değerlerinin seçilmesi konusunda iyi bir fikir verebilir.

Görsel İterasyon

Bu kadar matematik yeter herhalde. Bu işin bir de sanatsal yönü var demiştik. Çok basit bir program kullanarak oldukça karmaşık şekiller elde edeceğiz. Programın karışık görünmesi kullanılan sistemden değil Commodore 64 ile grafik çizmenin zorluğundandır. Program ekranın üstünden altına doğru noktalar koyar ve bu işlem soldan sağa doğru gerçekleştirilir. Her noktanın arasında ne kadar boşluk bırakılacağı ise bizim vereceğimiz bir formüle göre hesaplanacaktır. Ekranın koordinat sistemi soldan sağa doğru 0-319, yukarıdan aşağı doğru da 0-199 arasında değerler alabilir. Dış X-döngüsü her dikey çizginin yatay pozisyonunu ve içerideki Y-döngüsü de, X'e bağlı olarak hesaplanan S değerine bağlıdır ve bir sütuna koyulacak iki noktanın arasındaki mesafeyi hesaplar. Örneğin 40. satırdaki formülde S=X+1 yazarsak X=0'daki sütunda tüm noktalar birer aralıkla basılacaktır. X=1 olduğunda noktalar ikişer aralıklarla koyulacak ve X değeri arttıkça aralıklar da artacaktır. Böylece sütun sayısı 320'ye ulaşıncaya kadar bu işlem devam eder. Sonuç olarak S=X+1 fonksiyonunun grafiği, noktaları arasındaki boşluklar artan çizgilerden oluşur, ama göz aldanarak bu noktaları yana doğru açılan eğik çizgiler olarak algılar. Şekil-1'deki sonucu (ve diğer simetrik grafikleri) elde etmek için, verilen “İteratif Desenler” adlı programda bazı değişiklikler yapmanız gerekir. Bunlar zaten programın listesinde görülmektedir: 66. satırdaki REM komutunu ve yıldızları kaldırırsanız değişiklikler gerçekleşmiş olur.

PROGRAM ADI 2: ÇÖZÜMLER

00010 DEF 00020 X05z0:Xz1 00040 :DELTAs(X-X0)/C1-FNACXO)Y/FNA(X)) 00050 :X0sX 0005860 :XsX-DELTA 00070 :PRINT 00080 IF ABS(DELTA)>0.'0001 THEN 40 00090 END

Klavyeyle gezinmek için ← ve → tuşları.