TEMEL BİLGİSAYAR BİLİMLERİ Gr. 1 Yrd. Doç. Dr. Ahmet SERBES GEÇEN DERSTE DERSĠN ĠŞLEYĠŞĠ AMAÇ KAPSAM ARA YÜZ DOSYA OLUŞTURMA KĠŞĠSELLEŞTĠRME MATLAB TEMELLERĠ YARIM VE KĠŞĠSELLEŞTĠRME BETĠK OLUŞTURMA – disp( ) 2 Temel Bilgisayar Bilimleri Gr1 27.09.2011 BU DERSTE Değişken oluşturma Skaler Diziler, vektörler Matrisler Aritmetik işlemler Bazı fonksiyonların kullanımı Operatörler Ġlk değer verme Ġndeksleme Örnekler 3 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Değişken Türleri MATLAB zayıf tip bir dildir Değişkenleri başlatmak gerekmez! (Örn. C, C++, C# gibi dillerde double var = 3.84;) MATLAB bir çok değişken tipini destekler. Bunlardan en çok kullanılanları: >>3.84 64 bit double >>‘a’ 16 bit char Karşılaşacağımız bir çok değişken double veya char cinsinden sayıların dizisi, vektörü veya matrisi olacak! Diğer sayı tipleri de desteklenmektedir: komplex, sembolik, 16 veya 8-bit tamsayılar, …vs. 4 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Değişkenleri İsimlendirmek Bir değişken oluşturmak için değişkene bir isim verilir, >> var = 3.14 >> string = ‘hello world’ Değişken isimleri Birinci karakter mutlaka HARF olmalıdır! Ġlk karakter sayı olamaz! Ġlk karakterden sonra sayı, harf, _ ve bunların kombinasyonları Büyük küçük harfe duyarlı: var ile Var birbirinden farklı Gömülü değişkenler var. Bunları kullanmak tavsiye edilmez!! i ve j birim sanal sayıyı göstermektedir. pi değişkeni 3.1515926… ans en son atanan değişkeni gösterir (hesap makinesi gibi) Inf ve –Inf pozitif ve negatif sonsuz sayılarıdır. NaN ‘Not a Number’ TÜRKÇE karakterler yok! 5 ç, ğ, ı, ö, ş, ü, Ç, Ğ, Ġ, Ö, Ş, Ü kullanmayacağız. Temel Bilgisayar Bilimleri Gr1 27.09.2011 Skalerler – Komut Satırı İşlemleri Bir değişkene değer atamak için: >> a = 10 Çalışma alanında görülür! Bir değişken diğer bir değişkenin ve sayıların fonksiyonu olabilir: >> c = 1.3*45-2*a a değişkenine ilk değer atanmış olmalı Çıkışı tekrar görmek istemiyorsak: 6 >> d = 13/3; Temel Bilgisayar Bilimleri Gr1 27.09.2011 Diziler (Arrays) Diğer programlama dillerinde olduğu gibi, MATLAB’de diziler önemli bir parçayı oluşturmaktadır. Ġki tip dizi var: 1. 2. Elemanları kompleks ya da double olan matris Objelerden oluşan hücre dizileri MATLAB programlama dilinin gücü dizi, vektör ve matrislerle çalışmanın çok kolay olmasından gelmektedir!! 7 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Satır Vektörleri – Diziler Satır vektörü: virgül veya boşluk ile ayrılmış, köşeli parantezler içinde bulunan sayılar! >> satir = [1 2 5.4 -6.6] >> satir = [1, 2, 5.4, -6.6]; Komut satırında: Çalışma alanında: 8 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Sütun Vektörleri – Diziler Sütun (column) vektörü: köşeli parantez içinde ve noktalı virgülle ayrılmış değerler dizisi >> sutun = [4; 2; 7; 4] Komut satırı: Çalışma Alanı: 9 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Boyut ve Uzunluk Bir satır vektörüyle sütun vektörü arasındaki farkı Çalışma alanına bakarak Komut satırında o değişkenin ismini yazarak size( ) fonksiyonunu kullanarak Herhangi bir dizinin uzunluğunu bulmak için ise 10 Temel Bilgisayar Bilimleri Gr1 27.09.2011 MATRİSLER Matrisler diziler gibidir. Eleman eleman oluşturulabilirler >> a = [1 2; 3 4] Dizileri birleştirerek de oluşturulabilirler (boyut önemli!) >> a = [1 2]; >> b = [3 4]; >> c = [5; 6]; >> d = [a; b]; >> e = [d c]; >> f = [ [e e]; [a b a]; >> str = [‘Merhaba, bu ders’ ‘TBB2011’]; 11 stringler karakter vektörleridir! Temel Bilgisayar Bilimleri Gr1 27.09.2011 save/clear/load Değişkenleri bir dosyaya kaydetmek için save komutunu kullanabiliriz >> save MyFile a b Çalışma alanındaki değişkenleri kaldırmak (silmek) için >> clear a b çalışma alanına bakın. a ve b değişkenleri gitti! Kaydedilmiş değişkenleri geri çağırmak için: >> load MyFile a ve b değişkenlerini MyFile.mat isimli dosyaya kaydeder. MyFile.mat dosyası bulunduğunuz dizine kaydedilir Ġlk açılıştaki bulunulan dizin \MATLAB dizinidir. çalışma alanına bakın! a ve b değişkenleri geri geldi! Bütün değişkenleri kaydetmek ve geri çağırmak için, örn 12 >>save myenv; clear all; load myenv; Temel Bilgisayar Bilimleri Gr1 27.09.2011 Örnek: Değişkenler Şimdiki tarih ve saati alıp kaydedelim 13 start diye bir değişken oluştalım clock() fonksiyonunu kullanalım start değişkeninin boyutu nedir? Satır ya da sütun vektörü mü? start değişkeni ne içeriyor? help clock yazıp clock() fonksiyonunun ne işe yaradığını öğrenelim start değişkenini bir string’e çevirelim. datestr() fonksiyonunu kullanarak startString isimli yeni bir değişken oluşturalım start ve startString değişkenlerini startTime isimli bir .mat dosyasına kaydedelim >>help clock >>start = clock; >>size(start) >>help datestr >>startString = datestr(start); >>save startTime start startString; Temel Bilgisayar Bilimleri Gr1 27.09.2011 Temel Skaler İşlemler Aritmetik işlemler (+, -, *, /) Üstel (^) >> 4^2 >> (3 + 4*i)^2 >> (7 + 3*j)^(2+i) Çarpma işlemi parantezler ile yapılamaz! >> 7/45 >> (1+1)*(2+1) >> 1 / 0 >> 0 / 0 >>3(1+0.7) hata verir Komut satırını temizlemek için 14 >>clc Temel Bilgisayar Bilimleri Gr1 27.09.2011 Hazır Fonksiyonlar MATLAB’de kendi fonksiyonlarımızı yazabiliriz. Bununla birlikte oldukça fazla miktarda hazır fonksiyon vardır! Fonksiyonlar parantez içinde çağrılır. Böylece parametreler çağırılabilir: 15 >> sqrt(2) >> log(4), log10(0.7) >> cos(pi/4), atan(-.8) >> exp(3+i) >> round(1.2), floor(5.49), ceil(2.001) >> angle(i); abs(3+4*i) Temel Bilgisayar Bilimleri Gr1 27.09.2011 Örnek: Skalerler Bir betik oluşturalım (geçen derste öğrenmiştik). Öğrenme katsayınız 1.3 gün olsun. Önce 1.3 günde kaç saniye varsa bunu tau isimli değişkene atayalım. Bu ders 14 hafta sürmektedir. 14 haftada 4’er saatteki saniye sayısı dersBitisi değişkeni olsun. Aşağıdaki denklem de sizin MATLAB öğrenmenizin zaman içerisindeki fonksiyonu olsun dersBitisi sonunda ne kadar matlab öğrenmiş olacağız? Bu da dersSonuBilgisi değişkeni olsun. (exp( ) fonksiyonu!) dersSonuBilgisi değişkenini kullanarak aşağıdaki yazıyı komut satırına yazdıralım: 16 Ders sonunda %X kadar MATLAB bileceğim. Ġpucu: Bir sayıyı string’e çevirmek için num2str() fonksiyonu kullanılabilir. Temel Bilgisayar Bilimleri Gr1 27.09.2011 Transpoze Transpoze operatörü bir satır vektörünü sütuna, sütun vektörünü ise satır vektörüne çevirir: >> a = [1 2 3 4+2*i] >> transpose(a) >> a’ >> a.’ ‘ operatörü vektörlerin Hermityan-transpozesini verir. Yani bütün kompleks sayıları konjügesini de alır! Vektörler gerçel sayılardan oluşuyorsa .’ ile ‘ aynı sonucu verir! 17 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Toplama ve Çıkarma Toplama ve çıkarma işlemler eleman-eleman yapılır. Boyutlar tutmalıdır (biri skaler değilse) Satır ve sütun vektörleri toplanamaz! Transpoze işlemi boyutları uyumlu hale getirebilir. >> c = satir + sutun’ >> c = satir’ + sutun Bir vektörün elemanlarını toplamak ya da çarpmak için: 18 >> s = sum(satir); >> s = prod(satir); Temel Bilgisayar Bilimleri Gr1 27.09.2011 Eleman-Eleman İşlemler Skalerler üzerinde çalışan hemen bütün fonksiyonlar diziler üzerinde de çalışır: >> t = [1 2 3]; >> f = exp(t); denktir f = [exp(1) exp(2) exp(3)]; Fonksiyonların diziler üzerinde nasıl bir işlem yaptığını görmek için help dosyasına bakılabilir. Vektörlerde çarpma ve bölme işlemleri iki modda yapılabilir 19 Eleman-eleman Standart Temel Bilgisayar Bilimleri Gr1 27.09.2011 Eleman-Eleman İşlemler Eleman-eleman işlem yapmak için nokta kullanılır: . (.*, ./, .^). Her iki tarafın da boyutları uymalıdır. >> a = [1 2 3]; b = [4; 2; 1]; >> a.*b, a./b, a.^b hepsi hatalı >> a.*b’, a./b’, (a’).^b, a.^(b’) hepsi doğru HATA herhangi bir boyut olabilir 20 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Standart İşlemler Çarpma işlemi standart ya da eleman-eleman olabilir. Standart çarpma işlemi (*) lineer cebirde öğretilen matris ve/veya vektör çarpım işlemidir. Ġki matrisin çarpılabilir olması için boyutları (𝑁1 × 𝑁2 )×(𝑁2 × 𝑁3 ) olmalıdır. Standart ^ işlemi sadece kare matrislerde yapılabilir. Sağ ve sol bölme işlemleri (/ \) tersiyle çarpmakla aynıdır. Öneri: Sadece tersiyle çarpın. Örn: C = B*A^(-1) üstel almak için kare olmalı 21 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Otomatik İlk Değer Vermek Birlerden, sıfırlardan ya da rasgele sayılardan oluşan, ilk değer verme işlemi için: >> o = ones(1, 10); >> z = zeros(42, 1); 5x5’lik rasgele sayılardan oluşan kare matris ([0 1] arasında düzgün dağılımlı) >> n = nan(4, 6); 22 42x1’lik bir sütun vektörü >> r = rand(5, 5); 1x10’luk bir dizi (satır vektörü) 4x6’lık NaN’lardan oluşan bir matris. Ġlk değer verilmemiş değişkenden oluşmaktadır. Temel Bilgisayar Bilimleri Gr1 27.09.2011 Otomatik İlk Değer Vermek Lineer olarak hizalanmış satır dizisi oluşturmak için: >> a = linspace(1, 10, 4); >> b = linspace(10, 1, 4); 10 ile 1 arasında lineer azalan 1x4’lük dizi. b = [10 7 4 1] İki nokta üst üste (:) operatörü de kullanılabilir. >> c = 1:2:10 1’den 10’a kadar arasında ikişer-ikişer artan dizi. c = [1 3 5 7 9] En çok kullanılan operatörlerden biri. >> d = 1:10 1 ile 10 arasında (10 dahil) lineer olarak artan 1x4’lük dizi. a = [1 4 7 10] Eğer artış miktarı belirtilmemişse birer-birer artar. d = [1 2 3 … 10] Logaritmik olarak hizalanmış satır vektörü üretmek için 23 >> help logspace Temel Bilgisayar Bilimleri Gr1 27.09.2011 Öğrenme Eğrisini Çıkarmak Bir önceki örnekte 0’dan dersBitisi’ne kadar olan zaman aralığından 10000 parça örnek alın. Bu zaman değerlerinin her biri için öğrenme denklemini kullanarak ne kadar öğrendiğinizi hesaplayın. Öğrenme denklemi: 24 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Dizi İndeksleme MATLAB’de dizilerin indeksi 0’dan değil 1’den başlar. a(n) a dizisinin n. elemanı. Ġndeks parametresi bir vektör olabilir! Örneğin: 25 Temel Bilgisayar Bilimleri Gr1 27.09.2011 Matris İndeksleme Matrisler iki şekilde indekslenebilirler. Tek parametreli Ġki parametreli Matris indeksi tek parametre veya iki parametre olabilir Matrisin indeksini alt matris olarak da tanımlayabiliriz! Örnek: 26 >> a = rand(5) >> a(1:3, 2:5) >>a([1 3 5], [1 4]); Temel Bilgisayar Bilimleri Gr1 27.09.2011 Matris İndeksleme Bir matrisin satır veya sütun(lar)ını alabiliriz. >> d = c(1, :); d = [12 5]; >> e = c(:, 2); e = [5; 13]; Matrisin satır veya sütunlarını değiştirebiliriz. 27 >> c(2, :) = [3 6]; c = [12 5; 3 6]; Temel Bilgisayar Bilimleri Gr1 27.09.2011 İleri İndeksleme vec isimli bir dizimiz olsun: >> vec = [5 3 1 9 7]; vec dizisindeki en büyük ve en küçük sayıları ve bunların indekslerini bulabiliriz: [minDeger minIndeks] = min(vec); max() fonksiyonu da aynı şekilde çalışır find fonksiyonu bir vektörde istediğimiz değerin olduğu indeksi bulmamızı sağlar 28 ind = find(vec == 9); Temel Bilgisayar Bilimleri Gr1 27.09.2011