Tekrar Eden İşlemler

Teki

Devamlı tekrar eden sıkıcı işlerimizi yapmaları için bilgisayarları ürettik. Bu ay tekrar eden fonksiyonların iki işlevini inceleyeceğiz: grafik iterasyonu ve matematik iterasyon. Tabii gene işin çoğunu bilgisayarınız yapacak. Öncelikle iteratif matematiğin temellerine şöyle bir bakacağız. Eğer sizin eğilimleriniz daha çok sanatsalsa bu bölümü atlayıp, fonksiyonların görsel olarak kullanıldığı diğer bölüme geçin. Şimdiden sayfaları çevirdiğinizi duyar gibiyim.

Matematiksel İterasyon

İterasyonun matematiksel tanımı şöyle yapılabilir: 1. X için bir değer alın,

2. Bu değeri yine X'e bağlı bir fonksiyonda yerine koyun,

3. Bir önceki adımda bulduğunuz değere dayanarak X için yeni bir değer alın,

4. Belirli bir kriter sağlanana kadar ikinci adıma dönüp durun. | Şimdi bu biraz soyut oldu. Bir örnekle konuyu daha iyi anlayacağınızdan eminim. Hesap makineleri bulunmadan önce sayıların kareköklerini hesaplamak için bir yöntem vardı. İşlemin defalarca yapılması ve sayıların iyice rafine edilmesi (iterasyon) sayesinde istenilen hassasiyette sonuçlar bulunabilirdi. İteratif yöntemlerle çözüm yapılmasını Sir Isaac Newton'a borçluyuz. Bu ne-

