Yapılar hücre dizileri gibi birbiriyle benzerliği olmayan bilgileri bir araya getirmek için kullanılır. Bilgiler tek bir değişkende toplanır yani yapıda.(structure) Şöyle tanımlanır:
READ MORE
S.fieldname=value; S:yapının adıdır, fieldname:alt daldaki etikettir, value: alt daldaki bu etiketin değeridir.
Eğer field name i bir değişkende taşımak ve bunu bir structure da kullanmak istiyorsak şöyle yapmamız gerekir:
a='fieldname';
S.(a)=value;
Ayrıca, structure bir fonksiyon için input olarak kullanılabilir.
İndeksleme normal parantezlerle veya direk field name ile yapılabilir. Örnekler:
S(2)
S.a
S(3).a
S([1,5])
S(1:4).a
y={S(1:4).a}
READ MORE
S(2)
S.a
S(3).a
S([1,5])
S(1:4).a
y={S(1:4).a}
Yapı dizileri herhangi bir boyutta olabilirler. Elemanlara parantezle erişilebilir. Örneğin:
S(1).a=4;
S(2).a=5;
S(1).b=46;
S(2).c=ones(3);
S(3).a=magic(2);
S(4).b='world';
S
S =
1x4 struct array with fields:
a
b
c
READ MORE
S(1).a=4;
S(2).a=5;
S(1).b=46;
S(2).c=ones(3);
S(3).a=magic(2);
S(4).b='world';
S
S =
1x4 struct array with fields:
a
b
c
Hücre dizileri herhangi bir tip veya boyuttaki dizileri birleştirmek için kullanılabilir. Teknik olarak bir hücre dizisindeki hücreleri birer işaretçi(pointers) gibi düşünebiliriz.
Hücre dizileri için hafızada ön ayırma yapabiliriz. Şöyle ki:
x=cell(m,n);
komutu mXn boyutunda boş bir hücre dizisi oluşturur.
Hücre dizilerini birleştirmek için süslü parantez { } ya da köşeli parantez [ ] kullanabiliriz.
Ayrıca süslü parantezler { } hücrenin içeriğine erişimimizi sağlarken normal parantezler ( ) hücrenin kendisine ulaşmamızı sağlar.
READ MORE
Hücre dizileri için hafızada ön ayırma yapabiliriz. Şöyle ki:
x=cell(m,n);
komutu mXn boyutunda boş bir hücre dizisi oluşturur.
Hücre dizilerini birleştirmek için süslü parantez { } ya da köşeli parantez [ ] kullanabiliriz.
Ayrıca süslü parantezler { } hücrenin içeriğine erişimimizi sağlarken normal parantezler ( ) hücrenin kendisine ulaşmamızı sağlar.
Matlabta dört tane işaretli ve dört tane işaretsiz olmak üzere toplamda sekiz tane tam sayı veri çeşidi vardır. Bunlar:
B=zeros(m,n,'int8');
READ MORE
- int8, int16, int32, int64
- uint8, uint16, uint32, uint64
B=zeros(m,n,'int8');
B nin elemanları hafızada int8 tipine göre kaydedilecektir.
Matlab'ta 15 tane temel veri çeşidi vardır.
Bunların başlıcaları:
READ MORE
- logical
- char
- numeric(single,double)
- cell
- structure
- function handle
- user class
Bazen yazdığımız scriptlerde matris ya da dizi oluştururken baştan bunların boyutları tam olarak belli olmayabilir. Bu Matlab'in işi daha yavaş yapmasına neden olur. Ancak daha işlemin başında kodumuza şöyle bir satır eklersek:
A=zeros(m,n);
bu Matlab'in işin başında A matrisi için hafızada yer ayırtmasına ve geri kalan işlemleri ve değişiklikleri daha hızlı yapmasına yardımcı olur. Yani kodumuzun performansını bilinçli olarak artırmış oluruz.
Matlab'ta belirlenmiş altı tane görev vardır. Bunların doc bench yazarak görebiliriz. bench(n) komutu bize bu görevlerin farklı bilgisayar ve işletim sistemlerinde ne kadar zamanda yapılabileceğinin karşılaştırmalı
grafiklerini verir.
Kodumuzun ne kadar zamanda çalıştırıldığını bulmak için tic ve toc komutlarını kullanırız. Şöyle ki:
tic; code_name; toc;
komutu kodumuzu çalıştırır ve geçen zamanı command window da gösterir.
Matlab Profiler bize bu konuda daha ayrıntılı bilgi verir. Desktop sekmesinden Profiler seçilerek profiler ı açabiliriz ya da profile viewer komutu ile açabiliriz.
Derleme yapılırken derlemeye Debug sekmesinden Exit Debug Menu seçilerek son verilebilir. Hatalar bulunup düzeltildikten sonra clear breakpoints in all files simgesine tıklanarak kesme noktaları kod dosyalarından kaldırılabilir.
READ MORE
Kodumuzu derlerken aynı zamanda değişkenlerin değerlerini de test edebiliriz beklediğimiz gibi mi yada değil mi diye. Bu üç yolla yapılabilir. Bunlar:
READ MORE
- Atama olan her satırın sonundaki noktalı virgülleri kaldırmaktır. Çünkü bu şekilde atamaların sonucundaki bütün değerler command window da yazılacaktır.
- Debug modda komutları command window a girebiliriz değerleri test etmek için.
- Debug yapılırken editörde mouse u değerini ya da değerlerini görmek istediğimiz değişkenlerin üstüne sırayla götürerek görebiliriz.
Eğer hata mesajları bir hatanın yerini belirlememize yetmiyorsa editöre kesme noktaları(breakpoints) yerleştirerek Matlab Debugger ı aktif hale getirebiliriz. Bu şekilde kodumuzu çalıştırırsak Debugger her kesme noktasında derlemeyi kesecek ve bizim devam et dememizi bekleyecektir. Bu şekilde hatanın hangi satırda ya da blokta olduğunu kesin bir şekilde bulabiliriz. Üç tane temel kesme noktası tipi vardır:
READ MORE
- A Standard breakpoint, bu belirlenmiş bir satırda durur.
- A Conditional breakpoint, bu belirli bir satırda belirlenmiş koşullar gerçekleştiğinde durur.
- An Error breakpoint, bu ise kod belirlenmiş bir uyarıyı ya da hatayı yada NaN ya da infinite value durumlarında durur.
Editörde yazdığımız bir scripti command line dan ya da editörden çalıştırmayı denediğimiz zaman matlab önce kodu derlemeye başlar. Yani yazım hatalarını aramaya belirmeye başlar ve bize hataları öncelik sırasına göre sıralar.Script çalıştığı halde işini yapmıyorsa ya da sonuç beklediğimiz gibi değilse run-time hatalar vardır. Bu tür hatalar algoritmik hatalardır.
READ MORE
Matlab editörü kod analizi yapan bir araca sahiptir. Biz kodlarımızı yazarken yazım hataları için kontrolü yapar bu araç. Hatalı kısımları veya uyarı ya da tavsiye vermek istediği kısımların altını çizer. Mouse ile altı çizili kısmın üstüne gidersek bize hatayı,uyarıyı ya da tavsiyesini gösterir. Ek olarak, kodda bazı belirli problemler turuncu ya da kırmızı renkte altı çizili çizgilerle görünür. Renkler ve anlamları şöyledir:
Yeşil Kodda yazım hatası yok demektir.
Turuncu Beklenmeyen sonuçlar getirebilecek bir potansiyel var ya da performans açısından yetersiz bir ifade.
Kırmızı Yazım hatası var anlamındadır.
READ MORE
Yeşil Kodda yazım hatası yok demektir.
Turuncu Beklenmeyen sonuçlar getirebilecek bir potansiyel var ya da performans açısından yetersiz bir ifade.
Kırmızı Yazım hatası var anlamındadır.
Matlab path ayarlarını pathtool komutunu command window a yazıp açılan Set Path penceresinden ayarlayabiliriz. Ayrıca Set Path penceresini file sekmesinden de açabiliriz. path komutu bize kayıtlı bütün path leri verir. which komutu dosyanın ya da fonksiyonun yerini path ismi ile birlikte verir. (which file_name or function_name)
Eğer which komutu all opsiyonu ile birlikte kullanılırsa şöyle ki;
which function_name or file_name -all
Aynı isimdeki bütün dosyaların yerlerini pathleriyle birlikte öncelik sırasına göre verir.
*Mini Bilgi:matlabroot komutu matlab bilgisayarınızda hangi klasöre kurulmuşsa o klasörün path ini verir.
READ MORE
Eğer which komutu all opsiyonu ile birlikte kullanılırsa şöyle ki;
which function_name or file_name -all
Aynı isimdeki bütün dosyaların yerlerini pathleriyle birlikte öncelik sırasına göre verir.
*Mini Bilgi:matlabroot komutu matlab bilgisayarınızda hangi klasöre kurulmuşsa o klasörün path ini verir.
Bir fonksiyon dosyası birden fazla fonksiyona ait declaration ve tanımlamaları içerebilir. Ancak bunlardan sadece en üstteki yani primary fonksiyon workspace ten çağrılabilir. Diğerleri sadece fonksiyon dosyasının içinde çağrılabilir.
Bir Fonksiyon çağrıldığı zaman ona ait bütün değişkenler ana workspace ten ayrı olarak başka bir workspace te tanımlanır kaydedilir. Fonksiyonun çalışması bittiği zaman bu özel-ayrı workspaceteki değişkenler silinir.
READ MORE
F=Vandermonde matrix, c=katsayılar, M=data, fitM=fitlenmiş data(yeni modelimiz), resid=hata, mse=mean square error ,N=datanın eleman sayısı olsun.
Önce Vandermonde matrisi istenildiği gibi üretilir boyutu fitlenicek datanın boyutuna uygun olarak. Daha sonra F*c=M denklemi backslash yöntemi kullanılarak çözülür(c=F\M). fitM=F*c den bulunur. Diğer değerler de aşağıda belirtildiği gibi bulunur:
resid=fitM-M;
mse=resid'*resid/N;
Otomatikliği Arttırmak
Kendi yazdığımız veya önceden yazılmış hazır scriptleri veya fonksiyonları kullanarak otomatikliği arttırabiliriz.
Fonksiyon Yaratmak
Fonksiyon dosyaları her zaman bir function declaration ile başlar. Şöyle ki:
function [out1,out2,...]=function_name(in1,in2,...)
bu komut satırı her fonksiyon dosyasının başında mutlaka bulunmalıdır.
Bir Fonksiyonu Çağırmak
[out1,out2,...]=function_name(in1,in2,...)
ile çağrılır.
fft fonksiyonu DFT hesabı için bir fast fourier transform(FFT) algoritması kullanır.
Bazı terimler ve hesapları:
y sampled data
n=length(y) number of samples
Fs Samples/unit time
dt=1/Fs Time increment
t=(0:n-1)/Fs Time range
Y=fft(y) Discrete Fourier Transform(DFT)
abs(Y) Amplitude of the DFT
conj(Y).*Y/n Power of the DFT
Fs/n Frequency Increment
f=(0:n-1)*(Fs/n) Frequency range
Fs/2 Nyquist frequency
Matlab ile herhangi bir vektörün Discrete Fourier Transformunu bulup çizdirebiliriz. fft komutu discrete fourier transform alır.
Ayrıca Matlab'ta bir arayüz vardır. Ve fftgui komutu ile çalışır.
fftgui(x) komutu: real(x),imag(x),real(fft(x)), ve imag(fft(x)) i çizer.
Matlab ile liner denklemlerin çözümünü yapabiliriz. Eğer sistem AX=B şeklinde ise çözüm X=A\B ile bulunur. Bu yüzden backslash aynı zamanda "left divide operator" olarak da bilinir.
Sistem XA=B şeklinde ise çözüm X=B/A ile bulunur.
Bir fonksiyon dosyası birden fazla fonksiyona ait declaration ve tanımlamaları içerebilir.
READ MORE
Ancak bunlardan sadece en üstteki yani primary fonksiyon workspace ten çağrılabilir. Diğerleri sadece fonksiyon dosyasının içinde çağrılabilir.