Matlab 6

18
MF-102 Bilgisayar Programlama Bahar 2011 (6. Hafta) (Yrd. Doç. Dr. Deniz Dal)

Transcript of Matlab 6

Page 1: Matlab 6

MF-102

Bilgisayar Programlama Bahar 2011

(6. Hafta)

(Yrd. Doç. Dr. Deniz Dal)

Page 2: Matlab 6

UYGULAMAKullanıcıdan klavye yoluyla aldığı bir alt limit ile bir üst limit arasındaki tek sayıların ortalamasını hesaplayarak ekrana basan bir MATLAB düzyazı M programı yazınız. Programınız ortalamayı yazdırdıktan sonra bu aralıkta bulduğu tek sayıları da ekrana basmalıdır.

Page 3: Matlab 6

clc;clear; altLimit=input('Lutfen Alt Limiti Giriniz : ');ustLimit=input('Lutfen Ust Limiti Giriniz : ');

teklerinSayisi=0; % sayacteklerinToplami=0; % toplamada etkisiz elemanteklerVektoru=[ ]; % baslangicta bos vektor

for i=altLimit:ustLimit if mod(i,2)==1 teklerinSayisi=teklerinSayisi+1; teklerinToplami=teklerinToplami+i; teklerVektoru=[teklerVektoru i]; endend

teklerinOrtalamasi=teklerinToplami/teklerinSayisi;fprintf('Teklerin Ortalamasi=%f\n',teklerinOrtalamasi);disp(['Araliktaki Tek Sayilar: ' num2str(teklerVektoru)]);

Page 4: Matlab 6

UYGULAMAKullanıcıdan klavye yoluyla aldığı bir alt limit ile bir üst limit arasındaki çift sayıların karelerinin toplamının karekökünü hesaplayarak ekrana basan bir MATLAB düzyazı M programı yazınız. Programınız karekökü yazdırdıktan sonra bu aralıkta bulduğu çift sayıları da ekrana basmalıdır.

Page 5: Matlab 6

clc;clear;

altLimit=input('Lutfen Alt Limiti Giriniz : ');ustLimit=input('Lutfen Ust Limiti Giriniz : ');

karelerToplami=0; % toplamada etkisiz elemanciftlerVektoru=[ ]; % baslangicta bos vektor

for i=altLimit:ustLimit if mod(i,2)==0 karelerToplami=karelerToplami+i^2; ciftlerVektoru=[ciftlerVektoru i]; endend

fprintf('Toplamin Karekoku=%f\n',sqrt(karelerToplami));disp(['Araliktaki Cift Sayilar: ' num2str(ciftlerVektoru)]);

Page 6: Matlab 6

PROGRAMLARIMIZI ÇALIŞTIRMA

Yazdığımız programlar ya hiç çalışmaz ya da çalışır ama beklediğimiz sonuçları üretmez.

Programımız çalışmaz ise eğer bize bunun nedenlerini komut penceresine hatalı bölümlere ait satır ve sütun bilgilerini basarak bildirir. Ayrıca MATLAB bizlere programlarımızı yazdığımız editörün sağ tarafında turuncu çizgiler şeklinde muhtemel hatalar hakkında ipuçları da verir.

Page 7: Matlab 6

HATA AYIKLAMA (DEBUGGING)

M dosyası editörünün hata ayıklamaya (debugging) yarayan fonksiyonlarını ve calışma alanı (workspace) penceresini kullanarak çalışan programınızdaki (!! BEKLEDİĞİNİZ GİBİ ÇALIŞMAYAN !!) hataları bulabilirsiniz. Bunun için herhangi bir program satırına kesme noktası (breakpoint) koymalı ve kodunuzu F10 tuşu ile satır satır işletmelisiniz. (Derste bu konuyu özetleyen canlı bir uygulama yapılacak.)

Page 8: Matlab 6

HATA AYIKLAMA (DEBUGGING)

Hata Ayıklama (Debugging) modundan komut satırında return komutunu işleterek çıkabilirsiniz. Ayrıca M dosyasının içindeki kesme noktasını üzerini tıklayarak kaldırmalısınız.

K>>return

>>

Page 9: Matlab 6

MATRİSLERDE İŞLEMLER

Aşağıdaki matris işlemlerini MATLAB zaten kolayca gerçekleştirmektedir. Ama bizim amacımız bu işlemleri şimdiye kadar öğrendiğimiz programlama yapıları ile kendimizin yazabilmesidir.

Matrislerin Bir Skalerle Çarpımı

Matrislerde Toplama ve Çıkarma

Matrislerde Çarpma

Matrislerin Transpozu

Page 10: Matlab 6

Matrislerin Bir Skalerle Çarpımı

UYGULAMA : Aşağıdaki şekliyle verilen bir A matrisinin her bir

elemanını 2 rakamı ile çarpıp bir B matrisine atayan ve en sonunda bu B matrisini ekrana basan MATLAB programı.

41

32A

clc;clear;A=[2 3 ; 1 4];B=[ ]; % baslangicta bos matris[m n]=size(A); % m satir ve n sutunfor i=1:m % satir sayisi kadar for j=1:n % sutun sayisi kadar B(i,j)=2*A(i,j); endenddisp(A);disp(B);

82

64B

Page 11: Matlab 6

Matrislerde Toplama ve Çıkarma İşlemi

İki matrisin toplanabilmesi veya çıkarılabilmesi için boyutlarının (yani satır ve sütun sayılarının) eşit olması gerekir.

41

32A

54

63B

İki matrisin toplamı

95

95

54

63

41