denle adı geçen sistem Newton Metodu olarak bilinir. Bir sayının (daha doğrusu herhangi bir ifadenin) karekökünü hesaplamak için Newton'un sekant sistemine dayanan bir metod kullanacağız. Bu metodu bilgisayarda uygulamak oldukça kolaydır. Başlangıç için 3'ün karekökünü bulalım. Matematiksel bilgilerinizden herhalde “3'ün karekökünü bulun” ifadesinin “Öyle bir X bulun ki, X'in karesi 3'e eşit olsun” ifadesine eşit olacağını biliyorsunuzdur. İşte bu ikinci ifadeyi cebrik olarak yazabiliriz: X*X=3. Bu ifadenin her iki tarafının da karekökünü alarak birinci ifadeyi elde edebilirsiniz: X = SQR(3). Buradaki SQR komutu BASIC'te karekök almak için verilen komuttur. Hesap makineniz veya bilgisayarınız hiç uğraşmadan bu ifadedeki X değerinin yaklaşık olarak 1.732'ye eşit olduğunu size bildirecektir. Biz birinci ifadenin karekökünü bulmak için biz iteratif metodu kullanacağız. X'in değeri ifadenin her iki tarafını da eşit yapmalıdır. İfadenin tüm terimlerini bir tarafa toplayarak sıfıra eşitliyoruz: X^2-3=0. Bu ifadeyi sıfıra eşitleyen X değerleri bizim fonksiyonumuzun kökleri olacaktır. Bu fonksiyon için aradığımız değerler 3'ün kareköküdür. Bu fonksiyonu BASIC'te şöyle tanımlayacağız: DEF FN A(X) = X^2-3. Eğer bilgisayara PRINT FN A(7) komutunu verirsek, ifadedeki X değerinin yerine 7 koyulur ve işlem gerçekleştirilip, sonuç ekrana yazılır. 7'nin karesi alınır ve bundan 3 çıkarılır. Çıkan sonuç 0 değil de 46'dır. Eğer PRINT FN A(1) komutunu verirsek (1'in karesi eksi 3)

—2 sonucunu alırız, ki bu sonuç da aradığımız değeri sağlamaz. Fonksiyonda 7 çok büyük, 1 de küçük bir değer vermektedir. Bizim aradığımız değer ise sıfırdır. Önce bu ifadeyi çözmek için kaba bir iterasyon yapalım: 10 DEF FN A(X) = X^2—3 20 FOR X = 1 TO 7 STEP 0.01 30 PRINT X, FN A(X) 40 NEXT X Sağ kolondaki sayıların akışını izleyin ve sayıların eksiden artıya geçtiği yeri bekleyin ve geçiş gerçekleşince aranan İşlemler

İteratif Matematik

RUN STOP tuşuna basın. Tahmin edeceğiniz gibi fonksiyonun çözümü eksiden artıya bu geçişin olduğu yerdedir. Ekranda X ve FN A(X)'in değerleri şöyle görünmelidir:

1.72999998 —7.10005499E-03 1.73999998 Yuvarlak değerlerle, FN A(1.73), —0.007'ye ve FN A(1.74)'de 0.028'e eşittir. Böylece bizim aradığımız X değerinin 1.73 ve 1.74 arasında yer aldığı görülür. Eğer iki basamağa kadar hassasiyet istiyorsak, 3'ün karekökünün 1.7 olduğunu söyleyebiliriz.

FN A(X) değerinin işaret değiştirdiği zaman, 20. satırdaki STEP komutundan sonra gelen sayıyı değiştirerek istediğiniz hassasiyette sonuçlar elde edebilirsiniz. Bu problemde basit bir algoritma kullanılıyordu ve anlaşılması kolaydı. Sekant metodu, iterasyon işlemini hızlandırmak için özel yollara başvurur. Bu metodun teorisini anlatmayacağız. Önerme aslında çok basittir, programa bakarak anlayabilirsiniz. Öncelikle X0 ve X'e başlangıç değerleri vermemiz gerekir. Bu iki değer birbirinden farklı olmak üzere herhangi iki sayı olabilir ama bu değerlere bağlı olarak işlemlerin hızı da değişecektir. 20. satırda 0 ve 1 değerleri seçilmektedir. İterasyonun döngüsü 80. satırda DELTA değerine bağlı olarak IF...THEN ifadesiyle yapılmaktadır. Eğer ABS(DELTA) değeri 0.0001'den küçükse döngüden çıkılır ve program biter. DELTA denen değer X'in şu andaki ve bir önceki değeri olan X1'e bağlı olarak değişmektedir ve hesabı şöyle yapılır: DELTA = (X - X0) / (1 - FN A(X0) / FN A(X)) 50. satırda X'in eski değeri X0'a atanır ve 60. satırda X'in yeni değeri DELTA'ya bağlı olarak hesaplanır. X = X - DELTA 70. satırda ise X ve FN A(X) değerleri yazılır. Eğer her şey yolunda gidiyorsa DELTA sıfıra yaklaşır ve X'in değerinin azalması yavaşlar. FN A(X) değeri sıfıra yaklaştıkça X'in değeri de aranan kök değerine yaklaşır.

Figür 1 : 8 = 1 + x

Diğer Problemler

Biraz önce tartıştığımız iteratif metod başka tür problemlere de uygulanabilir. Örneğin bir sayının küpkökünü almaya ne dersiniz? 40'ın küpkökünü bulmak için şu tanımı yazın: X Daha önce yaptığımız gibi bu ifadeyi düzenlersek ve tüm terimleri bir tarafa toplarsak: X^3-40=0 Şimdi 10. satırdaki ifadeyi DEF FN A(X) = X^3-40 olarak değiştirin ve programı çalıştırın. Program X'in değeri yaklaşık olarak 3.41995189 olduğunda yeterli has-

PROGRAM ADI 3: DESENLER

OOOOL REM 6 ön RK BE 0k DE
00002 REM DESENLER
OO003 REM Wu (C)1990 nu
O0004 REM Hu ..
00005 REM #4 COMMODORE DERGİSİ!
00006 REM ör m ük ük öt dt
00010 1000:REM GRAFİK AYARLAMALARI
<055>
<140>
<196>
<003>
<060>
<045>
<124>
<234>
<223>
<242>
00030 FOR Xs0 TO 319
00040
00050 FOR Ys0 TO 199 STEP $
000860 GOSUB 2000:REM PİXEL'İ X,Y'YE KOY
00065 REM SİMETRİK SEKİLLER İCİN BU
ş SATIRI EKLEYİN:
00066 REM Hum :
<052>
<026>
<028>
<196>
<072>
<112>
<179>
<129>
00070 NEXT Y
“00090 GET A$:1F THEN 90
00100 GOSUB 3000 :
00110 END ; $
00950 REM 90 öğ de arat
00955 REM «Hu
00960 REM Hu BIT ..
00970 REM xu MODU AYARLAMALARI! BE
00980 REM «un . .
00990 REM BİT AC-KAPA İSLEMLERİ
00992 REM Hu . Bu
000099 REM a 06 06 00 ük ön 40 Öf 6 ÖK 8
01000 DEF FNSB(N)-PEEK(MM) OR 24N
O1V10 DEF AND
-<153>
<L74>
<000>
<080>
<154>
<076>
<003>
<228>
<2286>

VİC O'İNCİ REGİSTER

01030 REM 8192'YE KOYUNU
(VIC REGİSTER 17'NIN 3. BITİ 1 YAP
) <180>
O1040 MM,FNSB(3) <208>
REM
(VIC REGİSTER 17'NIN 5S. BITI 1 YAP
)
O1080 MM,FNSB(S) <249>
01120 REM
002000 AND 7)
“03010 HH, FNRBC3)

