MF102 Bilgisayar Programlama MATLAB Lecture1

Download Report

Transcript MF102 Bilgisayar Programlama MATLAB Lecture1

MATLAB
MATLAB
MATLAB,
bilim adamları ve mühendislere, matrislere dayalı problemleri
Fortran ve C gibi dillerden farklı olarak program yazmaksızın çözmede
kullanılmak üzere bir sayısal hesaplama kütüphanesi (MATris
LABoratuvarı (MATrix LABoratory)) olarak tasarlanmıştır. Daha sonraları
ise birçok toolbox eklenerek geliştirilmiştir. MATLAB 1970’lerin sonunda
Cleve Moler tarafından yazılmıştır. Cleve Moler aynı zamanda “The
MathWorks” firmasının da kurucusudur.
MATLAB bir yorumlayıcıdır (interpreter). Bir derleyiciye (compiler)
ihtiyaç duyan programlama dillerinden farklı olarak bir MATLAB
programı her çalıştırıldığında satır satır makina diline çevrilir.
MATLAB Programının Tipik Kullanım
Alanları
– Algoritma geliştirme ve kod yazmada (programlama),
– Matematiksel hesaplama (nümerik ve sembolik)
yapmada,
– Lineer cebir, istatistik, Fourier Analizi, filtreleme,
optimizasyon, sayısal integrasyon vb. konularda
hazır matematik fonksiyonlara ulaşabilmede,
– 2D ve 3D grafikler çizmede,
– Modelleme ve simülasyon yapmada,
– Grafiksel arayüz oluşturmada,
– Veri analizi ve kontrolü gerçekleştirmede.
MATLAB Programlama Ortamının Tanıtımı
MATLAB PROGRAMLAMA ORTAMI
1. Başlat Menüsü (Start)
2. Komut Penceresi (Command Window)
3. Çalışma Alanı (Workspace)
4. Çalışma Dizini (Current Folder)
5. Komut Geçmişi (Command History)
6. Metin Düzenleyicisi (Editor)
!! MATLAB programlama ortamını ilk açılıştaki haline getirmek için
Desktop->Desktop Layout->Default komutunu çalıştırınız. !!
Komut Penceresi: MATLAB ile iletişim kurulan ana penceredir.
MATLAB yorumlayıcısı, kullanıcıdan gelecek komutları kabul etmeye
hazır olduğunu gösteren “ >> ” biçiminde bir simge görüntüler. Örneğin,
4*25+6*52+2*99 gibi basit bir matematiksel işlemi yapmak için
>> 4*25+6*52+2*99
ifadesini yazıp ENTER tuşuna basarız.
ans=
610
Komut Satırında Yanlışların Düzeltilmesi: Klavyede yer alan ok tuşları
komut satırında yapılan yanlışlıkların düzeltilmesine imkan verir. Bunlar
yukarı “↑” aşağı “↓” sol “←” sağ “→”. Yukarı tuşu yardımıyla bir
önceki satır tekrar görüntülenerek sağ ve sol tuşları ile yanlış yazılı yere
imleç taşınarak düzenleme gerçekleştirilir.
Sonucun Ekranda Görüntülenmesini Gizleme: Bir deyim yazıp, ENTER
tuşuna
basınca sonuçlar ekranda otomatik olarak görüntülenir. Buna
karşılık, deyimin sonuna “ ; ” ilave edilecek olursa yapılan hesaplamalar
ekranda görüntülenmez.
MATLAB’DE DEYİMLER VE BİLEŞENLERİ
MATLAB komut penceresinden doğrudan çalıştırılabilen ya da bir MATLAB
dosyası içerisine kaydedilebilen ve MATLAB tarafından yorumlanabilen her
şey MATLAB deyimidir. MATLAB deyimleri değişkenler, rakamlar,
operatörler ve fonksiyonlar kullanılarak oluşturulurlar.
Değişkenler: Deyimler içerisinde sayısal değerlerin yerini alan ifadelerdir.
MATLAB bir değişken ile karşı karşıya geldiğinde, otomatik olarak bu
değişken oluşturulur ve yeteri kadar bellek ayrılır. Eğer değişken daha
önceden tanımlı ise MATLAB onun içeriğini değiştirir ve gerekirse yeni
bellek ayırır.
Örneğin, >> x=50
komut satırından işletildiğinde MATLAB “x” adında bir değişken oluşturur
ve 50 değerini bu değişkene atar.
Diğer bilgisayar dillerinde olduğu gibi MATLAB’in de değişken isimleri
konusunda bazı kuralları vardır.
Değişken Tanımlama Kuralları
1. Değişken isimleri daima bir harf ile başlamalıdır. İlk harfi başka harfler,
rakamlar ve alt çizgiler ( _ ) izleyebilir. Örneğin 1sayi uygun bir değişken ismi
değilken, sayi_1 kullanılabilir bir değişken adıdır.
2. Değişken isimleri noktalama işaretleri ve boşluk(lar) barındırmamalıdır.
sayi.1 veya sayi 2 (2 den önceki boşluğa dikkat) şeklinde tanımlanan
değişken adları bu kural ihlaline 2 güzel örnektir.
3. Değişken isimleri içerisinde Türkçemize özgü küçük veya büyük “ç, ğ, ı, ö,
ş, ü” karakterleri kullanılmamalıdır.
4. Değişken isimlerinin küçük ve büyük harf kullanımına duyarlı olduğu
unutulmamalıdır. orta, Orta, ORTA veya orTa adlı değişkenler MATLAB için
farklı değişkenlerdir.
5. Değişken isimleri en fazla 63 karakter içerebilir ve bundan fazlası MATLAB
tarafından dikkate alınmaz.
DEĞİŞKENLERİN İSİMLENDİRİLMESİ
 Değişkenler ve daha sonraki bölümlerde göreceğimiz fonksiyonlar
