MATLAB de Bilgisayar Programlama Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK
MATLAB de Karakter Tipinde Değişken Girişi: k=input( Açıklama: kl '); Komutu ile k değişkenine sadece sayısal değerler girebiliriz. Bu k değişkeni bir karakter olduğunda ve bu değişkene komut penceresinde bir karakter değer girmek istediğimizde değeri iki tırnak içinde girmek zorundayız. Bu durumdan kurtulmak için MATLAB de karakter tipindeki değişkenin okutulması için şu yapı kullanılır: Degisken_adi=input( Açıklama: ', 's'); Değişkenin karakter tipinde olduğunu gösterir
Örnek: Karakter değerler okuyan ve bir noktaya rastlayınca toplam karakter sayısını veren programı MATLAB de yazınız. karakter= K ; ksayi=0; while karakter ~= '. ' karakter=input('karakteri giriniz:', 's'); ksayi=ksayi+1; fprintf('toplam karakter sayısı=%g\n', ksayi)
PROGRAMLAMADA DİZİ KAVRAMI Bir değişken içerisinde birden çok veri numaralandırılarak tek bir isim altında saklanmasına DİZİ denir. Dizi içinde aynı isim altında çok sayıda veri olduğu için bunları birbirinden ayırt etmek için İNDİS adı verilen bir bilgiye ihtiyaç vardır. Örnek 1: A Dizisi 23 45-1 1.24 78 A(1) A(2) A(3) A(4) A(5)
Örnek 2: İKİ BOYUTLU DİZİ (MATRİS) BDİZİSİ indis 1 2 3 1 2 3 4 23 12 75 48 3 36 15 12 45 4 55 13 B(1,1)=23, B(1,2)=12, B(1,3)=75, B(1,4)=48 B(2,1)=3, B(2,2)=36, B(2,3)=15, B(2,4)=12 B(3,1)=45, B(3,2)=4, B(3,3)=55, B(3,4)=13
Tek boyutlu bir dizinini i değerlerinin ğ i girilmesi il i Aşağıda 1x5 boyutunda (1 satır ve 5 sütun) bir dizinin elemanlarını giren MATLAB programı aşağıda verilmiştir Dışardan değerlerin girişi: for i=1:5 fprintf('a(%d)=',i) A(i)=input(' '); A Programın içinde giriş: A=[1 3-34 0 5] veya A=[1, 3, -34, 0, 5]
Örnek: N elemanlı bir dizinin N değeri ğ ve elemanları dışardan ş girilerek bu dizinin normunun karesi (elemanlarının karelerinin toplamı) bulunacaktır. Gerekli programı yazınız. N=input('N değerini giriniz='); toplam=0; for i=1:n fprintf('a(%d)=',i); A(i)=input(''); ); for i=1:n toplam=toplam+a(i)*a(i); fprintf('a dizisinin i i i normunun karesi=%f', toplam)
İKİ BOYUTLU DİZİLER (MATRİSLER) MATRİSLER, iki boyutlu DİZİLER (VEKTÖRLER) olarak düşünülebilirler: 11 a12... a21 a22... A=......... m1 am 2... a 1n a1, n 1 a a 2, n 1 a2 n...... am, n a a 1 mn mxn Böyle dikdörtgen bir tabloya, mxn matrisidir denir. Burada, m sayısına matrisin satır sayısı, n sayısına matrisin sütun sayısı denir. Eğer, m=n ise matris kare matris olarak adlandırılır.
İKİ BOYUTLU BİR DİZİNİN (MATRİSİN) DEĞERLERİNİN GİRİLMESİ Aşağıda 2x3 boyutunda (2 satır ve 3 sütun) bir dizinin elemanlarını giren MATLAB programı aşağıda verilmiştir: Değerlerin dışardan girişi: for i=1:2 for j=1:3 fprintf('b(%d,%d)=',i,j) (%d,%d),,j) B(i,j)=input(' '); B Programın içinde giriş: B=[1 3-34 ; 0 5 4] veya B=[1, 3, -34 ; 0, 5, 4]
Uygulama 1 Elemanları dışardan ş girilen iki boyutlu bir dizinin programını yazınız (değerler aşağıda verilmiştir) 12 21 23 90 34 12 67 45 89 67 Uygulama 2 0 ile 50 arasında 4 artımlı bir tek boyutlu A dizisi oluşturunuz
MATRİSLERLE İŞLEMLER Matrislerin kilerine ait bir cebirleri vardır. Özellikle matrislerin aşağıdaş ğ sıralanan işlemleriyleş ilgileneceğiz. ğ Bir skalerle çarpma Matrislerle toplama Matrislerle çıkarma Matrislerle çarpma Matris transpozu İleri matris işlemleri için MATLAB hazır fonksiyonları mevcuttur.
Matrislerle Skaler Çarpım Her hangi bir matris, bir c skaleriyle çapılabilir. Sonuçta, matris ca, ca = (ca ) ij Örnek: A=[2 3 ; 1 4]; Aşağıda verilen Matrisin 2 ile çarpımı for i=1:2 for j=1:2 sonucunu veren MATLAB programı 2 A = 1 3 4 C(i,j)=2*A(i,j); C
ÖRNEK: A=[1 3 ; 4 2] matrisinin 2. sütununu 3 ile çarpıp yeni bir matris elde eden bir MATLAB programı yazınız A=[1 3; 4 2]; for i=1:2 for j=2:2 A(i,j)=3*A(i,j); (,j); A A=[1 3; 4 2]; for i=1:2 A(i,2)=3*A(i,2); A
Ödev: 3x3 lük bir matris dışardan girilerek (okutularak) bu matrisin ana köşegen elemanlarının toplamını bulan programı yazınız.
Matrislerde r Toplama ve Çıkarma İşlemi m İki matrisin toplanabilmesi veya çıkarabilmesi için boyutları, yani satır ve sütün sayıları eşit olmalıdır. 2 3 6 11 A = B = A=[2 3 ; 1 4]; 1 4 0 5 B=[6-1 ; 0 5]; for i=1:2 İki matrisin toplamı: C 2 3 6 1 8 2 = + = 1 4 0 5 1 9 for j=1:2 C C(i,j)=A(i,j)+B(i,j);
Uygulama: Beş işçinin 1 ay boyunca çalışma cetveli verilmiştir. Ücret değerleri ğ Milyon TL göstermektedir. İŞÇİLER 1 2 3 4 5 Saat Ücreti 1.2 2 2.5 3 4.5 Çalışılan 153 160 157 165 150 saat Ürün Adeti 1100 1250 1000 1200 1100 a) Her bir işçi bir ayda ne kadar para kazanmıştır? b) İşverenin bu aya ait toplam maaş ödemesi kaç liradır? c) Ne kadar ürün üretilmiştir? d) Bu aya ait olmak üzere bir ürünü üretmenin ortalama maliyeti nedir?
Matrislerde Çarpma İşlemi X ve Y matrislerinin çarpılabilmesi için bir ön koşul bulunmaktadır. Bu koşul, X matrisinin sütun sayısının Y matrisinin satır sayısına eşit olmasıdır. Yani; XMxN, YNxK şeklinde d boyutlar uyumlu olmalıdır. l Sonuçta elde edilecek matris ZMxK boyutlu olacaktır. X= clear all; 0123 X=[0 1 2 3;1 2 3 4;2 3 4 5]; 1 2 3 4 Y=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; 2 3 4 5 for i=1:3 for j=1:4 Y = Z(i,j)=0; 1 0 0 0 for k=1:4 0 1 0 0 Z(ij) Z(i,j)=z(i,j)+x(i,j)*y(k,j); (ij)+ (ij)* (kj) 0010 0 0 0 0 0 1 Z= z 0123 1 2 3 4 2 3 4 5
Matrislerde Transpoz İşlemi Transpoz, matrislerde satır ile sütunun yer değiştirilmesi işlemidir. Yani A=3x2 lik birmatrisin transpozu alındığı zaman B=A T =2x3 lük bir matris elde edilir. A=[1 3 0; 4 2-3]; for i=1:2 B for j=1:3 B(j,i)=A(i,j); (,j); A = 1 3 0 4 2-3 B =A T 1 4 3 2 0-3
Ödev: 10 öğrencinin 1 dersten aldıkları vize ve final notlarını alarak herbir öğrencinin ortalamalarını hesaplayan ve aşağıdaki formata göre yazdıran programı yazınız. İsim Vize Final Ortalama Ahmet Selim 35 40 37.5 Çetin Ulak 22 95 58.5 : : : :
1. Vize 1. soru çözümü: clear all; clc; for a=1:10 for b=1:5 c=a*b; fprintf(' %2d*%2d = %2d', b, a, c) fprintf(' \n')
1. Vize 2. soru çözümü: clear all; N=input('Öğrenci sayısını giriniz N= '); TOP=0;SAYAC1=0;SAYAC2=0; for i=1:n fprintf('%2d. öğrencinin ğ 1. vize notunu giriniz NOT= ',i); VIZE1(i)=input(''); TOP=TOP+VIZE1(i); ORT1=TOP/N; TOP=0; for i=1:n fprintf('%2d. öğrencinin 2. vize notunu giriniz NOT= ',i); VIZE2(i)=input(''); VORT(i)=(VIZE1(i)+VIZE2(i))/2; if VORT(i)>=50 SAYAC1=SAYAC1+1; else SAYAC2=SAYAC2+1; TOP=TOP+VIZE2(i); ORT2=TOP/N; fprintf('sınıfın 1. vize ortalaması= %f\n',ort1); fprintf('sınıfın 2. vize ortalaması= %f\n',ort2); fprintf('sınıfın vize ortalamalarının ortalaması= %f\n',(ort1+ort2)/2); fprintf('vize ortalaması 50 ve üzerinde olan öğrenci sayısı= %d\n',sayac1); fprintf('vize ortalaması 50nin altında olan öğrenci sayısı= %d\n',sayac2);
1. Vize 2. soru çözümü: Öğrenci sayısını giriniz N= 3 1. öğrencinin 1. vize notunu giriniz NOT= 45 2. öğrencinin 1. vize notunu giriniz NOT= 50 3. öğrencinin ğ 1. vize notunu giriniz NOT= 60 1. öğrencinin 2. vize notunu giriniz NOT= 55 2. öğrencinin 2. vize notunu giriniz NOT= 70 3. öğrencinin 2. vize notunu giriniz NOT= 90 Sınıfın 1. vize ortalaması= 51.666667 Sınıfın 2. vize ortalaması= 71.666667 Sınıfın vize ortalamalarının ortalaması= 61.666667 Vize ortalaması 50 ve üzerinde olan öğrenci sayısı= 3 Vize ortalaması 50nin altında olan öğrenci sayısı= 0