sassiyette bir çözüme ulaşıldığını bildirir. Bu sayı da 40'ın küpköküne oldukça yakındır. X için öyle bir değer bulun ki SIN (X) = TAN (X^3) olsun. Bu işlem için de aynı sistemi kullanabilirsiniz. Önce ifadeyi yazın, sonra da düzenleyin:

SIN (X) = TAN (X^3) SIN (X) - TAN (X^3) = 0 ve bu ifadeyi programda 10. satıra yazın: DEF FN A(X) = SIN (X) - TAN (X^3) ve programı çalıştırın. Çabucak X = 0.729 radyan olduğunu görürsünüz. Hangi sayı kendi karekökünden 5 fazladır? Cevabı yine aynı sistemle buluyoruz: X = SQR (X) + 5 veya

<236>
<ozL>
<054>
<154>
01070 BASEs8192:REM BİT-HAR. BASLANGICI
01080 REM HARITASINI
01090 GOSUB 4000
OL100 REM RENK CO VE Ci'i
O1110 <189>
#EHEKRANI RENKLE DOLDURuwu
01130 FOR TA <145> |
01140 RETURN Lİ
01145 : <105>
01150 REM
01160 REM #u ra MN is <166>
01170 REM «s4 AC um <214>
01180 REM wu <088>
01190 REM NN
t
02010 ek
KC Fs
02020 POKE -
02030 RETURN *
02970 REM <167) 3
02980 REM uu. ea 0
02990 REM BIT HARİTASINI RESETLE xu <16
02991 REM KA | <188> -
03000 k
<038>
<044>
# tü
b
<056)> |
<053> |
(230>
<169>
<048>
<225>
<2242
<160>
<116>
03030 RETURN
03960 REM
03965 REM Hu . MEL
03970 REM BIT TEMİZLE. ww
03980 REM
04000 FOR TO 828443
04010 READ B:POKE M,B
O40Z20
04030 NEXT
O4040 IF CK<>5133 THEN PRİNT «4060-4110
ARASINDA DATA b
04050 SYS
O40860 DATA 76,68,3,0,32,31,64,0
DATA. 173,63,3, 133,251,173,64,3
04080 DATA 133,252,174, zi
252, 202,48, 208, 244, i 72,66
96
04090 DATA.
04100
04110 DATA

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

TPHENOKTASI