muhakkak kullanım amaçları dikkate alınarak ve anlamlı bir şekilde
isimlendirilmelidirler.
 Örneğin kullanıcıdan klavye yoluyla alınacak ve ortalamaları hesaplanacak
üç sayı a, b, c veya x, y, z gibi jenerik değişken isimleriyle değil sayi1,
sayi2 ve sayi3 gibi anlamlı isimlerle temsil edilmelidir.
 Bir zorunluluk olmasa bile yazılan bir programın anlaşılabilirliğini artırmak
adına değişkenler ve fonksiyonlar adlandırılırken bazı notasyonlardan
faydalanılır.
Rakamlar
 MATLAB’de negatif bir sayıyı temsil için o sayının önünde eksi (-) işareti
vardır. Bir sayının önüne artı (+) işareti koyulması veya hiçbir işaret
koyulmaması o sayının pozitif olduğunun delilidir.
 Ondalıklı sayılarda ayraç olarak nokta (.) ve 10 sayısının kuvvetini
temsilen e harfi kullanılır.
 Karmaşık sayıların sanal kısımları MATLAB’de son takı olarak i harfini
kullanır.
 Bu bilgiler ışığında MATLAB yorumlayıcısının anlayacağı birkaç rakama
örnek olarak 6, -175, 3.1416, 2.54e2, 7i veya 5+7i verilebilir.
Aritmetik Operatörler: MATLAB, deyimler içerisinde aşağıdaki aritmetik
operatörleri ve öncelik kurallarını kullanır.
İşlem
Operatör
Örnek
Toplama,
a+b
+
2+3
Çıkarma,
a-b
-
5-2
Çarpma,
a*b
*
3*4
Bölme,
a/b
/
15/7
Üs alma,
ab
^
2^3
Parantez
a*(b+c)
()
2*(3+5)
Öncelik
1.
2.
3.
4.
Aritmetik Operatörlerin Öncelik
Sıraları: Tek bir matematiksel
deyim içinde birden fazla işlem bir
arada bulunabildiğine göre hangi
işlemin öncelik hakkına sahip
olduğunun
bilinmesi
yerinde
olacaktır. MATLAB’de işlemlerin
öncelik listesi aşağıda verilmiştir.
İşlem
Parantez (İçten Dışa Doğru)
Üs Alma (Soldan Sağa Doğru) (2^2^3=???)
Çarpma ve Bölme (Soldan Sağa Doğru)
Toplama ve Çıkarma (Soldan Sağa Doğru)
MATLAB’in Kullanıma-Hazır Bazı Matematiksel
Fonksiyonları
Örnekler:
Matematiksel Yazılım
MATLAB de Yazılım
ab-c+d-6+da
a*b-c+d-6+d*a
b+c3-d/8-b2c
b+c^3-d/8-b^2*c
a
2ab
 c 3  bd 2  2
b
b  4ac
(b  c 2 ).3 f
a
e f
d
3a
Uygulama :
x
3
a / b  c  (3 / 2)  b * d  2  (2 * a * b) /(b  2  4 * a * c)
3
a
a=1, b=2, c=3, d=4, e=5, f=6 iken ???
c
ba
1 c2 
a  b4
b  5 cd 3
4
a
 ( ac) 3 
2
a a
işlemini MATLAB dilinde kodlayınız.
clc VE clear KOMUTLARI
clc komutu komut penceresini temizler.
clear komutu bütün değişkenleri ve fonksiyonları bellekten siler.
(Bütün değişkenleri çalışma alanından (workspace) çıkarır.)
Lütfen Aşağıdaki Komutları Komut Penceresinden Çalıştırın:
>>help clc
>>help clear
>>help abs
>>help sqrt
Daha detaylı yardım için (komutun kullanımına ait örnekleri de görmek için)
doc komutundan faydalanabilirsiniz.
>>doc sqrt
MATLAB’ DE DEĞİŞKEN TÜRLERİ
VE DEĞER ATAMALARI
Herşey matris?
MATLAB değişkenlerine değer olarak aşağıdakilerden
herhangi birisi atanabilir:
 Matris
 Satır Vektörü
 Sütun Vektörü
 Karakter Dizisi (Katar) (String)
 Skaler