32C

clc;clear;A=[2 3; 1 4];B=[3 6; 4 5];C=[ ];for i=1:2 for j=1:2 C(i,j)=A(i,j)+B(i,j); endenddisp(A);disp(B);disp(C);

Page 12: Matlab 6

Matrislerde Çarpma İşlemiA ve B gibi iki matrisin çarpılabilmesi için A matrisinin sütun sayısının B matrisinin satır sayısına eşit olması gerekmektedir. A matrisi mxn, B matrisi nxk ise bu çarpma işlemi sonucunda elde edilecek C matrisinin boyutu mxk olacaktır.

130

121A

Örnek

32

51

21

B

121

155BAC

clc;clear;A=[1 2 1;0 3 -1];B=[1 2; 1 5;2 3];if size(A,2) ~= size(B,1) disp('Carpim Illegal'); return;endC=zeros(size(A,1),size(B,2));for i=1:2 for j=1:2 for k=1:3 C(i,j)=C(i,j)+A(i,k)*B(k,j); end endenddisp(A);disp(B);disp(C);

Page 13: Matlab 6

Transpoz, matrislerde satır ile sütunun yer değiştirmesi işlemidir. Yani A=2x3’lük bir matrisin transpozu alındığı zaman B=AT=3x2’lik bir matris elde edilir.

Matrislerde Transpoz İşlemi

clc;clear;

A=[1 3 0; 4 2 -3];

B=[ ];

[m n]=size(A);

for i=1:n %A’nin sutunu

for j=1:m %A’nin satiri

B(i,j)=A(j,i);

end

end

disp(A);

disp(B);

A =

1 3 0 4 2 -3

B =AT

1 4 3 2 0 -3

Komut satırında A' yı test ediniz.

Hangi metod daha kolay ?

Page 14: Matlab 6

UYGULAMAA=[-45 0 5 10 -91 2] dizisinin (satır vektörünün) elemanlarını

tersten başka bir diziye aktaran ve bu yeni diziyi ekrana yazdıran

MATLAB programı.

clc;clear;

A=[-45 0 5 10 -91 2]; %A=1:10; icin deneyiniz

B=[ ];

boyut=length(A);

for i=1:boyut

B(i)=A(boyut-i+1);

end

disp(A);

disp(B);

Page 15: Matlab 6

UYGULAMAK=[-4 3 0 ; 2 0 4 ] matrisindeki sıfırların sayısını ve yerini (satır

ve sütun numaralarını) ekrana basan bir MATLAB programı.

clc;clear;K=[-4 3 0 ; 2 0 4 ]; % Rastgele Matris İcinde Sıfır Arayin[m n]=size(K);sifirSayisi=0; % sayacfor i=1:m for j=1:n if K(i,j)==0 sifirSayisi=sifirSayisi+1; fprintf('K(%d,%d) = 0 \n',i,j); end endenddisp(K);fprintf('K Matrisindeki SIFIR Sayisi = %d \n',sifirSayisi);

Page 16: Matlab 6

UYGULAMA5x6 boyutunda (5 satırlı ve 6 sütunlu) bir dizinin (matris) elemanlarını klavye yoluyla kullanıcıdan alan ve 3. satırın tüm elemanları ile 4. sütunun tüm elemanlarını toplayarak ekrana basan bir MATLAB programı yazınız.

UYGULAMAHerhangi bir kare matrisin ana köşegen elemanlarını toplayarak ekrana basan bir MATLAB programı yazınız.

Page 17: Matlab 6

UYGULAMAHerhangi bir fonksiyonun belirli bir aralıktaki integralini hesaplamak demek o fonksiyona ait eğrinin altında kalan alanı hesaplamak demektir. Bu problemi CEBİRSEL olarak çözebileceğimiz gibi yazacağımız bir bilgisayar programı yardımıyla belirli bir duyarlılıkta NÜMERİK olarak da hesaplayabiliriz. Bu nümerik çözüm üzerinde düşününüz.

dxxpi )1/(41

0

2

Page 18: Matlab 6

SINAV HAZIRLIK SORULARI1. Kullanıcıdan klavye yoluyla aldığı bir sayının bölenlerini (çarpanlarını)

bularak ekrana basan bir MATLAB programı yazınız.

2. Kullanıcıdan klavye yoluyla aldığı bir sayının ASAL sayı olup olmadığını belirleyen ve eğer ASAL sayı ise ASAL çarpanlarını ekrana basan bir MATLAB programı yazınız.

3. Kullanıcıdan klavye yoluyla aldığı belirli bir aralık içerisindeki bütün ASAL sayıları ve bu ASAL sayıların sayısını ekrana basan bir MATLAB programı yazınız.

4. Kullanıcıdan klavye yoluyla aldığı 3 sayının En Büyük Ortak Bölenini (EBOB) bulacak bir MATLAB programı yazınız.

5. Kullanıcıdan klavye yoluyla aldığı iki sayının aralarında ASAL olup olmadığını bulan bir MATLAB programı yazınız. (4 ve 15 aralarında asaldır örneğin.)

6. Kullanıcıdan klavye yoluyla aldığı 3 sayının En Küçük Ortak Katını (EKOK) bulacak bir MATLAB programı yazınız. (15 sayısının katları: 15 30 45 60 75 ve 20 sayısının katları: 20 40 60 tır. Dolayısıyla EKOK(15,20)=60 tır.)

7. Kullanıcıdan klavye yoluyla aldığı 2 rasyonel sayıyı toplayıp en sade haliyle ekrana basacak bir MATLAB programı yazınız.