Emre S. Tasci emre.tasci@hacettepe.edu.tr
GNU Octave'da değişkenler belli başlı iki ana sınıfa ayrılabilir:
Mühendislik hesaplarında yoğun olarak sayılarla işlem yapacağımızdan, dönem sonuna kadar string değişkenlerini bir kenara koyuyoruz (yine de çıktılarımızı güzelleştirmek için, çok gerekli olmasa da, aralarda kaçamak yapacağız 8).
Sayısal değişkenler, pozitif, negatif, kompleks, rasyonel, çok büyük, çok küçük değerler olabilir.
Değişkenlerin alabileceğin minimum ve maksimum değerler hakkında şu şekilde bilgi alabiliriz:
realmin, realmax
intmin, intmax
eps
Daha emeklemeden koşmaya başladık, yukarıdakiler karışık geldiyse, sıkıntı yok, sâfi teknik bilgidir rahatlıkla geçebilirsiniz. Herhangi bir komut hakkında bilgi almak içinse help
yazıp, komutu girin, örneğin:
help eps
... demek ki eps
komutu bize makinemizin hassasiyetini veriyormuş.
Değişkenleri tanımlamak, ya da programlama diliyle söylersek, onlara "değer atamak" için =
operatörünü kullanırız:
a = 5
b = 3.14
bir de şuna bakalım:
c = 5.0
Yukarıda a
'yı tam sayı olarak tanımladık, b
'yi ise ondalıklı sayı, Octave da o şekilde kabul etti. Ama c
'yi tam sayı olarak değil de, ondalıklı sayı olarak tanımlamaya kalkınca, hiç oralı olmadı. Dahası:
3.4 - 1.4
şeklinde iki ondalıklı sayıyı çıkarınca da, sonucu ondalıklı cinsten değil de, tam sayı cinsinden verdi. Bir sayının tam sayı mı, yoksa ondalıklı sayı mı olduğunun kararını neye göre veriyor? (cevap: aslında biz özellikle belirtmediğimiz sürece, hepsini ondalıklı olarak tutuyor, nasıl belirteceğimizi de ileride göreceğiz ama şimdilik hiç sorun yok 8)
Peki ya bu nasıl bir şey?
d = pi
pi
yi halihazırda biliyormuş! Peki hassasiyet az değil mi? Değil. Aslında sayıyı kendinde tuttuğu hassasiyet, bize gösterdiği hassasiyetle aynı değil (çok karmaşık şeylerle ekran dolmasın diye bize azını gösteriyor). Eğer daha hassas görmek isterseniz format
komutu size göre:
format long
d
"normal" duruma format short
ile dönebiliriz.
format short
d
Daha da hassas gösterimi mümkün ama bize şimdilik bu kadarı da yeter. Aklınızda tutmanız gereken, sayının değerinin ille de size sunulduğu hassasiyette olmadığı...
Hazır pi
yi görmüşken, birkaç tane daha özel matematik sabit tanımlı olarak geliyor, bunlar: Euler'in sayısı (e
), sonsuz (inf
), -1'in kökü (I
), ama daha onlara da var (sabır!.. ;)
a
'yı tanımladık, peki x
'i a
cinsinden tanımlayıp, sonra a
'nın değerini tekrar tanımlayalım: bakalım x
'in değeri değişecek mi?
a = 5
x = a
a = 3
x
(bir değişkenin sadece adını yazıp çalıştırdığımızda, o değişkenin değeri yazılır).
Octave'da pek çok çeşit işlem türü vardır, bunlardan atamayı, çıkartmayı ve hatta fonksiyonu gördük bile (hangi fonksiyonu gördük acaba?). Aritmetik işlemleri çoklukla kullanacağız, fonksiyonları da önümüzdeki haftadan itibaren yavaş yavaş kullanmaya başlayacağız.
3 + 4
a
a + 4
b = 4
a + b
Görüldüğü üzere, değişken olsun, değer olsun, iki çeşit birbirleriyle güzelce harmanlanabiliyor, işleme girebiliyor. Çıkarma ve toplamadan başka çokça kullanacağımız diğer başlıca işlemler:
*
/
**
(^
de kullanılır)3 * 5
3 / 5
5**3
5^3
Skaler işlemlerde nasıl çıkarmayı toplama, bölmeyi çarpma cinsinden yazabiliyorsak, kök almayı da üs alma cinsinden yazabiliriz. Demek istediğim:
5 + (-3)
3 * (1/5)
125 ^ (1/3)
İşlemleri hızlandırmak adına, üs ve özelde karekök alma işlemlerine ayrı komutlar atanmıştır:
power(5,3)
sqrt(25)
nthroot(125,3)
Bu türden "yeniden/fazladan" tanımlamaların sebebi, sıklıkla kullanıldığı için, "optimize" edilmiş olmalarıdır (bu, 5'in karesini hesaplamak için power(5,2)
yazmak yerine, hatta 5^2
yazmak yerine kısaca 5*5
yazmaya benzer 8)
Örnek:\ $$a+\frac{b+c}{{(d+e)}^2}$$ işlemini elde ve Octave'da yapın -- birbirini tutuyor mu? ;)
a = 5; b = 3; c = -4; d = 6; e = 1;
(Bir satırda birden fazla işlem yaptırmak istediğimizde, işlemleri ;
ile ayırabildiğimiz gibi, bunu aynı zamanda çıktıyı "bastırmak" (suppress) için de kullanıyoruz).
a + (b+c) / (d+e)^2
Ama yine de işleri garantiye ve (grupları paranteze) almak her zaman iyidir:
a + ((b+c) / (d+e)^2)
# 1
a = 5
# 2
b = 3
# 3
c = a + b
# 4
c / 2