MATLAB Programlama Notları

Benzer belgeler
Algoritmalar ve Programlama. DERS - 4 Yrd. Doç. Dr. Ahmet SERBES

MATLAB Semineri. EM 314 Kontrol Sistemleri 1 GÜMMF Elektrik-Elektronik Müh. Bölümü. 30 Nisan / 1 Mayıs 2007

DENEY 1: Matlab de Temel Uygulamalar

k ise bir gerçek sayı olsun. Buna göre aşağıdaki işlemler Matlab da yapılabilir.

Yukarıdaki program çalıştırıldığında aşağıdaki sonucu elde ederiz.

STEM komutu ayrık zamanlı sinyalleri veya fonksiyonları çizmek amacı ile kullanılır. Bu komutun en basit kullanım şekli şöyledir: stem(x,y).

BM202 SAYISAL ÇÖZÜMLEME

2.3. MATRİSLER Matris Tanımlama

T.C. KOCAELİ ÜNİVERSİTESİ MEKATRONİK MÜHENDİSLİĞİ OTOMATİK KONTROL SİSTEMLERİ DERSİ MATLAB UYGULAMA NOTLARI-1

Matlab da 2-boyutlu Grafik Çizimi. Arş. Gör. Mehmet Ali ÜSTÜNER

MATLAB. Temel işlemler, Vektörler, Matrisler DOÇ. DR. ERSAN KABALCI

MATLAB'A GİRİŞ. Contents

Uzaktan Algılama Teknolojileri

MATLAB a GİRİŞ. Doç. Dr. Mehmet İTİK. Karadeniz Teknik Üniversitesi Makine Mühendisliği Bölümü

NĐĞDE ÜNĐVERSĐTESĐ Elektrik Elektronik Mühendisliği Bölümü. Devre Tasarımı Ders Notları MATLAB. Arş. Gör. Salim ÇINAR. salim çınar

CONTROL LAB1 MATLAB GİRİŞ

Matlab. Vektör ve Matris İşlemleri

Matlab - Giriş (İleri Yapı Statiği II. Kısım)

AST415 Astronomide Sayısal Çözümleme - I. 7. Grafik Çizimi

Bilgisayar Programlama MATLAB

MATLAB Temelleri. EEM104 - Bilgisayar Programlama. Matlab ın Açılış Ekranı. Dr. Mehmet Siraç Özerdem EEM Dicle Üniversitesi. Launch Pad.

Bilgisayar Programlama MATLAB

Grafik Komutları. Grafik Türleri plot: çizgisel grafikler bar: sütun bar şeklindeki grafikler stem: sütun çizgisel grafikler pie: pasta grafikleri

Matlab da Dizi ve Matrisler. Mustafa Coşar

MATLAB DE 2 BOYUTLU GRAFİK TÜRLERİ

14 Şubat 2011 Pazartesi günü uygulamada çözdüğümüz 2. Soruyu, aynı sıra ile bu defa MATLAB kullanarak çözelim.

Ders 5 : MATLAB ile Grafik Uygulamaları

MATLAB de GRAFİK İŞLEMLERİ

İM 205-İnşaat Mühendisleri için MATLAB. Irfan Turk Fatih Üniversitesi,

1. GİRİŞ 1.1. GENEL BAKIŞ 1.2. KULLANICI ARAYÜZÜ

Skalar,vektör ve matris değişkenlerle işlemler:

MATLAB İLE PROGRAMLAMAYA GİRİŞ. Nedim TUTKUN Elektrik Elektronik Mühendisliği Bölümü

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Kodumuzu yazmaya zaman eksenini, açısal frekans ekseni ve örnekte verilen M değerlerini bir vektör içinde tanımlayarak başlayalım.

1- Temel MATLAB Fonksiyonları ve Programlama

FONKSİYONLAR. Giriş argümanlarına karşılık gelen çözümü çıkış argümanları olarak sonuçlandırır. Fonksiyondosyalarıkendiçalışmaalanındaki

>> 5*3-4+6/2^0 ans = 17 ( Matlab da sayılar arası işlemler [ +, -, /, *, ^ ] bu şekilde ifade edilmektedir.)

Yrd. Doç. Dr. A. Burak İNNER

SAYISAL ANALİZ. Doç.Dr. Cüneyt BAYILMIŞ. Sayısal Analiz. Doç.Dr. Cüneyt BAYILMIŞ

BİLGİSAYAR PROGRAMLAMA VE FİZİKTE PROGRAMLAMA DERSLERİ İÇİN MATLAB ÇALIŞMA NOTLARI. Mehmet ÖZKAN

disp VEYA fprintf KOMUTLARIYLA EKRANA MESAJ YAZDIRMA

MatLab. Mustafa Coşar

MATLAB Temelleri. EE-346 Hafta 2 Dr. Ayşe DEMİRHAN

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir.

MATLABA GİRİŞ 1. MATLAB. Komut penceresi. MATLAB adı, MATrix LABoratory (Matrix Laboratuarı) kelimelerinden gelir.

Burada dikkat edilmesi gereken nokta, bilinmeyen veya değişkeninizi yazarken diğer bilinmeyenler ile arasına boşluk koymanız gerektiğidir.