(İKİ BOYUTLU) MATRİSLERİN DEĞİŞKENLERE
DEĞER OLARAK ATANMASI
(TEK BOYUTLU) SATIR VEKTÖRLERİNİN
DEĞİŞKENLERE DEĞER OLARAK ATANMASI
(TEK BOYUTLU) SÜTUN VEKTÖRLERİNİN
DEĞİŞKENLERE DEĞER OLARAK ATANMASI
KARAKTER DİZİLERİNİN DEĞİŞKENLERE DEĞER
OLARAK ATANMASI
SKALERLERİN DEĞİŞKENLERE DEĞER OLARAK
ATANMASI
ANS DEĞİŞKENİ
Ondalıklı Sayı Formatı
• Bir işlemin sonucu, varsayılan (default) olarak 4 ondalık ile gösterilir.
• Ondalık hane sayısı format fonksiyonu ile değiştirilebilir.
•
•
•
•
•
format veya format short : 4 ondalık
format bank: 2 ondalık
format long: 15 ondalık
format rat: Ondalık sayıları rasyonel sayı olarak gösterir.
UYGULAMA 1 :
>>a=22/5 i yukarıdaki formatlar için test ediniz.
UYGULAMA 2 : Ayrıca aşağıdaki komutlar dizisini çalıştırınız.
>>format rat
>>a=22/5
>>format
>>pi
>>b=1/3
>>format long
>>c=a+b
>>pi
>>format
>>format
MATLAB PROGRAMLARINA KLAVYEDEN
VERİ AKTARIMI
"input"
komutu
yardımıyla
bir
MATLAB
programı
içerisinde
değerlendirilmek üzere kullanıcıdan klavye yoluyla bir veri alınır ve bu veri
bir değişkene atanır.
input KOMUTU İLE KLAVYEDEN SAYISAL VERİ
TEMİNİ
>> sayi1=input('Lutfen 1. Sayiyi Giriniz= ')
>> sayi1=input('8')
Tek tırnaklar arasına nasıl bir
bilgi girmesi gerektiği
hususunda kullanıcıya
verilecek uyarı mesajı yazılır.
input KOMUTU İLE KLAVYEDEN METİNSEL
VERİ TEMİNİ
>> isim=input('Lutfen Isminizi Giriniz = ', 's' )
disp VE fprintf KOMUTLARI İLE EKRANA BİLGİ
YAZDIRMA
Bir önceki dersimizde input komutu ile klavye
üzerinden MATLAB programlama ortamına nasıl
veri aktarılacağını öğrendik.
Bu dersimizde ise disp ve fprintf komutları
yardımıyla ekrana nasıl bilgi yazdırılacağını
öğreneceğiz.
disp KOMUTU İLE EKRANA METİN YAZDIRMA
disp KOMUTU İLE EKRANA SAYISAL DEĞER
YAZDIRMA
disp KOMUTU İLE EKRANA METİNLERİ VE
SAYISAL DEĞERLERİ BİRLİKTE YAZDIRMA
MATLAB’in num2str fonksiyonu
kendisine parametre olarak aldığı bir
sayıyı bir karakter dizisine (string)
çevirir. (22 sayısı '22' olur.)
fprintf KOMUTU İLE EKRANA BİLGİ YAZDIRMA
GENEL KULLANIM
fprintf('Ekrana Basilacak Aciklama %X \n', deger);
Burada %X Kısmında Kullanabileceğimiz Seçenekler :
%c : deger in tek bir karakter olduğunu gösterir.
%s : deger in bir karakter dizisi (string) olduğunu gösterir.
%d : deger in bir tamsayı olduğunu gösterir.
%f : deger in bir ondalıklı sayı olduğunu gösterir.
%g : deger i mümkün olan en kompakt forma sokar.
Diğer yandan :
\n : İmleci bir alt satırın başına götürür. (n, newline)
\t : İmleci bir TAB kadar sağa kaydırır.
fprintf Kullanımına Örnekler
Aşağıdaki 2 Komut Aynı İşi Yapar
disp('Uzgunum! Sifira Bolum Hatasi Var.');
fprintf('Uzgunum! Sifira Bolum Hatasi Var.\n');
disp ve fprintf ARASINDAKİ FARKLAR
disp komutu ekrana çıktı verdikten sonra bir alt satıra
otomatik olarak atlar. fprintf komutunu bir alt satıra
götürebilmek için ise \n kullanılmalıdır.
Ayrıca disp komutu satır veya sütun vektörleri ile matrisleri
ekrana kolayca yazdırabilirken aynı işlemi fprintf ile
yapabilmek daha çok işlem gerektirmektedir.
MATLAB’DE PROGRAMLAMA
MATLAB’de programlama genel olarak iki yolla yapılır:
 Komut satırında (inline) programlama
 m-dosyaları ile (m-files) programlama
o Düzyazı (script) m-dosyaları ile programlama
o Fonksiyon (function) m-dosyaları ile programlama
m-dosyaları oluşturabilmek için ise bir metin düzenleyicisine (editor)
ihtiyaç vardır.
Düzyazı M-Dosyaları ile Programlama
 Bir düzyazı (senaryo dosyası) (script file) özel bir görevi yerine getirmek için gerekli
MATLAB komutlarının saklandığı bir metin dosyasıdır. Başka bir ifadeyle; bir hesaplamayı
gerçekleştirmek için yazılacak birçok komut dizisi, komut penceresinden tek tek girmek
yerine bir dosyada saklanır ve daha sonra bu dosya çalıştırılarak bu komutlar icra edilir.
 Bu dosyaların MATLAB’in Çalışma Dizini (Current Folder) altında "DosyaAdi.m" şeklinde
saklanmaları gerekir.
 DOSYA
ADLARI
İÇERMEZLER.!!!!!!!!
TÜRKÇE
KARAKTERLER
VE
BOŞLUKLAR
MATLAB DOSYALARI İSİMLENDİRİLİRKEN PASKAL NOTASYONUNDAN
FAYDALANILIR.
 MATLAB programlama ortamı, m-dosyalarının oluşturulmasını kolaylaştıran akıllı
