MATLAB

Bir elektronik ve haberleşme mühendisinin bilmesi gereken programlardan birisidir. Kolay anlaşılan kendi kendinize bile öğrenebileceğiniz bir dili vardır.

MATLAB NEDİR ?

MATrix LABoratory(Matrix Laboratuarı) temel olarak teknik ve bilimsel hesaplamalar için yazılmış yüksek performansa sahip bir yazılımdır. 1970’lerin sonunda Cleve Moler tarafından yazılan MATLAB ‘in tipik kullanım alanları:

 

  • Algoritme geliştirme ve kod yazma yani programlama
  • Matematiksel hesaplama işlemleri
  • Lineer cebir,istatistik, Fourier Analizi,Filtreleme,Optimizasyon,Sayısal integrasyon v.b konularda matematiksel fonksyonlar
  • 2D ve 3D grafiklerin çizimi
  • Grafik oluşturma
  • Veri analizi ve kontrolü
  • Gerçek dünya şartlarında uygulama geliştirme şeklinde özetlenebilir.

Matlab ‘in Özellikleri;

  • MATLAB PROGRAMI C/C++ DİLİNE DÖNÜŞEBİLİR.
  • 20.DERECEDEN DENKLEMİN KÖKLERİNİ BULABİLİR.
  • 100*100 BOYUTLU BİR MATRİSİN KÖKLERİNİ BULABİLİR.
  • BİR ELEKTRİK MOTORU GERÇEK ZAMANDA KONTROL EDİLEBİLİR
  • BİR OTOBÜSÜN SÜSPANSİYONU SİMÜLASYONU YAPILABİLİR.

soru: A=[-2 3 5; 7 8 9; -1 5 8] matrisinin transpozesini, tersini, determinantını bulmalım.matrisi de tersi ile çarparak sonucu elde edelim.

çözüm:

>> A=[-2 3 5; 7 8 9; -1 5 8];

>>A’

ans= 2  7  -1

3  8  5

5  9  8

>>det(A)

ans=

58

>> inv(A)

yazarak sonucu elde ettik. ardından 2.aşamayı yapalım.

>>format short

bu komut ile virgülden sonraki 4 basamal göstermesi için yazılır.

>>inv(A)*A

yazarız ve çarpım sonucuu da elde etmiş oluruz.

İşte bu kadar basit..

Yine MATLAB ‘te de döngüler vardır.FOR ve WHILE döngüleri; basit bir örnek ile anlatmak isterim size bunu;

soru: Yarıçapları 1,2,3,4,5 olan kürenin hacmini hesaplayan programı yazalım.

for döngüsü ile:

for r=1:5

vol=(4/3)*pi*r^3;

disp([r, vol])

end

while döngüsü ile:

r=0

while r<5

r=r+1

hac=(4/3)*pi*r^3;

disp([r, hac])

end

elemanter yöntem ile:

r=1:5

vol=(4/3)*pi*r.^3;

disp([r, vol])

end

Son yöntemimizde ” r.^3 ” yazma sebebimiz inanın hayati öneme sahiptir. Neden derseniz. Her bir yarıçap için tek tek hesap yapılmasını  sağlayan o aradaki noktadır.

Peki, sözel şartlar varsa yani ” switch-case ” kullanmamız gerekirse;

soru: klavyeden 0-4 arasında girilen bir tamsayının yazı ile kaç girildiğini ekrana yazdıran ,istenen aralığın dışında bir sayı girilmesi durumunda” 0 ile 4 arasında değil ” yazdıran programı yazalım..

çözüm: öncelikle klavyeden kullanıcıya girdi yazdırmak için input komutu kullanırız.

A=input(‘klavyeden bir sayı giriniz: ‘);

switch A

case 0

disp(‘sıfır’);

case 1

disp(‘bir’);

case 3

disp(‘üç’);

case 4

disp(‘dört’);

otherwise

disp(‘ sayı 0 ile 4 arasında değil’);

end

sıra şimdide ÇİZİM komutlarında!

örneğin:

x=2:1.5:50

y=3*x.^2-5*x+2;

plot(x,y)  açıklaması ise x=yatay ekseni, y=dikey ekseni gösterecek.

title(‘y nin x eksenine göre değişimi’)

xlabel(‘x’);

ylabel(‘y’);