LABORATUVAR ÇALIŞMASI 1 - Python a Giriş

BİLGİSAYAR PROGRAMLAMA DERSİ

Bilgisayar Programlama MATLAB

Fonksiyonlar (Altprogram)

M-Dosyaları. Editor: Kodların yazıldığı kısımdır. Uzantısı.m olan dosyalarla çalışır.

Excel' de formüller yazılırken iki farklı uygulama kullanılır. Bunlardan;

MATLAB ile ANALİZ (MIA)

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

MATLAB. Fen ve Mühendislik Uygulamaları ile. Doç. Dr. M. Akif CEVİZ. MATLAB de Dizi Kavramı

MATLAB Kullanımı. [ sqrt(-6)] a = [ ; ; 1 sqrt(-6)] a=[] clear a. a=[ 3, , 9, 10 ] a= [a ] a=[ 1 2 a ]

MATLAB DA 2 BOYUTLU GRAFİK İŞLEMLERİ

Ayrık Fourier Dönüşümü

MATLAB PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR UYGULAMALARI Şırnak Üniversitesi Mühendislik Fakültesi Güz Dönemi Arş.Gör. Eren DEMİR ve Arş.Gör. Veysel KIŞ (

Nargin - Nargout. Bir fonksiyonda giriş parametrelerinin kontrolü Nargin = number of argument input

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

Cebir 1. MIT Açık Ders Malzemeleri

Microsoft Excel. Çalışma Alanı. Hızlı Erişim Çubuğu Sekmeler Başlık Formül Çubuğu. Ad Kutusu. Sütunlar. Satırlar. Hücre. Kaydırma Çubukları

İşletme Fakültesi Bil. Kullanımı Ders notları 2

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

MATLAB İLE PROGRAMLAMAYA GİRİŞ. Nedim TUTKUN Elektrik Elektronik Mühendisliği Bölümü

GNUPLOT ÇİZİM PROGRAMI

Temel Bilgi Teknolojileri - II Ayrıntılı Ders İçerikleri

Dr. Fatih AY Tel:

GÖRÜNTÜ İŞLEME MATLAB DERS-2

GÖRÜNTÜ İŞLEME DERS-2

ideal Sistem Tester Kullanım Klavuzu

KENDİ ÇİZİM PROGRAMIMIZI OLUŞTURALIM

Lineer Cebir. Doç. Dr. Niyazi ŞAHİN TOBB. İçerik: 1.1. Lineer Denklemlerin Tanımı 1.2. Lineer Denklem Sistemleri 1.3. Matrisler

1 NEDEN PROGRAMLAMA ÖĞRENMELIYIZ?

Genel Programlama II

Fen ve Mühendislik Uygulamalarında MATLAB

İçindekiler. Kaynakça

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

İM 205-İnşaat Mühendisleri için MATLAB. Irfan Turk Fatih Üniversitesi,

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

EXCEL DE ARİTMETİKSEL İŞLEMLER

AKT 305 Aktüeryal Yazılımlar Ödev 1 Yanıtları Soru 1. Create a vector x with the elements...

Kabuk Programlama (Bash)

MATLAB İLE PROGRAMLAMAYA GİRİŞ. Nedim TUTKUN Elektrik Elektronik Mühendisliği Bölümü

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

Karmaşık Sayılar Karmaşık Sayı Yaratma

MATLAB MATLAB MAT LAB MAT LAB MATLAB

Bilgisayar Programlama

EXCEL FORMÜLLER, FONKSİYONLAR

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Kırım Filtresi ve Alt Örnekleme

MATLAB ve Simulink Kullanımına Giriş

5S7 OYUN YAZIYORUM GENEL BAKIŞ A. PROJE - YILDIZ TOPLAYAN ÇOCUK

BİLGİSAYAR PROGRAMLAMA DERSİ

Elemanter fonksiyonlarla yaklaşım ve hata

Transkript:

MATLAB Programlama Notları v 0.1 İsmail Arı 1 Nisan 2008 1

Matlab Programlamaya Giriş Görüntü işleme kodlarını anlamak için öncelikle MATLAB bilmek gerekiyor. Biraz baktım da, internette derli toplu Türkçe bir MATLAB programlama kaynağı yok. Daha doğrusu olanlar o kadar yavaş ilerliyor ki... Programlama bilip de hızlıca MATLAB öğrenmek isteyenlere pek uygun gözükmüyor. Güzel bir kaynak olduğunu düşündüğüm kodları açıklamalarıyla birlikte göndereyim istedim. Aşağıdaki kodları MATLAB komut satırına sırası ile girip sonuçlarını gözlemleyerek güzel bir başlangıç yapabilirsiniz. Şimdilik yüzeysel bir ders ( tutorial ) oldu.. Biraz (!) zamanımı alıyor açıkçası. Eklemeler olursa sonraki yazı(lar)da genişletirim. Daha sonra da rahatça görüntü işleme çalışmalarına başlayabileceğim. Buyurun, temel MATLAB programlamaya hızlıca giriş notları... İçindekiler Başlamadan MATLAB de Temel Veri Yapıları Vektör ve Matrisler Üzerinde Basit İşlemler Kontrol İşlemleri ve Vektörleme (Vectorization) Değişkenleri/Oturumu Kaydetmek m-dosyaları ile Betikler ve Fonksiyonlar Yazma: Grafik Çizdirme Karmaşık Sayılarla İşlemler Başlamadan % sembolü yorumlar icin kullanılır (satır sonuna kadar) ipucu: Birden fazla satir icin hataayiklama diye global bir değişken tanımlayıp if hataayiklama islemler end şeklinde yazabilirsiniz Tek satırda kullanmak için oldukça uzun olan bir işlem yazacağınız zaman alt satıra geçtiğinizi belirtmek amacıyla satır sonuna... ekleyin. Ör: A = [1, 2;... 3, 4]; 2

İşlem sonuna noktalı virgül konulursa MATLAB sonucu ekrana basmaz. Eğer ; eklemezseniz sonuç görüntülenir. Değişkenlerin değerlerini görmek için faydalıdır. Ör: A İşlere girişmeden önce clear ile ortamdaki değişkenleri temizleyelim ve clc ile de komut ekranını temizleyelim clear clc MATLAB komut satırı komut sistemine (kabuk) benzetilebilir: Komutları tekrar yazmak yerine yukarı oku kullanın ( benzer şekilde geçmiste ileriye gitmek için ise aşağı oku kullanabilirsiniz ) Önce birkaç karakter yazarsanız, yukarı/aşağı okla o karakterlerle başlayan komutları gezebilirsiniz. Bu size çok hız kazandıracaktır Komut satırındayken Ctrl-a satır basina, Ctrl-e satir sonuna gider Ctrl-f bir karakter ileri (sağa ok), Ctrl-b bir karakter geri (sola ok) gider Ctrl-d bir karakteri, Ctrl-k satirin sagda kalanini siler Ctrl-p komut geçmişinde bir öncekine (yukarı ok) gider Ctrl-n komut geçmişinde bir sonrakine (aşağı ok) gider Tab komut tamamlamaya yarar Basit hata ayiklama: Eğer dbstop if error çalişma sırasında hata veren bir betiği/fonksiyonu çalıştırmadan önce yazılmışsa, program hatanın olduğu yerde durur. Hata ayıklamak icin çok işe yarayabilir. Ama bana kalırsa en temizi breakpoint koyarak hata ayıklamaktır. Program o noktaya geldiğinde istediğiniz değişkeni gözlemleyebilirsiniz. MATLAB de Temel Veri Yapıları (A) MATLAB de temel yapılar: skalar sayılar ( genellikle double -kesinliğinde gerçel sayılar), vektörler ve matrislerdir: Not: Aslinda bunlarin hepsi birer matristir. bir matrisdir. Örneğin skalar bir sayı 1x1lik 3

2x2lik matrisler yaratalım. Matris yaratmanın en basit yolu elemanlarını kare parantez içinde yazmaktır. ; sembolu satırları, (isteğe bağlı), ise sütunlari ayırır. A = [1 2; 3 4]; B = [1,2; 3,4]; Görüldüğü üzere noktalı virgülle bitirdiğimiz için sonuçlar ekrana basılmadı. Şimdi skalar bir değer oluşturalım. Ben örneklerde, sonuçları görmek için sonlarına ; eklemeyeceğim. Siz isterseniz ekleyebilirsiniz. Sonuçları bize döndürdüğü için MATLAB i çk gelişmiş bir hesap makinesi olarak düşünebiliriz. N = 5 N = 5 Satır ve sütun vektörleri oluşturalım. Matris tanımı içinde ; kullanırsak alt satıra geç demek oluyor. v = [1 0 0] v = [1; 2; 3] v = 1 0 0 v = 1 2 3 v vektörünün transpozesini alalım. Dikkat: Tek tırnak sembolü eşlenik transpoze içindir. Karmaşık sayılarla çalışırken hangisini kullandığınız önemlidir. 4

v = v. v = 1 2 3 Vektör değerlerini teker teker yazmak zor sanki böyle. Gelin kolayına kaçıp belli aralıklar ile doldurulmus vektör oluşturalım. Kullanım: [baslangic:adım:bitis] v = 1:.5:3 v = pi*[-4:2:4]/4 % (kare parantezler istege bağlı) v = 1.0000 1.5000 2.0000 2.5000 3.0000 v = -3.1416-1.5708 0 1.5708 3.1416 Başka bir yol da mümkün: linspace(baslangic,bitis,kac parca) v = linspace(1,3,5) v = 1.0000 1.5000 2.0000 2.5000 3.0000 Peki boş değişken oluşturmak isteseydik v = [] v = [] 5

(B) Özel matrisler oluşturma: İlk parametre SATIRSAYISI, 2. parametre SUTUNSAYISInı belirtir 2x3lük sıfır ve bir matrisleri oluşturalım m = zeros(2, 3) v = ones(2, 3) m = 0 0 0 0 0 0 v = 1 1 1 1 1 1 3lük birim matris oluşturalım m = eye(3) m = 1 0 0 0 1 0 0 0 1 Rasgele sayılar içeren 3x1lik matris (sütun vektörü); randn e de bakınız v = rand(3, 1) v = 0.1084 0.9835 0.2483 6

Dikkat: Eğer iki değil de bir parametre verirsek, örneğin 3x3luk sıfır matrisi oluşturur (vektör değil!) m = zeros(3) m = 0 0 0 0 0 0 0 0 0 (C) Vektör ve matrisleri indeksleme: Uyarı: İndeksler her zaman 1 ile başlar (0 ile değil)! Vektör elemanına ulaşma v = [1 2 3]; v(3) 3 2. elemanı silmek isteseydik v(2) = [] v = 1 3 Matris bir tane elemanına ulaşmak için matris(satir No, SUTUN No) m = [1 2 3 4; 5 7 8 8; 9 10 11 12; 13 14 15 16] m(1, 3) m = 1 2 3 4 7

5 7 8 8 9 10 11 12 13 14 15 16 3 Matrisin tüm satırına ulaşma (2. satır) ve tüm sütununa ulaşma (1. sütun) m(2, :) m(:, 1) 5 7 8 8 1 5 9 13 1. satırın 1 den 3 e kadar (dahil) elemanları m(1, 1:3) 1 2 3 2. sütunun 2 den 3 e kadar (dahil) elemanları m(2:3, 2) 7 10 8

Anahtar sözcük end satır/sütun daki son elemana kadar demektir m(2:end, 3) 8 11 15 Matrisin boyutunu gösterelim m = [1 2 3; 4 5 6] size(m) m = 1 2 3 4 5 6 2 3 Satır sayısı size(m, 1) 2 Sütun sayısı size(m, 2) 3 9

m ile aynı boyutta yeni bir matris oluşturmak istersek m1 = zeros(size(m)) m1 = 0 0 0 0 0 0 Şu ana kadar bir hayli çalıştık. Çalışma alanindaki değişkenleri görelim who Your variables are: A B N ans m m1 v Değişkenleri boyut, tip, vb. bilgileriyle görelim whos Name Size Bytes Class Attributes A 2x2 32 double B 2x2 32 double N 1x1 8 double ans 1x1 8 double m 2x3 48 double m1 2x3 48 double v 1x2 16 double Bu arada, ans diye gözüken değişken en son yaptığımız ve herhangi bir değişkene atamadığımız değer. Yani answer demek. Vektör ve Matrisler Üzerinde Basit İşlemler (A) Eleman bazında yapılan işlemler: Bu işlemler eleman eleman yapılan işlemlerdir. Eğer iki vektör/matris toplama, çıkarma, çarpma veya bölme işlemine sokulacaksa aynı boyutta olmalıdır. 10

Sütun vektörünü skalar ile çarpma ve skalara bölme a = [1 2 3 4] ; 2 * a 2 4 6 8 a / 4 0.2500 0.5000 0.7500 1.0000 Vektörlerde toplama (matrislerde de aynı) ve çıkarma b = [5 6 7 8] ; a + b 6 8 10 12 a - b -4-4 -4-4 11

Eleman eleman kare alma, çarpma ve bölme.. ya dikkat edin! Normal semboller matris çarpma ve bölmesi demek! a.^ 2 1 4 9 16 a.* b 5 12 21 32 a./ b 0.2000 0.3333 0.4286 0.5000 Eleman eleman logaritma alma ve en yakın tamsayıya yuvarlama. log([1 2 3 4]) 0 0.6931 1.0986 1.3863 12

round([1.5 2; 2.2 3.1]) 2 2 2 3 Benzer sekilde eleman eleman işlem yapabilen birçok fonksiyon vardır. Ör: : floor, ceil,... ipucu: MATLAB yorumlayıcı olduğu için döngülerde yavaş çalışır. O yüzden kullanacağınız işlemleri eleman bazında işlemler şeklinde tanımlamak işleri hızlandırır. bakınız: (4) Vektörleme (B) Vektör işlemleri Vektörlerde işlem yapan önceden tanımlı bazı MAT- LAB fonksiyonları a = [1 4 6 3] a = 1 4 6 3 Vektör elemanlarının toplamı sum(a) 14 Vektör elemanlarının aritmetik ortalaması mean(a) 3.5000 13

Vektör elemanlarının değişintisi (varyans) var(a) 4.3333 Standart sapma std(a) 2.0817 En yüksek ve en düşük değerler max(a) 6 min(a) 1 Eğer matris üzerinde işlem yapılırsa, bu fonksiyonlar matrisin her bir sütununda işlem yaparlar ve sonuç olarak bir satır vektörü döndürürler a = [1 2 3; 4 5 6] a = 1 2 3 4 5 6 14

Her sütunun ortalaması mean(a) 2.5000 3.5000 4.5000 Her satırın en yüksek değeri max(a) 4 5 6 Matristeki en yüksek değer max(max(a)) 6 Her satırın ortalaması (ikinci arguman hangi boyutta işlem yapilacagini gösterir) mean(a, 2) 2 5 Vektörlerde çarpma ve bölme işlemlerine geçelim. 1x3 satır vektörü ile 3x1 sütun vektörü çarpımı sonucu skalar elde ederiz. Nokta çarpımı veya iç çarpım olarak da bilinir.. kullanmadığımıza dikkat edin. [1 2 3] * [4 5 6] 15

32 3x1 sütun vektörü ile 1x3 satır vektörü çarpımı 3x3lük matris oluşturur. [1 2 3] * [4 5 6] 4 5 6 8 10 12 12 15 18 (C) Matris işlemleri: İki tane rasgele matris oluşturup çarpalım. Alttaki örnekte çarpım sonucu 3x4lük bir matris oluşacak. a = rand(3,2) b = rand(2,4) c = a * b a = 0.6064 0.4890 0.8167 0.7607 0.8301 0.9151 b = 0.9010 0.5471 0.1944 0.4756 0.2142 0.7847 0.7469 0.5833 c = 0.6511 0.7155 0.4832 0.5736 0.8988 1.0437 0.7270 0.8321 0.9439 1.1722 0.8449 0.9285 16

Vektör ve matrislerle başka denemeler yapalım a = [1 2; 3 4; 5 6]; b = [5 6 7]; b * a 58 76 c = [8; 9]; a * c 26 60 94 Matrisin tersini hesaplayalım. a = [1 3 2; 6 5 4; 7 8 9]; inv(a) -0.3333 0.2821-0.0513 0.6667 0.1282-0.2051-0.3333-0.3333 0.3333 a nın özdeğerlerinden oluşan vektör eig(a) 15.1601-1.6860 1.5258 17

Hesaplamışken özvektörleri de bulalım. D matrisi köşegende özvektörleri barındırır; V matrisi özvektörleri içerir. Bu, MATLAB ile birden çok değişken döndürülmesine de güzel bir ornek! [V, D] = eig(a) V = -0.2199-0.7374-0.2033-0.4671 0.6751-0.5675-0.8564-0.0224 0.7979 D = 15.1601 0 0 0-1.6860 0 0 0 1.5258 a nın singular value decomposition sonucu. a = U * S * V, a nın singular değerleri S de bulunur [U, S, V] = svd(a) U = -0.2097 0.4071-0.8890-0.5147-0.8190-0.2536-0.8313 0.4044 0.3813 S = 16.7157 0 0 0 2.0802 0 0 0 1.1216 V = -0.5454-0.8059 0.2302-0.5895 0.1736-0.7889-0.5959 0.5660 0.5697 18

Başka başka da matris fonksiyonları var: det, norm, rank,... (D) Matrisleri yeniden şekillendirme ve birleştirme: Önce bir matris oluşturalım. Daha sonra onu doğrusal bir vektöre çevirelim. Dikkat: Matrisleri diğer dillerdeki (c,c++,vb.) gibi satır satır değil de sütun sütun düşünmek gerekir. a nın sütunlarını ekleyerek yeni bir sütun vektörü oluşturuyoruz. a = [1 2; 3 4; 5 6]; b = a(:) b = 1 3 5 2 4 6 Tüm elemanların toplamını almak isteseydik sum(a(:)) 21 b vektörünün elemanlarından 2x3lük bir matris oluşturalım (yine sütun sütun) a = reshape(b, 2, 3) a = 1 5 4 3 2 6 19

İki tane satır vektörünü yatay olarak birleştirelim. (horzcat a bakınız.) a = [1 2]; b = [3 4]; c = [a b] c = 1 2 3 4 İki tane sütun vektörünü dikey olarak birleştirelim. (vertcat a bakınız.) a = [1; 2; 3]; b = [4; 5] c = [a; b] b = 4 5 c = 1 2 3 4 5 Benzer şekilde matrisleri de birleştirebiliriz. a = [eye(3) rand(3)] a = 1.0000 0 0 0.2605 0.9171 0.7630 0 1.0000 0 0.0848 0.4705 0.7722 0 0 1.0000 0.2981 0.2695 0.0213 b = [eye(3); ones(1, 3)] 20

b = 1 0 0 0 1 0 0 0 1 1 1 1 repmat kullanarak bir değişkeni ızgara şeklinde kopyalayabiliriz. değerleri 5 olan 3x2lik bir matris yapalım. Örneğin tüm b = repmat(5, 3, 2) b = 5 5 5 5 5 5 İlla ki tek değer olması gerekmezdi. Bir matrisi de klonlayabilirdik. Kullanım: repmat(kopyalanacak veri,satir sayisi,sutun sayisi) b = repmat([1 2; 3 4], 1, 2) b = 1 2 1 2 3 4 3 4 Verilen vektörle 3x3lük bir koşegen matrisi oluşturalım. b = diag([1 2 3]) b = 1 0 0 0 2 0 0 0 3 21

Kontrol İşlemleri ve Vektörleme (Vectorization) Döngüleri en azından bir dilde bildiğinizi bilerek hızlıca MATLAB de nasıl olduğuna bakalım. Kontrol işlemlerinin sentaksı: for DEGISKEN = DEGERLER islem... islem end DEGERLER döngünün hangi degerler icin yapılacağı vektör olmalıdır, örneğin: 1:10 veya -1:0.5:1 veya [1 4 7] while KOSUL islemler end if KOSUL islemler elseif KOSUL islemler else islemler end elseif ve else kısımları isteğe bağlıdır, end ise gereklidir. KOSUL lar genellikle ilişkilerden oluşur, örneğin a < b Operatörler:, <, >, <=, >=, ==, = (C deki! yerine kullanılır) KOSUL lar && (ve), (veya) ile kullanılabilir. Ör. a < b && ( c!= d \\ e >= f) Uyarı: Döngüler MATLAB de çok yavaş çalışır. İşlemlerinizi hızlandırmak için mümkün olan yerlerde vektörleme yapmalısınız. Ör: Kodunuzu matris işlemleriyle tekrar yazmalısınız. Aşağıda birkaç örnek bulacaksınız. 1 den 7 ye kadar 2 atlayarak döngü oluşturalım ve i yi ekrana basalım. for i=1:2:7 i end 22

i = 1 i = 3 i = 5 i = 7 Verilen bir vektör üstünde döngü oluşturalım. koyalım. İçine bir de if kontrolü for i=[5 13-1] if (i > 10) disp([int2str(i) sayısı 10dan büyük ]) elseif i < 0 disp([int2str(i) sayısı negatif bir sayı ]) else disp([int2str(i) sayısı 0 ile 10 arasında ]) end end 5 sayısı 0 ile 10 arasında 13 sayısı 10dan büyük -1 sayısı negatif bir sayı Başka bir örnek: A adında mxn lik bir matris ve v adında 1xnlik bir vektör verilmiş olsun, v yi A nın her satırından çıkarmak istiyoruz. m = 6; n = 3; A = ones(m, n) v = 2 * rand(1, n) 23

A = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 v = 1.7600 1.5963 0.6483 Döngü kullanarak şöyle yapabiliriz for i=1:m A(i,:) = A(i,:) - v; end Aynı işlemi yalnızca matris işlemleri kullanarak da yapabilirdik. Peki nasıl? A = ones(m, n) - repmat(v, m, 1) A = -0.7600-0.5963 0.3517-0.7600-0.5963 0.3517-0.7600-0.5963 0.3517-0.7600-0.5963 0.3517-0.7600-0.5963 0.3517-0.7600-0.5963 0.3517 Bu hali (özellikle bu işleme cok kez ihtiyaciniz varsa) işinizi hızlandıracaktır!!! Döngüler koşullu işlemler içerse dahi vektörleme yapabiliriz Örnek: mxn lik A matrisi verilsin, aynı boyutta tum degerleri sıfır olan bir B matrisi oluşturalım. Daha sonra B ye, A nın sıfırdan büyük olan elemanlarını kopyalayalım. Döngü kullanarak hesaplama: 24

B = zeros(m,n); for i=1:m for j=1:n if A(i,j)>0 B(i,j) = A(i,j); end end end B B = 0 0 0.3517 0 0 0.3517 0 0 0.3517 0 0 0.3517 0 0 0.3517 0 0 0.3517 Tüm bu işlemler hiç dongu kullanmadan yapılabilir! A nın 0 dan büyük elemanlarının indekslerini buluruz. B ye, A da bulunan indekslerdeki elemanları kopyalarız. B = zeros(m,n); ind = A > 0 ind = 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 B(ind) = A(ind) B = 0 0 0.3517 0 0 0.3517 0 0 0.3517 25

0 0 0.3517 0 0 0.3517 0 0 0.3517 Değişkenleri/Oturumu Kaydetmek Bugün oturduk, çalıştık... dedik... Yorulduk, aynı değişkenlerle sonradan çalışalım Alttaki kullanım tüm calışma alanı değişkenlerini dosyam.mat dosyasına kaydeder. Bulunduğunuz klasöre bir göz atın, dosya orada duruyor mu bakalım? save dosyam Sadece a ve b değişkenlerini kaydetmek isteseydik: save dosyam a b Peki bu iki değişkeni kaydetmek değil de silmek isteseydik: clear a b Tüm değişkenleri silelim: clear Kaydettiğimiz değişkenleri geri yükleyelim load dosyam m-dosyaları ile Betikler ve Fonksiyonlar Yazma: MATLAB ile betik dosyası oluşturma MATLAB betikleri.m uzantısı olan ve MATLAB kodları içeren dosyalardır. Dosya içindeki değişkenler global çalışırlar ve o anki MATLAB oturumunda ortamda bulunan aynı isimdeki değiskenleri değiştirir. betigim.m adındaki bir betiği betigim yazarak komut satırından çalıştırabilirsiniz. Mesela alttaki kodu betigim.m olarak kaydedin. a = 10; b = 2*a; 26

Şimdi de komut satırından şunları girelim a = 2; b = 3; betigim(); a a = 10 b b = 20 Görüldüğü üzere tanımladığımız değişkenler betik içinde yeni değerlere atandı. Bu tehlikeli olabilir. Gelin fonksiyon yazmaya geçelim. MATLAB ile fonksiyon yazma Fonksiyonlar da m-dosyalarıdır. Farklı olarak bir fonksiyonun ilk satırı söyle olmalıdır: function [sonuc1, sonuc2,..., sonucm] = fonksiyonum(arg1, arg2,...,argn) Fonksiyonun adı dosya adı ile aynı olmalıdır. Örnegin fonksiyonum fonksiyonu fonksiyonum.m dosyasına koyulmalıdır. Örnek olarak fonksiyonum.m ve digerfonksiyonum.m dosyalarına bakiniz. Fonksiyonlar lokal ortamda çalıştırırlar. Yani ana calışma alanındaki aynı isimdeki bir değişkeni kaybetme riskiniz yoktur. Fonksiyonun sonucunda sadece sonuc olarak dönen deüişkenler, çağıran fonksiyonun çalışma alanında görülür. Örnekleri yapmadan önce aşağıdaki fonksiyonları çalışma dizininize kaydedin. fonksiyonum.m: fonksiyon Tek girdi argumanı alan ve tek değer döndüren örnek 27

function y = fonksiyonum(x) a = [-2-1 0 1]; y = a + x; digerfonksiyonum.m: 2 girdi argumanı alan ve 2 değer döndüren örnek fonksiyon function [y, z] = digerfonksiyonum(a, b) y = a + b; z = a - b; a = [1 2 3 4]; b = fonksiyonum(2 * a) a b = 0 3 6 9 a = 1 2 3 4 Görüldüğü üzere a değeri değişmedi. örneğimizi çağıralım Şimdi de iki değişken döndüren [c, d] = digerfonksiyonum(a, b) c = 1 5 9 13 d = 1-1 -3-5 28

Grafik Çizdirme Belki MATLAB in en güçlü yanı çizebildiği çeşitli güzel grafiklerdir. Önce temel çizim fonksiyonumuz plot ile başlayalım. y = [0 1 5 2 3]; y yi indeks degerleri ile grafik olarak çizelim. Yani dikey eksen y nin değerleri olsun, yatay eksense 1 den başlayıp y nin boyuna kadar gitsin. plot(y) 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 1 1.5 2 2.5 3 3.5 4 4.5 5 İstersek yatay eksen değerlerini de verebiliriz. Üstüne axis ile görüntülenen sınırları belirleyebiliriz. Kullanımı: axis([enkucukx enbuyukx enkucuky enbuyuky]) x = linspace(0,1,length(y)); plot(x, y); axis([-0.5 1.5-0.2 5.2]); 29

5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 0.5 0 0.5 1 1.5 Normalde yeni bir figür çizdiğimizde en son aktif olan figürün üstüne çizilir. Eğer yeni bir figür açmak istersek figure yazabiliriz. Şimdi de bir sinüs grafiği çizelim ve biraz da süsleyelim. figure x = pi*[-24:24]/24; plot(x, sin(x)) xlabel( radyan ) ylabel( sinüs değeri ) title( Sinüs Grafiği ) 30

1 Sinüs Grafiði sinüs deðeri 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 4 3 2 1 0 1 2 3 4 radyan Bazen aynı figüre bir çizim yapmak yerine küçük pencereler halinde daha çok çizim yapmak isteyebiliriz. Bunun için de subplot imdadımıza yetişiyor. Kullanım: subplot(satir sayisi, sutun sayisi, su an cizilecek olanin indeksi) subplot(1, 2, 1) plot(x, sin(x)) axis square title( Sin grafiği ) subplot(1, 2, 2); plot(x, cos(x)); axis square title( Cos grafiği ) 1 Sin grafiði 1 Cos grafiði 0.5 0.5 0 0 0.5 0.5 1 4 2 0 2 4 1 4 2 0 2 4 31

Yukarıda görüntülenen alanları kare yaptık. Başka seçenekler de koyabilirdik. help axis ile görebilirsiniz. Şimdi de aynı çizim alanına birden fazla çizim yapalım. Bunun için hold on ve hold off kullanmamız gerekecek. Bu komutlarla yeni çizim yapılırken eski çizimin üstüne yapılıp yapılmayacağı belirlenir. İstersek plot(x1,y1,x2,y2,x3,y3,...) şeklinde de birden çok çizim yapabilirdik. Fakat böyle tercih etmemin sebebi çizimlerin özelliklerini ayrı ayrı belirleyebilmek. Alttaki örnekte : parametresi kesik çizgili doğru çizer. help plot ile doğru ve nokta şekillerine bakabilirsiniz. Pek çok güzel seçenek mevcut. legend ile de çizimlerin adlarını koyabiliriz. figure plot(x, sin(x), -g ); hold on plot(x, cos(x), --r ) legend( sin, cos ) hold off 1 0.8 sin cos 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 4 3 2 1 0 1 2 3 4 Bundan sonra tekrar çizim yapan fonksiyonlardan herhangi birini (plot, stem, bar, stairs, vb.) cağırırsanız eski çizim silinir ve sadece yeni çizim gözükür. Haydi örnek olarak stem fonksiyonu çizelim, biraz da varyete ekleyelim. stem(x,sin(x), --ro, LineWidth,2,... MarkerEdgeColor, k,... 32

title( Sin grafiği ) MarkerFaceColor, g,... MarkerSize,7) 1 Sin grafiði 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 4 3 2 1 0 1 2 3 4 Matrisleri resim gibi çizmeye bakalım. m = rand(16,16); imagesc(m) 33

2 4 6 8 10 12 14 16 2 4 6 8 10 12 14 16 Renklendirme haritasi olarak gri kullanalım, eksenleri silelim ve oranları pikseller kare görünecek şekilde sabitleyelim. colormap gray axis image axis off 34

İşimiz bitti, tüm figürleri kapatalım. Not: Sadece close kullansaydık şu anki figürü kapatırdık. close all İpucu: Eğer döngülerin içinde plot fonksiyonunu (veya diğer çizim fonksiyonlarını) cağırırsanız her döngüdeki sonuç yerine son sonucu gorebilirsiniz. Tüm çizim sonuçlarını animasyon şeklinde görmek için plot fonksiyonundan sonra döngü içine drawnow komutunu giriniz. Karmaşık Sayılarla İşlemler MATLAB de gerçel sayılar dışında karmaşık sayılarla da işlem yapılabilir. Karmaşık sayılar için complex veri tipi vardır. Karmaşık sayıları tanımlarken sanal değerleri için i veya j kullanılabilir. Daha önceden i veya j yi başka değerlere atadıysanız (örneğin bir döngüde sayaç olarak) sanal birim olarak kullanamazsınız. i ve j olarak ayrı ayrı olması mühendislerin j, fizikçilerin/matematikçilerin i kullanmasıdır. Biz her ihtimale karşı önceden tanımlanan i ve j değerlerini silelim ki sanal birim için güvenle kullanabilelim. 35

clear i j i i = 6 j j = 3 Değişik karmaşık sayılar oluşturalım x = 1 + 4i x = 1.0000 + 4.0000i x = real(x) + imag(x)*i x = 25 theta = pi/4 y = cos(theta) + sin(theta)*j theta = 0.7854 y = 2.8284 36

Yukarıdaki örneği, Euler formülünü kullanarak da hesaplayalım, bakalım aynı mı? y = exp(i*theta) y = 111.3178 Skalar değerler gibi, vektör ve matrisleri oluşturmak da mümkün: v = [x y 5-7i] v = 1.0e+002 * 0.2500 1.1132 0.0500-0.0700i A = [v;4+i 3-8j -2-2j] A = 1.0e+002 * 0.2500 1.1132 0.0500-0.0700i 0.1000 0.0300-0.0800i -0.0200-0.0200i B = rand(size(a)) + rand(size(a))*i B = 3.9253 2.1550 4.9717 3.1600 0.9662 1.8957 Şimdi transpoze ve eşlenik transpozeyi tekrardan hatırlayalım. Sadece tek tırnak koyarsak, bu elemanların eşleniğini de alır. Eşlenik almadan transpoze yapmak istersek. kullanmalıyız. 37

C1 = B C1 = 3.9253 3.1600 2.1550 0.9662 4.9717 1.8957 C2 = B. C2 = 3.9253 3.1600 2.1550 0.9662 4.9717 1.8957 Gerçel sayılardaki tüm işlemler karmaşık sayılarla da yapılabilir. Örneğin toplama, çıkarma, matris çarpımı, eleman eleman çarpım, fonksiyonlar, vb. A + B 1.0e+002 * 0.2893 1.1347 0.0997-0.0700i 0.1316 0.0397-0.0800i -0.0010-0.0200i A - B 1.0e+002 * 0.2107 1.0916 0.0003-0.0700i 0.0684 0.0203-0.0800i -0.0390-0.0200i A * A 38

1.0e+004 * 1.3091 0.0588 + 0.0915i 0.0588-0.0915i 0.0181 A.* B 1.0e+002 * 0.9813 2.3989 0.2486-0.3480i 0.3160 0.0290-0.0773i -0.0379-0.0379i sum(sum(a(:,1) * B(2,:))) 210.7658 mean(b(:)) 2.8456 Gerçel değerli değiskenler ile karmaşık değerli değişkenlerin sonucu karmaşık değerlidir. Bazı fonksiyonlar karmaşık değerler döndürebilir. dönüsümü karmaşık sayılar döndürür. Örneğin hızlı Fourier x = rand(8,1) 39

x = 0.2804 0.2594 0.5471 0.5413 0.7881 0.8696 0.7875 0.9694 y = fft(x) y = 5.0429-0.6364 + 0.9747i -0.2661 + 0.3817i -0.3790 + 0.4938i -0.2366-0.3790-0.4938i -0.2661-0.3817i -0.6364-0.9747i Sanırım başlangıç için bu kadar yeterli! yardımını kullanabilirsiniz. Takıldığınız yerde MATLAB in Artık rahatça resimleri matris şeklinde okuma ve üzerinde işlem yapma konularına geçebiliriz. Bir dahaki yazıda kaldığımız yerden devam edelim... http://www.cs.brown.edu/courses/cs143/matlabtutorialcode.html den çıkarak yeni birçok ekleme ile Türkçe ye uyarlanmıştır. yola İsmail Arı Son değiştirilme: 01.04.2008 40