bir metin düzenleyicisine (text editor) sahiptir. m-dosyaları Windows’un Notepad i gibi
herhangi bir metin düzenleyicisi ile de yazılabilirler. Bir düzyazı m-dosyası
oluşturmak için “Current Folder” penceresinde boş bir alana sağ tıklayıp
“New File>Script” yolu takip edilmelidir.
Programı yazma işlemi bittikten sonra
ve programı çalıştırmadan önce
muhakkak kaydediniz.
İLİŞKİSEL OPERATÖRLER
İlişkisel operatörler, işlenenleri arasındaki eşitlik, eşitsizlik,
büyüklük veya küçüklük türünden ilişkileri belirleyen
operatörlerdir.
==
~=
>
>=
<
<=
Eşit Mi?
Eşit Değil Mi?
Büyük Mü?
Büyük veya Eşit Mi?
Küçük Mü?
Küçük veya Eşit Mi?
İlişkisel operatörler sonuç olarak 1 (BİR) (true) veya
0 (SIFIR) (false) değerlerini üretirler.
 Eşitlik testinde 2 adet "==" işareti kullanılır. Oysa değişken
atamalarında kullandığımız eşittir "=" 1 tanedir.
 MATLAB komut penceresinde 3=5 yazdığımızda program hata
verir. Oysa 3==5 yazdığımızda bu “3, 5'e eşit midir?" anlamına gelir,
karşılaştırma yanlıştır ve MATLAB bu durum için 0 (Sıfır) sonucunu
üretir.
İLİŞKİSEL OPERATÖRLERİN ÖNCELİK SIRALARI
 İlişkisel operatörler aritmetik operatörlerden daha düşük
bir işlem önceliğine sahiptirler.
 Örneğin komut penceresinde 3+4<7-5 şeklinde
çalıştırılacak bir MATLAB deyimi arka planda önce 7<2
formuna dönüştürülür ve ilişkisel test (küçüklük testi)
daha sonra gerçekleştirilir.
 Benzer şekilde i+j==10 gibi bir eşitlik testi, öncelikle
hesaplanan i+j aritmetik işleminin sonucu ile 10 sayısı
arasında gerçekleştirilir.
 Yukarıdaki deyimler, karışıklığa meydan vermemek için
(3+4)<(7-5) ve (i+j)==10 formlarına sokulabilirler.
MANTIKSAL OPERATÖRLER
Mantıksal operatörler de ilişkisel operatörler gibi sonuç
olarak 1 (BİR) (true) veya 0 (SIFIR) (false) değerlerini
üretirler.
İŞLEVLERİ
MANTIKSAL
MATLAB
OPERATÖRLERİ
a&&b
VE (AND)
a||b
VEYA (OR)
~a
DEĞİL (NOT)
MANTIKSAL OPERATÖRLERİN
DOĞRULUK TABLOLARI
A
B
A && B
A
B
A || B
0
0
1
0
1
0
0
0
0
0
0
1
0
1
0
0
1
1
1
1
1
1
1
1
A
~A
0
1
1
0
>> k=5;
>> m=7;
>> (k>6) && (m<8)
ans =
0
İlişkisel ve mantıksal operatörler her zaman bool
tipinde (yani 1 (true) veya 0 (false) değerinde, başka bir
ifadeyle sadece iki değerli) bir sonuç geriye döndürürler.
Dolayısıyla if ve while deyimleri ile birlikte karar verme
amacıyla kullanılabilirler.
if Şartlı Deyimi
Bir karşılaştırma ifadesini veya mantıksal bir ifadeyi test ederek bunun
sonucuna göre mümkün seçeneklerden birini icra edebilen bir komuttur.
if Deyiminin Üç Farklı Kullanım Şekli vardır:
if koşul
işlem(ler)
end
if koşul
işlem(ler)
else
işlem(ler)
end
if koşul1
işlem(ler)
elseif koşul2
işlem(ler)
else
işlem(ler)
end
koşul dediğimiz şey bir karşılaştırma ifadesi (a>b gibi) ya da
bir mantıksal ifadedir (a&&b gibi).
UYGULAMA
Klavyeden girilen iki sayının oranını bulan ve fprintf komutuyla
ekrana basan bir MATLAB düzyazı m-programı yazınız.
(Programınız payda sıfır girildiğinde disp komutuyla ekrana
“Uzgunum! Sifira Bolum Hatasi Var.” mesajını yazdırmalıdır.)
clc; %Komut penceresini temizle
Programınızı en az kaç
clear; %Degiskenleri sil
kez çalıştırmalısınız?
pay = input('Lutfen Payi Giriniz: ');
payda = input('Lutfen Paydayi Giriniz: ');
if payda==0
disp('Uzgunum! Sifira Bolum Hatasi Var.');
else
oran=pay/payda;
fprintf('Oran = %f \n',oran);
%disp(['Oran = ' num2str(oran)]);
end
pay
oran
payda
Örnek: Kullanıcıdan klavye yoluyla alınan x ve y değerlerine
göre aşağıdaki sonuçlardan birini hesaplayan bir MATLAB
programını bir m-dosyası içine yazınız ve komut penceresinden
dosya adı ile çalıştırınız.
x>y ise
sonuc= (x-y)
x=input('Lutfen x Degerini Giriniz : ');
x=y ise
sonuc=(x+y)7
y=input('Lutfen y Degerini Giriniz : ');
x<y ise
sonuc=x*y
if x>y
Uygulama2.m
sonuc=sqrt(x-y);
elseif x==y
sonuc=(x+y)^7;
Programınızı en az kaç
kez çalıştırmalısınız?
else
sonuc=x*y;
end
disp(sonuc);
m-dosyalarını oluşturduğunuz
MATLAB
program
metin
editörünün
yazma
müdahale etmeyiniz !!!!!
stiline
>>Uygulama2
UYGULAMA
Girilen ay numarasına göre gün sayısını hesaplayan MATLAB
programını yazınız.
Programınızı en az
kaç kez
çalıştırmalısınız?
ay=input('Bir Ay Numarasi Giriniz (1-12)= ');
if ay==1 || ay==3 || ay==5 || ay==7 || ay==8 || ay==10 || ay==12
disp('Bu Ay 31 Gunden Olusur. ');
elseif ay==2
disp('Bu Ay 28 Gunden Olusur.');
elseif ay==4 || ay==6 || ay==9 || ay==11
disp('Bu Ay 30 Gunden Olusur.');
else
disp('Yanlis Bir Ay Numarasi Girdiniz.');
end
switch Şartlı Deyimi
ayNo = input('Bir Ay Numarasi Giriniz (1-12)= ');
switch ayNo
case {1,3,5,7,8,10,12}
disp('Bu Ay 31 Gunden Olusur.');
case 2
disp('Bu Ay 28 Gunden Olusur.');
case {4,6,9,11}
disp('Bu Ay 30 Gunden Olusur.');
otherwise
disp('Yanlis Bir Ay Numarasi Girdiniz.');
end
PROGRAMLARIMIZI ÇALIŞTIRMA
Yazdığımız programlar ya hiç çalışmazlar ya da
çalışırlar ama beklediğimiz sonuçları üretmezler.
Yazdığımız bir program ç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 programınızı F10 tuşu ile
satır satır işletmelisiniz.
HATA AYIKLAMA
Hata Ayıklama modundan komut satırında return
komutunu
işleterek
çıkabilirsiniz.
Ayrıca
m-dosyasının içerisindeki kesme noktasını
üzerini tıklayarak kaldırmalısınız.
K>>return
>>
MATLAB’İN SAYI YUVARLAMA
FONKSİYONLARI
MATLAB’in ondalıklı sayıları yuvarlama amacıyla
sıklıkla kullanılan 4 adet hazır fonksiyonu vardır.
Bunlar:
fix
round
ceil
 floor
