25 Kasım 2011 Cuma

Matlab'ın haşin yüzü

Matlab'la yollarımızı ayırdığımız, mutluluk ve hüznü  (An itibariyle aklıma bir sorunun cevabında bir hata yaptığımı hatırlamamla hüzün kısmını daha ağır bastığını ifade etmeliyim.)  bir arada yaşadığımız şu günde, biraz açıklama yapmayı gerekli buluyorum. Bu blog, en azından matlab konusunda amacını yerine getirememiştir. Bildiklerimi bloga yazacak ve dahi bilgisayarı açacak kadar vaktim olmadığından dolayı, çırpınışlarımın yalnızca buraya yansıyan 8 posttan ibaret olmadığını bilmelisiniz sayın kediseverler. Çırptım, çırpındım, karıştırdım, sana kek yaptım .Nitekim cs hayattan önemli mi? Değil.

19 Kasım 2011 Cumartesi

":" kullanarak adresleme

Va(:), Va'nın bütün elemanları demektir.
Va(m:n) m'den n'e kadar olan elemanları
A(:,n) n. kolondaki bütün elemanları
A(n,:) n. satırdaki bütün elemanları
A(:,m:n)
A(m:n,:)
A(m:n,p:q)


A(1,2:end) 1.satır, 2.sütun'dan son sütuna kadar. (end fonksiyonu)

A(2)=5 dersen, A2nın ikinci elemanı 5 olur ki.
Daha önce belirtilen herhangi bir şekilde adresleme yaptıktan sonra, onu bir array'e eşitlediğinde, eleman değiştirme işlemi gerçekleşir.


İlginç:

d=[1,2,3;4,5,6]
d =
     1     2     3
     4     5     6

d(1:end)
ans =
     1     4     2     5     3     6


d(2,:)=[4 5 6]
d =
     1     2     3
     4     5     6

 d(2,:)=[4 5 6 7]
??? Subscripted assignment dimension mismatch.

d(2,:)= 0
d =
     1     2     3
     0     0     0

Indeks

Index: array'deki elemanları ifade etmek için kullanılan bir sayıdır.
Array'den bir değeri çağırmak için;

A=[2,13,16]

A(1,2)
ans =
    13

indeksleme 1'den başlar.


Kısa kıcacık bir özet, bir hatırlatma

() adreslemede
[] array tanımlamada kullanılır.

Built-in fonksiyonlarını kullanarak ön değer atama (initialization)

Ön değer atama için matlab fonksiyonları;

zeros(n)
zeros(n,m)

x=zeros(2)
x =
     0     0
     0     0


ones(n)
ones(n,m)

ones(2,3)
ans =
     1     1     1
     1     1     1


eye(n)     identity matrix
eye(n,m)

eye(3,4)
ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0

eye(3,2)
ans =
     1     0
     0     1
     0     0

Vector Oluşturmanın Yolları

Colon Operator nedir?
colon operator   first:increment:last

x=1:2:10
x =
     1     3     5     7     9

2'yi yazmazsan(tabiki illa 2 olmak zorunda değil, aralığı belirtiyor), aralığı 1 alır.

y=0:0.5
y =
     0

Linspace (x1,x2,N) satır vektörü

x=linspace(10,20,5)
x =
   10.0000   12.5000   15.0000   17.5000   20.0000

Logspace(x1,x2,N) logaritmik olarak eşit aralıklı noktalar

N yazılmadıysa, 100 anlaşılır.

Bir array'i tanımlama

1-A=[2 13 16]

2-A=[2,13,16]

; der ki yeni bir satır geliyor.

3- B=[2,3,4;5,6,8;7 9 13]
    B =
     2     3     4
     5     6     8
     7     9    13

4-Concetanating; bir array'i  diğeri cinsinden tanımlama.

alt alta
C=[A;B]
C =
     2    13    16
     2     3     4
     5     6     8
     7     9    13

yan yana
D=[C C]
D =
     2    13    16     2    13    16
     2     3     4     2     3     4
     5     6     8     5     6     8
     7     9    13     7     9    13

Depreme Dayanıklı bir Matlab için

Bir program bir input olabilir. ">>"la başlayan command line'ı bul, başla yazmaya.
Eğer yazdığın komut'un sonuna, ";" eklersen hesaplamanın sonucu, command window'da gösterilmez.
clc dedin mi command window'a hayatına temiz bir sayfayla devam eder. clear yazarsan, workspace arkadaşımız (hani kedileri seven, bizden biri) evini siler, süpürür, bal dök yala, ne variable kalmış, ne de onun adı.