peki şimdi de şunu sormak isterim size, 2 şeklide aynı grafikte ve farklı renklerde çizdirebilir miyim? Bunun sonucu evet tir. Ve şimdi komutu yazıyorum sizlere;

x=0:pi/16:2*pi;

y1=cos(x)

y2=sin(x)

plot(x,y1,’b’, x,y2,’r’)

burada b=blue, r=red i ifade etmektedir.

Birde “subplot”  komutu vardır. Bu komutun görevi ise bir grafik penceresinde birden fazla grafiği yan yana görmek için bu komut kullanılır.mevcut şekli sırasal olarak numaralandırılan m*n adet parçaya böler ve sonrasında çizilen grafiği p.parçaya koyar.

subplot(m,n,k) burada m=satır bilgisi, n=sutun bilgisi ve k grafik sayısıdır.

örnekle açıklama isterim;

x=0:0.1:10;

for k=14

subplot(2,2,k)

plot(x,sin(k.*x))

end

ve söylemek istediğim birkaç bişiyler daha var arkadaşlar;

matlab te y=sin(x) tanımlıdır ancak Y=sin^2(x) yoktur.biz kendimiz fonksyon olarak oluşturmalıyız.

yeni bir M-file açalım;

function y=sinkare(x)

y=sind(x)*sind(x);

yazarız. Sonradan fonsyonun adını değiştirmemeliyiz.Yoksa çalışmayacaktır.

Çalıştırırken Run diyerek çalıştırmamalıyız.

command window da şimdi yazalım;

>>sinkare(30)

ans=

0.2500000

cevabını ekranda göreceksiniz.

mesela uzun bir denkleminiz var 8.dereceden mesela nasıl çözeceğimizi bilemiyoruz? yardımımıza Matlab koşacak, bir örnekle açıklayayım.

32*x^8++64*x^7+784 denkleminin köklerini bulalım.

>>roots[32 64 0 0 0 0 0 0 768]

komutunu verirsek işte elimizde tüm köklerinin elde ettik.

matlab ile limit bile aldırabiliriz; mesela limit (fonksyon,x,1) açıklamam olarak fonksyonun limitini x=1 e giderken hesaplar diye yapabilirim sizlere.

limit((x-1)/(2*x-4),x,inf,’left’); bu koda açıklama yapacak olur isek; x sonsuza giderken soldan yaklaşma anlamına gelir deriz.

ayrık fourier aldırma komutu: fft dir.

x=0:pi/64:2*pi;

y=sin(5*x)+2*cos(20*x);

figure,plot(x,y)

Y=fft(y,512);                        burada 512 fourier alma uzunluğudur.

Y=fftshift(fft(y,512));           bu komut merkezi kaydırma komutudur.

P=abs(y);

figure,plot(p)

matlab te rastgele sayı üretme komutu ise “ linspace ” dir.

örneğin;

linspace(5,10,50) yazarsak 5 ile 50 arasnda rastgele 10 adet sayı üretir.

ardından grafik çizimlerine geçersek arkadaşlar;

1.grafik çizdirme komutu plotyy dir.bu komut ile tek bir grafikte 2 adet y ekseni bulunur.biri ekranın sağında iken diğeri ekranın solunda olacaktır.

2.yöntem ise logaritmik grafik çizimidir.bu komut ise loglog dur. her iki ekseninde logaritmik olduğu grafikler için kullanılır. dikey eksen logaritmik ise semilogy, yatay eksen logaritmik ise semilogx komutu kullanılmalıdır.

3.yöntem ise pie grafiği  dir.

4.yöntem bar(sütun) grafiği  dir.

5.yöntemimiz stairs(adım) grafiğidir.

6. ve son yöntemimiz stem grafiğidir.

ve sıra matlab simulink e geldi!

burada blog diyagramları kullanarak devreler oluştururuz.en çok kullanılan ortak yapılar; mux,demux blokları; çarpma ,toplama, osiloskop,birim gecikme elemanı,türev,integral bloklarını hazır olarak içinde barındırır ve işimizi yine kolaylaştırır.ordaki bloglerı ters çevirmenin kısayol komutu vereyim sizlere,cnrtl+r kısayol tuşudur arkadaşlar.

yine işimizi gerçekten kolaylaştıran matlab in help idir.orada neyi nasıl kullanacağımız en güzel örneklerle açıklamışlardır.oradan inanın çok şey öğreneceksiniz.