fix(x)
Kendisine parametre (argüman) olarak aldığı x
ondalıklı sayısını 0 (Sıfır) yönünde karşılaştığı ilk
tamsayıya yuvarlar.
round(x)
Kendisine parametre (argüman) olarak aldığı x
ondalıklı sayısını kendisine en yakın tamsayıya
yuvarlar.
ceil(x)
Kendisine parametre (argüman) olarak aldığı x
ondalıklı sayısını pozitif sonsuz yönünde karşılaştığı
ilk tamsayıya yuvarlar.
floor(x)
Kendisine parametre (argüman) olarak aldığı x
ondalıklı
sayısını
negatif
sonsuz
yönünde
karşılaştığı ilk tamsayıya yuvarlar.
BİR SAYININ TAMSAYI VEYA
ONDALIKLI SAYI OLUP OLMADIĞININ
ARAŞTIRILMASI
Bir sayı tamsayı ise sayının kendisi sayının
yuvarlanmışına eşittir.
Bir sayı yuvarlanmışına eşit değilse ondalıklı
bir sayıdır.
mod FONKSİYONU İLE KALAN BULMA
mod(x,y) x sayısının y sayısına bölümünden kalanı
verir.
x=y*bölüm+kalan
x=y*fix(x/y)+mod(x,y)
BİR SAYININ ÇİFT SAYI VEYA TEK SAYI
OLUP OLMADIĞININ ARAŞTIRILMASI
Bir sayı ikiye tam olarak bölünebiliyorsa yani
sayının ikiye bölümünden kalan sıfırsa bu sayı
bir çift sayıdır.
Bir sayının ikiye bölümünden kalan 1 ise bu
sayının bir tek sayıdır.
rand FONKSİYONU RASTGELE SAYI ÜRETİMİ
 rand(n,m) fonksiyonu MATLAB’de
nxm boyutunda ve
elemanları rastgele sayılar olan bir matris oluşturur.
Oluşturulan bu rastgele sayılar 0 ile 1 arasındadır ve düzgün
dağılımlıdır.
 Üretilmek istenen matris kare bir matris ise yani n satır
sayısı, m sütun sayısına eşit ise rand(n,n) yerine sadece
rand(n) kullanılabilir.
 0 ile 1 arasında rastgele ondalıklı bir skaler sayı üretmek için
ise rand(1) fonksiyonunun kullanımı yeterlidir.
 Rastgele sayılardan oluşan bu matrisin tüm elemanlarını k
gibi bir sayı ile çarparak sayıları 0 ile k aralığına çekebiliriz.
 Ondalıklı sayılardan oluşmuş bir matrisin elemanlarını
yuvarlayıp tamsayı yapmak için herhangi bir yuvarlama
fonksiyonunu, mesela round fonksiyonunu kullanabiliriz.
AŞAĞIDAKİ MATLAB DEYİMLERİ KOMUT
PENCERESİNDE ÇALIŞTIRILDIKLARINDA
NASIL ÇIKTILAR ÜRETİRLER?
>> a=rand(1,10)
>> b=fix(rand(3,5))
>> c=round(40*rand(5,3))
>> d= 40*round(rand(5,3))
>> e=round(10+40*rand(5,3))
>> f=10+40*round(rand(5,3))
>> g=round(50+250*rand(3,4))
>> h=round(1000*rand(1))
zeros FONKSİYONU İLE SADECE 0’LAR İÇEREN
BİR MATRİSİN OTOMATİK OLARAK
OLUŞTURULMASI
 zeros(n,m) fonksiyonu nxm boyutunda
