Matlab 6
Transcript of Matlab 6
MF-102
Bilgisayar Programlama Bahar 2011
(6. Hafta)
(Yrd. Doç. Dr. Deniz Dal)
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.
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)]);
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.
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)]);
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.
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.)
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
>>
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
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
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);
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);
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 ?
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);
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);
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.
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
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.