hatta devre analizinde düğüm gerilimleri hesaplarını dahi matlab a yaptırmak mümkündür arkadaşlar.yapmamız gereken matrissel olrak katsayılarını bilmektir.

yine matlab ile digital osc den veri almak database oluşturmak

filtre design:AGF,BGF,BDF,FIR filtreler gibi.. fuzzy logic= yapay sinir ağları, zeki karar verici sistemeler ımage processing toolbox ile görüntü işleme işlemleri yapılabilir.

Yeni birkaç örnek eklemek istedim;

Bu problemde frekans domeninde analiz yapmak istiyoruz, ilk örneğimiz şu şekilde:

1- f(t)=cos(wt)+sin(10wt)

kodlar:

t = 0:200;

f = 0:200;

w = 2*pi*f;

ft =  cos(w.*t) + sin(10*w.*t);

 

ftfrek = fft(ft);

subplot(1,2,1);

plot(t,ft);

grid on;

xlabel(‘t’);

title(‘zaman’);

ylabel(‘f(t)’);

subplot(1,2,2);

plot(abs(ftfrek));

grid on;

xlabel(‘f’);

title(‘frekans’);

ylabel(‘F(t)’);

 

program çıktısı ise;

frekans domeni analizi

frekans domeni analizi

2. örneğimizde de fonksyonumuz f(t)=exp(-a*t)-exp(-b*t)  olsun; ben burada a=3, b=5 aldım.. sizler değişimi görmek için bu katsayıları da değiştirebilirsiniz.

kodlar:

t = 0:200;
f = 0:200;
w = 2*pi*f;
ft = exp(-3*t)-exp(-5*t) ;

ftfrek = fft(ft);
subplot(1,2,1);
plot(t,ft);
grid on;
xlabel(‘t’);
title(‘zaman’);
ylabel(‘f(t)’);

subplot(1,2,2);
plot(abs(ftfrek));
grid on;
xlabel(‘f’);
title(‘frekans’);
ylabel(‘F(t)’);

 

program çıktısı:

frekans domeni analizi

frekans domeni analizi

MATLAB komutları için link: http://kisi.deu.edu.tr/fatih.kahraman/TBT_MATLAB.pdf

MATLAB hakkında daha çok bilgi için: http://web.itu.edu.tr/~kents/matlab.pdf

Matlab Simulink hakkında bilgi linki: simulinkmatlab

 

Matlab GUI :GUIwithM

sayısal haberleşme için MATLAB kullanımı : matlab for digital communication

eğer yazımı beğendiyseniz lütfen beğenin paylaşın, bu benim yeni yazılar yazmam için bir destek,moral olacaktır.

Share

3 Comments

  • esra diyor ki:

    benım bir görüntüde red değerlerini tutan matrisim var diyelim.
    değerler
    1 2 3 4 5
    6 7 8 9 10
    11 12 13 14 15
    16 17 18 19 20
    21 22 23 24 25

    ben buna pixel pixel mean hesaplatmam gerekiyor mesela 3uncu satırın 3 uncu sutunu olan 13 elemanı için 7,8,9,12,13,14,17,18,19 komsuluk degerlerıne gore ortalama hesaplatıp 3un 3 uncu olan yerıne yazıcaz ama mesela birinci satırın birinci sutunun olan bır ıcın aynı yerlere baktıgımzda 1,2,6,7 alıncak i-1,i+1 ,j-1,j+1 komsulugu 1in diger komsuları yok cunkı bu kontrolu de içeren dongu ıle nasıl hesaplayabılrım

  • alperen diyor ki:

    Arkadaşlar matlab ile ilgili 4 tane sorum var bana yardım edebilecek birileri varsa bana ulaşabilirmi ? https://www.facebook.com/BeSiKtAs.aLpRnl03l

    sorulardan biri : bir şeklin alanını hesaplayan matlab kodunu yazınız (şekli burda gösteremiyorum)
    2. soru : Dışarıdan girilen öğrenci no ve döneme ait aldıgı ders( 5 adet) isimlerini ve notunu kaydeden ve okuyan bir matlab programı yazınız.
    2 tane daha sorum var şekilli yazamıyorum burdan.

  • mühendis diyor ki:

    bulanık mantık veya kod yazarak vites geçiş sisteminin grafiği nasıl oluşturulur

Bir Cevap Yazın