(n satırlı ve m sütunlu) ve her bir elemanı 0
olan bir matris üretmek amacıyla kullanılır.
 Üretilmek istenen matris kare bir matris ise
yani n satır sayısı, m sütun sayısına eşit ise
zeros(n,n)
yerine
sadece
zeros(n)
kullanılabilir.
>> zeros(1,3)
zeros(3,5) deyimi acaba
>> zeros(3,1)
fix(rand(3,5)) deyimi ile aynı
sonucu üretir mi?
>> zeros(4,4)
>> zeros(4)
>> zeros(3,5)
ones FONKSİYONU İLE SADECE 1’LER İÇEREN
BİR MATRİSİN OTOMATİK OLARAK
OLUŞTURULMASI
 ones(n,m) fonksiyonu nxm boyutunda
(n satırlı ve m sütunlu) ve her bir elemanı 1
olan bir matris üretmek amacıyla kullanılır.
 Üretilmek istenen matris kare bir matris ise
yani n satır sayısı, m sütun sayısına eşit ise
ones(n,n)
yerine
sadece
ones(n)
kullanılabilir.
>> ones(1,3)
ones(3,5) deyimi acaba
>> ones(3,1)
ceil(rand(3,5)) deyimi ile aynı
sonucu üretir mi?
>> ones(4,4)
>> ones(4)
>> ones(3,5)
DÖNGÜLER
 Birçok uygulamada bazı işlemlerin tekrar
tekrar gerçekleştirilmesi gerekir. Bizlere bu
imkanı sağlayan programlama yapılarına
döngü denir.
 MATLAB’de döngü oluşturmak amacıyla