Diyleim ki gorilin biri seni kovalıyor, ne dersin "Heeeelp!!". Mesela help elfun yazdın mı sana bütün matematiksel fonksiyonları verir. Helpdesk dersin yardım ekranını açar. Ya da helpwin dersin çeşit çeşit komutları, fonksiyoları sıralar ki, ohh seç beğen al. lookfor ... yazarsın, ... nın bulunduğu bütün m. fileları, fonksiyonları arar, bulur, getirir önüne.
Demo yazarsın, sana özel öğretmen tutarlar, matlab dersi verir.

Variable(Değişken) nedir?

Bir dizi numara yahu, bakma öyle gizemli durduğuna. Adını koyar, numerik değerleri de peşine takarız ve bir variable doğar. Assignment command çalıştırmamız ile variable work spacede yerini alır. Kerata ya, sonraki cebirsel hesaplamalarımıza yardımcı olur. Aslında variable hafızadaki ayrılmış bir bölgenin yeridir. Variable ad koymanın da bir adabı vardır. Örneğin boşluk bırakıp yazamazsın iki kelimeyi, "_" koyman lazımdır. Anlamlı isimler koymak lazım ki sonra hatırlayabilelim. Numaralar, harfler ve "_" kullanılabilir. "Ha name demişim, ha Name" deme, matlab'ın gözleri keskindir. Ve her variable, bir arraydır.
single number array, scalar,
row array, row vector,
array of n rows x m columns, matrix,

Variables row ve column numarasıyla indekslenir.

Matrix'e girdim!

Bu blogun ilham kaynağı, baş belası ama bal tatlısı Matlab, 4. kuşak programlama dillerinden biridir. Matematik fonksiyonlarını ve komutlarını über yetenekleriyle birleştirir ve bize sonucu verir. Matlab'da Matlab komutlarını içeren programları(scriptleri) çalıştırır ve geliştiririz. Matlab, üst düzey bilgisayar dilleri için tanımlanmış olan formal compilation, linking/loading and execution process'leri içermez.

