ALGORİTMALAR VE PROGRAMLAMA DENEY-1: MATLAB da KULLANILAN SAYI GÖSTERİMLERİ, VERİ TİPLERİ, TEMEL FONKSİYONLAR VE DİZİ İŞLEMLERİ SAYI GÖSTERİMLERİ: MATLAB da sayılar sabit noktalı (fixed point) ve kayan noktalı (float point) olmak üzere iki şekilde gösterilir. Sabit Noktalı Sayılar: Artı veya eksi olabilen tamsayı veya ondalık sayı gösterimini içerir. Örneğin; 5, 0.075, -5.6 gibi. Kayan Noktalı Sayılar: Artı veya eksi olabilen ±mx10 e şeklinde gösterilir. Örneğin; 2.677x10 5 sayısı, MATLAB da 2.677e5 şeklinde gösterilir. Kayan nokta olmasının nedeni ise ondalık noktanın kaymasındandır. Örneğin; 2.677e5 gösterimi 267.7e3 veya 0.2677e6 şeklinde ifade edilebilir. Kayan noktalı sayı mantis ve üstel kısım olmak üzere iki kısımdan oluşur. Mantis (m) kısmı 0<m<10 arasında p basamaklı olabilir. P; duyarlılık veya hassasiyet olarak adlandırılır. Üstel kısımda ise üst kısmının değeri belirlenir. MATLAB da tüm sayılar IEEE kayan noktalı standardına uygun şekilde belirlenmiştir. Ayrıca karmaşık sayı gösterimleri için de i ve j ifadeleri kullanılır. Karmaşık sayılarında sayı biçimleri kayan noktalı olacak şekilde belirlenir. SAYI ÇIKIŞ FORMATLARI: MATLAB, işlemlerin ve hesaplamaların çeşitli sayı çıkış formatları vardır. Bu işlem format komutu ile gerçekleştirilir. MATLAB ta kullanılan formatlar aşağıda verilmiştir: KOMUT Açıklama format Varsayılan format (format short ile aynı) format short 5 Rakamlı sabit noktalı kısa skala formatı format long 15 rakamlı sabit noktalı format format short e 5 rakamlı kayan noktalı kısa format format long e 15 rakamlı kayan noktalı uzun format format hex Onaltılık tabanda format format rat En küçük tamsayı oranı yaklaşımıyla sayıyı kesirli olarak gösterir Aşağıdaki işlem için MATLAB da farklı sayı çıkış formatlarını çalıştırınız ve sonuçları inceleyiniz. >> a=355/113 >> format short e >> a >>format long >>format short e >>format long e >>format rat Aynı işlemleri pi sayısını için de gerçekleyiniz. Soru: MATLAB da kullanılabilecek en büyük ve en küçük sayıyı bulunuz? realmax ve realmin komutlarını çalıştırınız.
MATLAB da VERİ TÜRLERİ Veri türü, verinin bellekte tutulma şeklini belirler. Veriler değişkenler veya sabit sayılar olabilir. Genel olarak sayısal (nümerik) ve sayısal olmayan (alfa-nümerik) olmak üzere iki genel veri türünden bahsedilebilir. Veri tipine bağlı olarak kullanılan değişkenin veya sabitin bellekte saklanacağı boyut ve yapısı belirlenir. MATLAB da tüm değişkenler dizi şeklinde belirlenir. MATLAB taki veri türleri aşağıda verilmiştir. logical : true veya false değerlerinden oluşan mantıksal dizi. int8: 8-bit işaretli tamsayı dizisi uint8: 8-bit işaretsiz tamsayı dizisi int16: 16-bit işaretli tamsayı dizisi uint16: 16-bit işaretsiz tamsayı dizisi int32: 32-bit işaretli tamsayı dizisi uint32: 32-bit işaretsiz tamsayı dizisi int64: 64-bit işaretli tamsayı dizisi uint64: 64-bit işaretsiz tamsayı dizisi single: Tek duyarlıklı kayan nokta dizisi (32 bit uzunluğunda) double: Çift duyarlıklı kayan nokta dizisi (64 bit uzunluğunda) char: Karakterler dizisi cell: Hücre dizisi struct: Yapı dizisi class: nesne(object) sınıfı Aşağıdaki komutları MATLAB de çalıştırınız. >> a=pi*10000000 >> single(a) >> int8(a) >> int16(a) >> int32(a) Elde edilen sonuçları karşılaştırınız. Aynı işlemi >> a=-pi*10e7 için gerçekleyiniz. Burada ayrıca işaretsiz veri tiplerini de deneyiniz. char veri tipinin incelenmesi: Karakter veri tipinde her bir karakter 8 bit (1 byte) uzunluğundadır. Bir değişkeni char veri tipinde olduğunu belirlemek için girilen karakterler iki tırnak içine alınır. Buradaki karakterler ASCII sayısal kodlarına karşılık gelir. Aşağıdaki komutları MATLAB de çalıştırınız. >>x='a' Bu işlemi gerçekleştirdiğinizde x değişkeninin char veri tipinde tanımlandığını workspace penceresinden gözlemleyiniz. >> y='abc' Komutunu çalıştırdığınızda y değişkeninin char veri tipinde 1x3 boyutunda bir dizi olduğunu gözlemleyiniz. >> y(1) >> y(2) >> y(3) satırlarını çalıştırınız. Dizinin her bir elemanın a, b ve c olarak atandığını gözlemleyiniz. >> sayidegeri=double(y) Komutunu çalıştırınız ve y değişkeninin içindeki her bir karakterin ASCII kod karşılığını görünüz. Aynı işlemleri ad ve soyad larınızı arada bir boşluk olacak şekilde giriniz. Boşluk(space) karakterinin ASCII kodunu bulunuz.
Aşağıdaki işlemleri sırasıyla gerçekleyiniz ve sonuçları inceleyiniz. >> deneme='ad ve Soyad 1234' >>sort(deneme) >>fliplr(deneme) >>size(deneme) >>upper(deneme) >>lower(deneme) Ayrıca aşağıdaki satırları çalıştırınız. >> x='1' >> y='2' >>x+y Elde edilen sonucu yorumlayınız. Karakter dizilerine string adı verilir. String işlemleri için MATLAB da bir çok fonksiyon oluşturulmuştur. Bu fonksiyonlar kullanım gerekliliğine göre MATLAB da araştırılabilir. Karakter dizilerinin karşılaştırılması işlemleri için strcmp, strcmpi, strncmp ve strncmpi fonksiyonlarını inceleyiniz. Sayı-Karakter ve Karakter-Sayı Dönüşümleri: MATLAB da sayıları karaktere dönüştürmek için iki fonksiyon vardır. Bunlar; num2str: Kayan noktalı sayıyı karakter dizisine dönüştürür. int2str: Sayıyı yuvarlanmış tamsayı olarak karaktere dönüştürür. >> x=123.45 >> y=int2str(x) >> y=num2str(x) >> double(y) num2str fonksiyonu kullanıldığında elde edilen dizinin uzunluğu nedir? Karakter-sayı dönüşümlerinde ise üç temel fonksiyon vardır. Bunlar; str2num, str2double ve eval. Aşağıdaki satırları çalıştırınız ve elde edilen sonuçları inceleyiniz. >> x='123' >> sayi=str2num(x) >> y=str2num('123+2') >> z=str2num('abc') >> a=str2double('123.45e6') eval fonksiyonu ise parametre olarak fonksiyona girdi yapılan string te ifade edilen işlemi gerçekleştirir. Örneğin; >> b=eval('sind(30)') >> c=eval('1:1:10') disp fonksiyonu ile num2str nin kullanılması: >> not=100; >> disp(['alınan Not:', num2str(not),' dur']) fprintf fonksiyonu: fprintf fonksiyonu, bir çıkışın formatlı olarak gösterilmesinde kullanılır. Genel yazım biçimi; fprintf ( Metin %format\n, değişken_adı). >> x=123.45 >> fprintf('işlem sonucu %f bulunmuştur',x) >> fprintf('işlem sonucu %f\n bulunmuştur',x)
>> fprintf('işlem sonucu %f bulunmuştur\n',x) >> fprintf('işlem sonucu %f bulunmuştur\n tekrar deneyiniz',x) >> fprintf('işlem sonucu %f bulunmuştur\t tekrar deneyiniz',x) >> fprintf('işlem sonucu %f bulunmuştur\b tekrar deneyiniz',x) >> fprintf('işlem sonucu %f ''dir.\n',x) fprintf fonksiyonunun bu şekilde kullanımı dışında dosyaya veri yazmak için de kullanımı mevcuttur. Bunlarla ilgili işlemler ilerleyen deneylerde yapılacaktır. Ayrıca, sprintf fonksiyonunu inceleyiniz. Veri türlerinden cell, struct ve class veri tipleri bu ders kapsamında incelenmeyecektir. MATLAB help dosyalarından inceleyebilirsiniz. MATLAB da kullanılan temel fonksiyonlar: >>help elfun Satırı ile ekranda gözüken fonksiyonları inceleyiniz. >>help elmat Ve >>help specfun Satırı ile ekranda gözüken fonksiyonları inceleyiniz. SORULAR: 1. Aşağıdaki işlemleri MATLAB programında gerçekleyiniz. a) sin(pi/7) b)sin(30 o ) c) 10log100 d) ln(10 2 /3) e) e 5 f) e log10 g) log 2 16 2. x=40 o, n=0.5x10 5 için; cos( x) sonuc hesaplayınız. 2 / 3 n ln( n) 3. t=300, r=0.072, a=0.233, b=0.057, A=20, B=10 için; gerçekleyiniz. 3 r t K ( a b) 2 1 A B işlemini DİZİLER MATLAB ın en temel işlem elemanı dizilerdir(array). Bu deneyde bir boyutlu (vektör) ve çok boyutlu diziler ve bunların oluşturulma biçimleri incelenecektir. Bir boyutlu dizi (vektör) oluşturma: MATLAB de vektör oluşturmanın üç temel yolu vardır: 1. Doğrudan köşeli parantez kullanarak [.]. 2. Eşit aralıklı elemanlar kullanarak. Bu işlem için : operatörü veya linspace ve logspace fonksiyonları kullanılır. 3. rand, randn, ones, zeros benzeri fonksiyonlar kullanılarak. >> x=[1 2 3 4 5] >> x=[1,2,3,4,5] >>x(2) >>y=[sind(30) cos(pi/6) sqrt(2)] >>n=1:1:10 >>y=1:10 >>z=1:2:10 >> n=[1:10]
ci=-2*pi:pi/2:2*pi >>v=linspace(1,10,5) >> h=randn(1,4) >>k=ones(1,5) >>kl=ones(2,5) >>z=zeros(1,7) Vektör işlemleri: >> a=[1 2 3] >> b=[-1 5 8] +b -b *b.*b /b./b.\b ^b.^b >>size(a) >>length(a) Dizilerde kullanılan çeşitli fonksiyonlar vardır. Bu fonksiyonları inceleyiniz; max, min, sum, prod, mean, sort. İki Boyutlu Diziler (Matrisler): =[1 2 3;4 5 6;7 8 9] >>b=2*ones(3,4) >>c=eye(3) >>d=pascal(4) >>x1=[1:5] >>x2=[-1 3 65 8 43] >>x3=ones(1,5) >>X=[x1;x2;x3] Matris işlemlerini incelemek için aşağıdaki satırları çalıştırınız: =[1 2;3 4] >>b=[-1 3;5 6] +b *b.*b /b./b >>det(a) >>inv(a) Matris İndeksleme ve Kolon (:) Notasyonu: Bir A matrisi için; 1. A(m,n) gösterimi: A dizisinin m,n. elemanının değerini verir. 2. A(:,n) gösterimi: A matrisinin n. sütununu verir. 3. A(m,:) gösterimi: A matrisinin m. satırını verir. 4. A(x:y,:) gösterimi: A matrisinin x den y ye kadar olan tüm satırlarını verir.
5. A(:,x:y) gösterimi: A matrisinin x den y ye kadar olan tüm sütunlarını verir. 6. A(m:n) gösterimi: Eleman sayısı ilk sütun elemanlarından başlayarak m. Eleman ile n. eleman arasındaki elemanları verir. Aşağıdaki satırları çalıştırınız ve elde edilen sonuçları inceleyiniz. >>A=magic(5) >>A(2,4) >>A(:,3) >>A(2,:) >>A(5:8) >>A(1:2,:) >>A(:,2:3) >>x=a >>x(1,1)=0 >>x(:,2)=[] >>y=ones(1,5) >>Ayeni=[A;y] >>y=ones(5,1) >>Ayeni=[A y] SORULAR: 1. Aşağıdaki satırlar MATLAB komut penceresinde yazıldığında elde edilecek çıktıları veriniz (x=[ones(3,2),eye(3);zeros(1,5)]; y=[1:5;2,2,2,2,2;6:10;-1-1 -1-1 -1];). 2011 YILI SINAV SORUSU. a) x b) y c) z=x(3,1:3) d) a=x(2:3,2:3) e) b=y(1:3,4) f) c=z*b g) d=z.*b h) e=x.*y 2. Beş işçinin 1 ay boyunca çalışma çizelgesi verilmiştir. Çizelgeyi matris şeklinde tanımlayınız. a) Her bir işçi bir ayda ne kadar para kazanmıştır. MATLAB de bulunuz. b) Bu aya toplam maaş ödemesi kaç TL dir. MATLAB de bulunuz. c) Ne kadar ürün üretilmiştir. d) Bir ürünü üretmenin toplam maliyeti ne kadardır? 1. İşçi 2. İşçi 3. İşçi 4. İşçi 5. İşçi Saat Ücreti 1.2 2 2.5 3 4.5 Çalışılan Saat 153 160 157 165 150 Ürün Adeti 1100 1250 1000 1200 1100