kullanılan for ve while adında 2 tekrarlama
deyimi vardır.
DÖNGÜ OLUŞTURMA KURALLARI
1- Döngü değişkeninin başlangıç değeri belirlenir.
2- Döngü değişkeninin bitiş değeri belirlenir.
3- Döngü değişkeninin bitiş değerine ulaşıp ulaşmadığı test
edilir.
4- İstenen işlem gerçekleştirilir.
5- Döngü değişkeni, döngü içinde adım miktarı kadar
artırılır yada azaltılır.
for DÖNGÜSÜ
for döngü değişkeni = başlangıç:artış miktarı:bitiş
komutlar
end
for döngü değişkeni = başlangıç:bitiş
komutlar
end
artış miktarı otomatik olarak 1 atanır.
döngü değişkeni sayaç olarak da adlandırılır.
UYGULAMA
1 sayısı ile klavyeden girilen herhangi bir sayı
arasındaki ardışık sayıların toplamını
for
n sayısı 0 veya
hangi
döngüsü kullanarak hesaplayan negatifse
ve ekrana
toplam elde
basan bir düzyazı MATLAB programıedilir?
yazınız.
n=input('Lutfen Bir Sayi Giriniz : ');
toplam=0; %Toplamada Etkisiz Eleman
for i=1:n
toplam=toplam+i;
%fprintf('Toplam = %d \n',toplam);
end
fprintf('Toplam = %d \n',toplam);
for i=5:1
Yandaki for döngüsü kaç kere
işletilir?
end
for i=1:-1:5
Yandaki for döngüsü kaç kere
işletilir?
end
while DÖNGÜSÜ
while koşul
işlem_1
işlem_2
işlem_n
end
koşul denilen şey sonucu BİR veya
SIFIR olan bir eşitlik testi, karşılaştırma
işlemi veya mantıksal bir test olabilir.
UYGULAMA
Ekrana adınızı ve soyadınızı 10 kez yazan bir
MATLAB programını while döngüsü kullanarak
oluşturunuz.
i=1; %sayac
while i<=10
disp('Deniz Dal');
i=i+1;
end
% for Dongusu ile Cozum
for i=1:10
disp('Deniz Dal');
end
UYGULAMA
1 sayısı ile klavyeden girilen herhangi bir sayı
arasındaki ardışık sayıların çarpımını while döngüsü
kullanarak hesaplayan ve ekrana basan bir düzyazı
MATLAB programı yazınız.
n=input('Lutfen Bir Sayi Giriniz : ');
carpim=1; %Carpmada Etkisiz Eleman
Bu satır
çözümden
çıkarılırsa ne
olur?
i=1;
while i<=n
carpim=carpim*i;
i=i+1;
Komut penceresi kontrolünü
kaybettiğinizde (mesela
programınız sonsuz bir döngünün
içerisine girdiyse) CTRL+C tuş
kombinasyonunu kullanabilirsiniz.
%fprintf('Carpim = %d \n',carpim);
end
fprintf('Carpim = %d \n',carpim); %Faktoriyel ??????
UYGULAMA
Asağıdaki while döngüsü kaç kere işletilir?
devamEt=1;
i=0; %sayac
while devamEt
disp('Deniz Dal');
i=i+1;
end
Yandaki programı ekrana 10 kere
“Deniz Dal” yazacak şekilde nasıl
modifiye edersiniz??????
break DEYİMİ
for veya while döngülerinde program akışını kontrol edebilmenin bir yolu
break deyimini kullanmaktır. break deyimini döngü gövdesi içerisinde
kullanmak, döngünün aniden sonlandırılmasını ve döngüden sonra gelen
ilk ifade veya komutun işletilmesini sağlar.
for i=1:10
if i==4
break;
end
fprintf('i=%d\n', i);
end
continue DEYİMİ
Genellikle for döngülerinde, program akışı ayrıca continue deyimi ile kontrol
edilebilir. continue deyimi işletildiğinde continue deyiminden sonraki bütün
herşey ihmal edilir ve döngü değişkeni güncellenerek döngü bir sonraki
iterasyona başlar.
for i=1:10
if i==4
continue;
end
fprintf('i=%d\n', i);
end
Döngülerin Matrislerde
Kullanımı
• Matrisler çoğu programlama dilinde dizi yada
array olarak adlandırılır. Arraylar aynı anda
ve aynı türden birden çok sayı, harf yada
karakteri hafızada tutmak için kullanılır.
• Sabit bir matris tanımlamak için komut
satırına;
• Matris=[1,2,5] yazılması yeterli idi.
• Ancak klayyeden girilen değerleri tutmak
istediğimizde mutlaka döngülerden
yararlanırız.
Matrislere Değer Girme
• 1*5 lik matrise klavyeden değer girişi
aşağıdaki gibidir.
for i=1:5
matris(i)=input(‘Sayı giriniz’);
End
Matrisleri yazdırma
Önceki slaytta girilen matrisi yazdırmak için iki
yol vardır.
1. disp komutuyla;
disp(matris)
2. fprintf komutuyla;
for i=1:5
fprintf(‘%d’,matris(i));
End
İç İçe for Döngüleri
Özellikle 2 boyutlu matris işlemlerinde sıkça kullanılır.
Örneğin 3*3 lik bir matrisi ekrana fprintf ile yazdırmak istediğimizde
aşağıdaki döngü yapısını kullanmalıyız.
matris=[1,2,3;1,2,3;1,2,3];
for i=1:3
for j=1:3
fprintf('%d',matris(i,j));
end
fprintf('\n');
end
Örnek
3*3 lük matrisin tüm elemanlarının toplamı yazan matlab
programı
topla=0;
for i=1:3
for j=1:3
dizi(i,j)=input('sayı gir');
topla=topla+dizi(i,j);
end
end
disp(dizi);
disp(topla);
UYGULAMA
Çarpım tablosunu
programı.
ekrana
basacak
bir
MATLAB
for i=1:10
for j=1:10
carpim=i*j;
fprintf('%d*%d=%d\n', i, j, carpim);
end
disp('-----------------------');
end
Örnek
1*5 lik matrisin en büyük ve en küçük elemanını bulma.
topla=0;
matris=[8,12,2,15,6];
enb=matris(1);
enk=matris(1);
for i=2:5
if matris(i)>enb
enb=matris(i);
elseif matris(i)<enk
enk=matris(i);
end
end
disp(matris);
disp(enb);
disp(enk);
Örnek
1*5 lik matrisi büyükten küçüğe sıralama
matris=[8,12,2,15,6];
disp(matris)
for i=1:4
for j=i:5
if matris(i)>matris(j)
depo=matris(i);
matris(i)=matris(j);
matris(j)=depo;
end
end
end
disp(matris);
FONKSİYONLAR
Fonksiyonlar
da
bilgisayar
programlarıdır.
Bilgisayarlar yardımıyla çözülmeye çalışılan
problemler fonksiyonlar sayesinde yönetilmesi
daha kolay, küçük parçacıklara bölünürler. Bu
metoda “Böl ve Yönet” ya da “Divide and
Conquer” adı verilir. Her fonksiyon:
•
•
•
Kendine özgü bir isme sahiptir.
GENELLİKLE kendine, üzerinde işlem yapacağı bir
argüman (parametre) ya da argümanlar (parametreler)
alır.
GENELLİKLE geriye bir değer döndürür. (skaler, vektör
ya da matris.)
FONKSİYON M-DOSYALARI
Bir fonksiyon m-dosyasının iki bileşeni vardır:
1 – Fonksiyonun imzası veya prototipi
(İlk satırda tanımlanır.)
2 – Fonksiyonun tanımı (yapması gereken iş)
(İkinci satırdan başlar ve devam eder.)
M-Fonksiyon Yapısı
function cikis_ifadesi1, 2,…, n =fonksiyon_adi (giris_ifadesi1, 2, …n)
M-Fonksiyonlar kullanılırken dikkat edilecek hususlar:
1- Kullanıcılar kendi fonksiyonlarını yazmak için m-fonksiyonlarını
kullanabilirler.
2- Function alt programı ve ana program şeklinde iki program yazılarak bu iki
program ayrı ayrı kaydedilir.
3- Alt programdaki fonksiyon_adı, m-dosyasına verilen isimle aynı olmalıdır.
4- Ana programdan alt program, function adı kullanılarak çağrılır.
5- Alt programdan da ana programa geçiş yapılabilir fakat genelde tercih
edileni tersidir.
6- Parametre aktarımı olması durumunda alt ve ana programda eşit sayıda
parametre ve giriş değişkeni olmalıdır.
function cikis_ifadesi1, 2,…, n =fonksiyon_adi (giris_ifadesi1, 2, …n)
Örnek: İki nokta arasındaki uzaklığı bulan programı m-fonksiyon
(alt program) kullanarak yazınız.
x1=1.noktanın x koordinati; x2=2.noktanın x koordinati
y1=1.noktanın y koordinati; y2=2.noktanın y koordinati
FUNCTION ALT PROGRAMI (uzak.m):
function uzaklik = uzak(x1,y1,x2,y2)
uzaklik=sqrt((x2-x1)^2+(y2-y1)^2);
fprintf(‘iki nokta arasindaki uzaklık=%f’,uzaklik);
Bu function alt
programı
uzak.m olarak
kaydedilir.
ANA PROGRAM:
sonuc = uzak(3,4,1,2); % uzak.m alt programını çağırıyor
Adım adım gerçekleştirilen işlemler:
 Ana program herhangi bir isimle kaydedilir ve koşturulur.
 Program, function adına (uzak) geldiği zaman alt program çağrılır