Önce övelim sonra kötüleriz. Şimdi bu matlab kolay kullanılır. Editor'u olsun, Debugger'ı olsun, workspace browserı ve online manualları olsun, hepsi hizmetimizdedir. Sonra platform independence'ı vardır. Yanisi, hangi platform'da yazarsan yaz, bütün platformlarda çalışır (platform'dan neyi kastettiğimden emin değilim, emin olmadığımdan da emin değilim). Sonra önceden tanımlanmış fonksiyonları kullanmamıza izin verir. Son olarak diyelim sin 30'u çizceksin, uğraşma kardeşim gel yaz matlab'a o yüzden milisaniyede.

Dedikodu zamanı; bu matlab var ya bazen işi öyle ağırdan alır ki, sabırsız bünyelere işkencede kullanılabilir. Ama bir sorun bakalım nden yavaşsın diye. Şimdi programlar aletden bağımsız bir p coduna derlendikleri için ve bu p codu program çalıştırıldığında çevrildiği için, programların çalışması yavaş olur. Ayrıca bu matlab kendini bulunmaz hint kumaşı sanır, öğrenci edition'ı bile cep yakar. (Torrent!!)

Matlab'ın iç yüzü

Command Window denilen ortadaki boşluk, komutları yazdıkça dolar, dolar, kimi zaman hata verir, üzer, şaşırtır, kızdırır, kimi zaman umutsuzca yazılan bir komutun çalışmasıyla neşeye boğar, sizi kucaklar.

Command History dediğin var ya hiç unutmaz, asla affetmez.

Workspace tanımladığın değerleri, minleri ve maxları, isimlerini (yanında ne olduğunu gösteren sembolüyle) biriktirir, sen değiştir dedin mi değiştirir, uysal bir tiptir, kedileri sever.

Current Folder başlığı altında yazdığın scriptlerden fonksiyonlara kadar ne varsa başlığıyla sıralanır ki, canın istediğinde bir tıkla açabilesin.

Programlamaya giriş niteliğinde pek önemli ders

Programlama belirli bir problemi çözmek için bir nevi araç oluşturma işlemidir.

Main memory, aktif olarak kullanılan programların ve verilerin depolandığı birincil depolama alanına denir. Bildiğin RAM'dır bilesin, aklın hard diske gitmesin.

CPU: gizemli duruşlu bu üçlü program emirlerini yürüten chip'dir. Bildiğin işlemci, Intel Pentium 4 gibi. Dur bakiyim benimki neymiş; Intel Core Duo.

Operating System (bildiğin işletim sistemi yahu (mesela mesela; Windows XP veya 2000, Unix, Linux, Mac OS)), makinede yaptığımız bütün aktiviteleri kontrol eder. Kullanıcı arayüzü sağlar. Main memory ve CPU'yu gibi kaynakları yönetir.

Şimdi de Software Tools'dan bahsedelim. Bunlar; spesifik proglemleri çözmek için oluşturulmuş ticari programlardır.
1-Word Processors: yazı ve grafik girmenizi, düzenlemenizi sağlayan programlardır. Microsoft Word gibi. Şu anda da bir yazı girdiğime göre, blogger'da da bir word processor kullanılmış demektir. (devbirkedinin bilgisayar bilgisi kendi işini görecek kadardır. Lütfen ahkam kesmelerine aldırış etmeyiniz.)

2-Spreadsheets: Çizim kabiliyeti ile yardımcı olur bizlere.

3-Database Management Programs: Büyük miktardaki verileri, saklamak, kolayca geri almak, incelemek ve biçimlendirmek için kullanılan programlar, Access, ORacle, MySQL gibi.

Ve son olarak, 4-Computer-aided desing(CAD) packages: Gerçek dünyada objelerin bilgisayar modellerini tanımlamanızı sağlar ve genelde mühendislik uygulamaları için kullanılır.
İtiraf ediyorum: tam anlamıyla anladığım yalnızca Word Processors oldu. Biliyorum yalnız değilim.

Bilgisayar  numaralarda, yazılara, grafiklerden videolara bütün bilgileri saklıyor. Peki ama nasıl?
Bütün bilgiler dijitalleştirilmiş(sayısallaştırılmış) şekilde, parçalara bölünür ve numaralar olarak temsil edilir. Bilgiler sayısallaştırıldıktan sonra, Binary Number System kullanılarak hafızada saklanır. Bir binary digit'e bit denir. Bir bit ya 1 ya da 0'dır. Bitlerin permütasyonu değerleri saklamak için kullanılır. Her bir bit permütasyonu, belirli  bir şeyi temsil eder. N bits, 2 üzeri N ögeyi temsil eder.
Main memory yani RAM, birçok hafıza hücresine bölünmüştür. Her hafıza hücresi, tamamen onun olan, yalnızca onu tanımlayan numerik bir adrese sahiptir. Her hafıza hücresi(memory cell), genellikle 8 bit'i (1 byte) saklar. Yüksek değerler, ard arda gelen hafıza bölümlerinde saklanır.

Verileri saklamak ve yönetmek için iki yol vardır; Analog ve Digital.
Digital saklama yönteminde, bilgi parçalara bölünür ve her parça yarı şekilde ifade edilir. Boşluklar, basamaklar ve noktalama işaretleri dahil her karakter bir sayı olarak saklanır.

Son olarak bilgisayar dilinden bahsedeceğiz. Program dilleri, programcının bilgisayardan istenilen şeyi bilgisayarın anlayacağı şekilde anlatmasını sağlar. Program dillerinin gücü, açıklığı ve farklı işlemciler tarafından kullanılabilirliği (portability) önemlidir. Her tür işlemci (CPU) kendi özel makine diline sahiptir. Bir işlemci türünde bir programın çalıştırılabilmesi için, onun makine diline çevrilmesi lazımdır. Bu işlem çeşitli şekillerde yapıalbilir. Mesela mesela compiler denilen bir program kullanırız. Bu program, kaynak kodu, hedef dile çevirir ki bu hedef dil genellikle belirli bir işlemci türünün makine dilidir.

Bir dilin syntax kuralları, bizim sembolleri, kelimeleri ve belirteçleri (identifiers) nasıl yazacağımızı belirler. Bir program ifadesinin Semantics'i ise, o ifadenin programdaki amacını veya rolünü ifade eder. Bir program syntactically doğru olabilir ama bu onun mantıksal olarak yani semantically doğru olduğunu göstermez. Yanisi, bir program bizim dediğimizi yapar, ne demek istediğimizi değil.

Her son olarak dediğinde bil ki o son olmayabilir. Programlar 3 tip error verirler.
1- Syntax hataları (veya diğer temel problemler compile-time errors gibi) Şekilsel hatalar yani. Üstündeki giydiğin eteğe yakışmamış gibi bir durum.
2- Programı çalıştırırken bir problem oluşabilir. Örneğin 0'a bölmeyi deneme programın anormal bir şekilde sonlanmasına sebep olur.  (run-time errors.)
3-Program çalışabilir ama yanlış sonuçlar üretir. Bunun sebebi yanlış formül kullanma olabilir. (logical errors)

Buraya kadar dayanabildiysen okur, seni yerime sınava sokmayı düşünüyorum, haberin ola!