ve ax, ay, bx, by parametreleri sırasıyla x1, y1, x2, y2 giriş
değişkenlerine aktarılır.
 Function alt programında hesaplama gerçekleştirilir.
 Function’daki çıkış değişkeni olan uzaklik alt programda kullanılmakta
ana programda aynı değer sonuc değişkeninde saklanır.
 Alt programdan ana programa parametre aktarımı zorunlu değildir.
İstenirse değişkenlerin değerleri alt programda da girilebilir ve sonuç
alt programda yazdırılabilir.
Uygulama: Yukarıdaki örneği ana programdan alt programa parametre
aktarımı yapmadan yeniden yazınız.
(Değişkenlerin girilmesi, sonucu hesaplama ve yazdırma işlemi alt
programda yapılacaktır)
FUNCTION ALT PROGRAMI:
function uzaklik = uzak
x1=3; y1=4; x2=1; y2=2;
uzaklik=sqrt((x2-x1)^2+(y2-y1)^2);
fprintf(‘iki nokta arasindaki uzaklık=%f’, uzaklik);
ANA PROGRAM:
uzak; % uzak.m alt programını çağırıyor
DOSYA YÖNETİMİ
 Şu ana kadar bir programda hesaplanan veya elde edilen
veriler RAM’de saklanacak şekilde tanımlanmıştı. Yani,
bilgisayar kapatıldığında veya MATLAB
programı sona
erdirildiğinde veriler de kaybolmaktaydı.
 Oysa pek çok uygulamada elde edilen veriler daha sonra
kullanılmak üzere saklanması gerekir. Bunun için verilerin bir
dosyaya yazılması gerekmektedir.
MATLAB ’de VERİ GİRİŞ-ÇIKIŞ FONKSİYONLARI
Dosya açma: fopen
fopen komutu bilgi kaydetmek için veri dosyası açar veya
oluşturur. Yazım formatı:
İfade = fopen(‘dosya adı’,’izin’)
Burada:
ifade-> dosya değişkeni
dosya adı->verilerin kaydedileceği dosyanın adı
izin-> dosyanın kullanım izni : r,w,.., vs.
İzin Tipleri:
Tipler
Açıklama
‘r’
Dosyayı sadece okumaya açar (yazmaya izin vermez)
‘r+’
Dosyayı yazmaya ve okumaya açar
‘w’
Varolan bir veri dosyasının içindekini siler, dosya yoksa
oluşturur ve dosyayı yazmaya açar
‘w+’
Varolan bir veri dosyasını yazmak için açar, dosya yoksa
oluşturur ve dosyayı okumaya ve yazmaya açar
‘a’
Varolan bir veri dosyasını yazmak için açar, dosya yoksa
oluşturur ve girilecek bilgileri dosya sonuna ekler
‘a+’
Varolan bir veri dosyasını okumak ve yazmak için açar, dosya
yoksa oluşturur ve girilecek bilgileri dosya sonuna ekler
Dosya kapama: fclose
Dosya yazma ve/veya okumaya açılan dosyanın
MATLAB ’den ilişkisini kesmeye (dosyayı
kapamaya) yarayan komuttur.
Kullanımı:
Sonuc=fclose(ifade)
Dosyaya bilgilerin kaydedilmesi: fprintf
Verilerin ekrana yazılmasında kullanılan fprintf fonksiyonu, aynı
zamanda fopen komutuyla açılmış dosyaya yazmakta da
kullanılır.
Kullanımı:
fprintf (ifade=‘%format%format%format….%format’,değişken1,
değişken2,değişken3, …….)
Örnek
Aşağıda verilen M dizisini (vektörünü) bir dosyaya kaydeden bir
MATLAB programı yazınız
For döngüsü ile:
M=[1 2 3 4];
M=[1 2 3 4];
a=fopen('veri.dat','w');
a=fopen('veri.dat','w');
fprintf (a,'%d %d %d %d',M);
for i=1:4
fclose(a);
fprintf(a,'%d ',M(i));
end
fclose(a);
Örnek
Aşağıda verilen matrisi “veri.dat” dosyasına
kaydeden bir MATLAB programı yazınız.
A=[1 5 11 ; 2 4 5];
a=fopen('veri.dat','w+');
for i=1:2
for j=1:3
fprintf(a,'%d ',A(i,j));
end
end
fclose(a);
veri.dat isimli dosyayı
silmeden A dizisini bu
sonuna eklemek
için hangi ‘izin’
kulanılmalıdır?
Dosyadan bilgilerin okunması: fscanf
fscanf: Formatlanmış verileri içeren dosyadan değerleri okuma
komutudur ve yazılımı:
[değişken, sayi] = fscanf (ifade,’format’,alan)
Burada;
değişken: okunan değerlerin atandığı değişken
sayi
: okunan data sayısı
alan
: inf ile verilerin tamamını okunması sağlanır
Örnek
Aşağıda verilen vektörü bir dosyadan
okuyup b değişkenine atayan MATLAB
programı
veri.dat
1 5 11 2 4 5
clear all
clc
a=fopen ('veri.dat', 'r' );
[b,sayi]=fscanf(a,'%d ',inf);
fclose(a);
b