MATLAB

MATLAB (matrix laboratory), çok paradigmalı sayısal hesaplama yazılımı ve dördüncü nesil programlama dilidir. Özel mülk bir programlama dili olan MATLAB, MathWorks tarafından geliştirilmektedir. MATLAB kullanıcıya, matris işleme, fonksiyon ve veri çizme, algoritma uygulama, kullanıcı arayüzü oluşturma, C, C++, Java ve Fortran gibi diğer dillerde yazılmış programlarla arabağlama imkânı tanır.

MATLAB, öncelikli olarak sayısal işleme yönelik üretilmiş olmasına rağmen, isteğe bağlı olarak sembolik hesaplama yapabilen MuPAD sembolik motorunu kullanır. Ek paket, dinamik ve gömülü sistemler için Simulink'i, grafiksel çoklu alan simülasyonunu ve model tabanlı tasarımı ekler.

2004'te, MATLAB akademik ve endüstriyel alandaki kullanıcı sayısı bir milyon civarındaydı.Richard Goering, "Matlab edges closer to electronic design automation world ," EE Times, 10/04/2004 MATLAB kullanıcıları mühendislik, bilim ve ekonomi gibi çeşitli alanlardan gelmektedir. MATLAB, yaygın olarak akademik ve araştırma kurumlarında olduğu kadar endüstriyel işletmelerde de çok kullanılmaktadır.

 Tarih 
Cleve Moler, New Mexico Üniversitesi'nde bilgisayar bilimi bölümünün başkanıydı, 1970'lerin sonunda MATLAB'ı geliştirmeye başladı. Cleve Moler, öğrencilerine öğretmek için LINPACK ve EISPACK'ı tasarlamıştır, bunların dışında Fortran programlama dilini de öğrencilerine öğretmiştir. Uygulamalı matematik, yakın bir zaman içerisinde diğer üniversiteler ve toplum içinde güçlü bir kitle tarafından benimsenmiştir. Moler, 1983 yılında Stanford Üniversitesi'ne yaptığı bir ziyaret sırasında Jack Little ile tanışmıştır. Ticari potansiyeli gören Steve Bangert da onlara katılmıştır. MATLAB'ı C ile tekrar yazmışlar ve geliştirmeye devam etmek için 1984'te MathWorks'ü kurmuşlardır. Yeniden yazılan kütüphaneler JACKPAC olarak bilinir. 2000'de, LAPACK matris işleme için yeni kütüphane kümeleri oluşturmak için MATLAB yeniden yazılmıştır.Note from Cleve Moler in a Mathworks newsletter 

MATLAB, ilk olarak kontrol mühendisliğindeki araştırmacılar ve uygulayıcılar tarafından kabul edildi.  Ayrıca şu an eğitim alanında da kullanılmaktadır, özellikle doğrusal cebir, sayısal analiz öğretiminde ve görüntü işleme bilim adamları arasında popülerdir.

 Söz dizimi 
MATLAB uygulaması, MATLAB dili çerçevesinde geliştirilmiştir.

 Değişkenler 
Değişkenler, = atama operatörü kullanılarak tanımlanır. MATLAB zayıf ve dinamik tipli bir programlama dilidir. Zayıf tipli bir dildir çünkü tipler dolaylı olarak dönüştürülür. Documentation on MATLAB in relation to other languages Dinamik tipli bir dildir çünkü değişkenler, değişken türü yazılmadan da atanabilirler, sembolik nesne olarak kabul edilip işlenirler,sym function  Documentation for the MATLAB Symbolic Toolbox ve tipleri değiştirilebilir. Değişkenler, sabitlerden, diğer değişkenlerin değerlerini içeren işlemlerden ya da bir fonksiyonun çıkışından tanımlanabilir. Örneğin:
>> x = 17
x =
 17
>> x = 'hat'
x =
hat
>> y = x + 0
y =
       104        97       116
>> x = [3*4, pi/2]
x =
   12.0000    1.5708
>> y = 3*sin(x)
y =
   -1.6097    3.0000

 Vektörler/matrisler 

MATLAB ile 1, 2 veya daha fazla boyutlarda dizileri oluşturup işleyebilirsiniz. MATLAB lehçesinde, bir vektör tek boyutlu bir matris anlamına gelir, diğer programlama dillerinde genellikle bir dizi olarak adlandırılır. Bir matris, genel olarak, 2-boyutlu bir dizi anlamına gelir, örnek vermek gerekirse, m ve n, 1'den daha büyük bir m×n dizisidir. İkiden daha büyük boyuttaki diziler, çok boyutlu diziler olarak adlandırılır. Diziler, açık döngüler olmadan, temel tipli ve birçok standart fonksiyonları yerel olarak destekleyip işlemler yapılmasına izin verir. Bu nedenle MATLAB dili, aynı zamanda bir dizi programlama dili örneğidir.

Basit bir dizi şunlar kullanılarak tanımlanır: init:increment:terminator. Örneğin:
>> dizi = 1:2:9
dizi =
 1 3 5 7 9
Değişken ismi dizi olarak tanımlanır (veya yeni değeri dizi adında mevcut bir değişkene atar). Bu dizi 1, 3, 5, 7 ve 9 değerlerinden oluşur. Diğer bir deyişle, dizi 1 değeri (init değeri) ile başlar, her adımda ikişer ikişer (2) (increment değeri) artar ve 9'a (terminator değerine) ulaştığında durur (ya da aşılmasını önler).
>> dizi = 1:3:9
dizi =
 1 4 7
1 değerini varsayılan değer olarak kullanmak için, increment değeri aslında bu sözdiziminin dışında bırakılabilir (kolonlardan biri ile birlikte).
>> ari = 1:5
ari =
 1 2 3 4 5
1, 2, 3, 4 ve 5 değerlerini ari adındaki dizi değişkenine aktarır, varsayılan 'incrementer' (artırıcı) değer 1'dir.

Matrisler, satır elemanları ile boşluk veya virgül ile ayırarak tanımlanabilir ve her satırı sonlandırmak için noktalı virgül kullanılır. Liste elemanları köşeli parantez ile belirtilmeli: []. Parantezler: () elemanları ve altdizileri çağırır (bunlar, aynı zamanda, değişken listesini bağımsız bir işlem olarak belirtmek için kullanılır).

>> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
A =
 16  3  2 13
  5 10 11  8
  9  6  7 12
  4 15 14  1

>> A(2,3)
ans =
 11

Örneğin [2, 3, 4] indisi, "2:4" ifadesi ile belirtilebilir. Örneğin, bir submatrix, 2 satır 4 aracılığıyla ve 3 sütun 4 aracılığıyla şu şekilde yazılabilir:
>> A(2:4,3:4)
ans =
 11 8
 7 12
 14 1
eye fonksiyonu kullanılarak n boyutlu bir kare birim matrisi oluşturulabilir ve zeros ve ones fonksiyonları sırasıyla, boyutu sıfır ya da bir olan matrisler üretebilir.
>> eye(3)
ans =
 1 0 0
 0 1 0
 0 0 1
>> zeros(2,3)
ans =
 0 0 0
 0 0 0
>> ones(2,3)
ans =
 1 1 1
 1 1 1

En çok MATLAB fonksiyonları matrisler kabul edebilir ve her öğeyi kendisi gibi kabul edecektir. Örneğin, mod(2*J,n) "J"deki her öğeyi çoklu olarak 2 ile çarpacaktır ve sonra her eleman modulo "n"yi düşürecektir. MATLAB standart "for" ve "while" döngülerini içerir, fakat (R'ye benzer uygulamalarda olduğu gibi), genellikle vektör notasyonunu kullanarak daha hızlı çalıştırmak için kod üretir. Bu kod, magic.m fonksiyonunun bir bölümüdür, nnin tekli değerleri için M sihirli karesini oluşturur (burada, MATLAB meshgrid fonksiyonu I ve J'nin içerdiği 1:n kare matrisi oluşturmak için kullanılmıştır).

[J,I] = meshgrid(1:n);
A = mod(I + J - (n + 3) / 2, n);
B = mod(I + 2 * J - 2, n);
M = n * A + B + 1;

 Yapılar 

MATLAB, yapısal veri tiplerine sahiptir. MATLAB dizilerindeki bütün değişkenlerden itibaren, daha uygun bir adı "structure array"dır, dizinin bütün elemanları aynı ada sahiptir. Buna ek olarak, MATLAB dinamik alan adlarını destekler (look-up alan adları, alan manipülasyonları, vb.). Fakat maalesef, MATLAB JIT (Just In Time) MATLAB yapılarını desteklemez, bu yüzden çeşitli yapısal değişkenlerin sadece basit bir paketi bile maliyetli olacaktır.

 Fonksiyon kolları 

MATLAB, fonksiyon tanıtan kollar tarafından lambda-calculus elemanlarını veya referans fonksiyonlarını destekler, .m uzantılı ya da uzantısı olmayan dosyaları/yuvalanmış işlevleri, her ikisini de destekler.

 Sınıflar 

MATLAB birçok sınıfa sahip olmasına rağmen, söz dizimi ve arama kuralları diğer programlama dillerine göre farklı ve düzenlidir.
MATLAB, değişken sınıflarına ve referans sınıflarına sahiptir, sınıflar super-class olarak handleye sahip olabilir (referans sınıfları için) ya da olmayabilir (değişken sınıfları için).

Metot çağırma, ara değişken ve referans sınıflarından farklıdır. Örneğin, metot çağırma,
object.method();
referans sınıfının bir örneği olan object yalnızca kendisinin bir üyesini değiştirebilir.

 Grafik ve grafiksel kullanıcı arayüzü programlama 

MATLAB, geliştirme uygulamalarıyla beraber grafiksel kullanıcı arayüzü özelliklerini de destekler.
Ayrıca graph-plotting özellikleri de sıkıca entegre edilmiştir. Örneğin plot fonksiyonunda 2 vektör ile grafik üretilebilir. x ve y. Kod:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
Ardından sinüs fonksiyonu ile şekiller üretilebilir:

350px

MATLAB programı 3 boyutlu grafikler oluşturmak için surf, plot3 ya da mesh fonksiyonlarını kullanır.
[X,Y] = meshgrid(-10:0.25:10,-10:0.25:10);
f = sinc(sqrt((X/pi).^2+(Y/pi).^2));
mesh(X,Y,f);
axis([-10 10 -10 10 -0.3 1])
xlabel('{\bfx}')
ylabel('{\bfy}')
zlabel('{\bfsinc} ({\bfR})')
hidden off    [X,Y] = meshgrid(-10:0.25:10,-10:0.25:10);
f = sinc(sqrt((X/pi).^2+(Y/pi).^2));
surf(X,Y,f);
axis([-10 10 -10 10 -0.3 1])
xlabel('{\bfx}')
ylabel('{\bfy}')
zlabel('{\bfsinc} ({\bfR})') Bu kod sinüs fonksiyonu ile normalleştirilmemiş 2 boyutlu 3D wireframe grafiğini üretir:     Bu kod sinüs fonksiyonu ile normalleştirilmemiş 2 boyutlu 3D surface grafiğini üretir:Dosya:MATLAB mesh sinc3D.svg    Dosya:MATLAB surf sinc3D.svg

MATLAB'da GUI tasarım araçlarıyla (GUIDE) grafiksel kullanıcı arayüzleri oluşturulabilir.

 Nesne yönelimli programlama 
MATLAB'ın nesne yönelimli programlama için desteklediği sınıflar, inheritance, virtual dispatch, paketler, pass-by-value semantikleri ve pass-by-reference semantikleridir.

classdef merhaba
    methods
        function doit(this)
            disp('Merhaba!')
        end
    end
end

merhaba.m adlı bir dosyanın içine koyduğunuzda, aşağıdaki komutlarla çalışacaktır:
>> x = merhaba;
>> x.doit;
Merhaba!

 Diğer dillerle etkileşim 
MATLAB ile C programlama dili ya da Fortran'daki fonksiyonlar çağırılabilir ve altprogramlar yazılabilir. Çevirici bir fonksiyon MATLAB veri tiplerini geçişli ve devamlı olarak oluşturabilir. Bu şekilde derlenen fonksiyonlar tarafından oluşturulan dinamiksel yüklenebilir nesne dosyaları, "MEX-files" (MATLAB ex'ecutable) olarak adlandırılır.

Java, ActiveX ya da .NET ile yazılan kütüphaneler, direkt olarak MATLAB'dan çağrılabilir ve birçok MATLAB kütüphanesi (örneğin XML ya da SQL desteği), Java veya ActiveX kütüphaneleri çerçevesinde wrapper olarak uygulanabilir. MATLAB'da, Java'dan çağrışım yapmak çok karmaşıktır, fakat MATLAB ile genişletilebilir, MathWorks tarafından ayrı olarak satılır ya da JMI adlı belgelenmemiş bir mekanizma kullanılır (Java-to-MATLAB Interface), JMI, Java Metadata Interface ile karıştırılmamalıdır.

Alternatif olarak, MathWorks'un geliştirdiği, MuPAD tabanlı Symbolic Math Toolbox (Sembolik Matematik Araç Seti) kullanılabilir, MATLAB Maple ya da Mathematica ile bağlantı kurabilir.Mathsource item #618 for calling MATLAB from Mathematica  Roger Germundsson from Wolfram Research

MathML giriş ve çıkışları için kütüphanelerin bulunması gerekmektedir.

 Lisans 

MATLAB, MathWorks şirketinin tescilli bir üründür, bu yüzden kullanıcılar satıcıya bağlıdır.Jan Stafford, "The Wrong Choice: Locked in by license restrictions ," SearchOpenSource.com, 21 May 2003 MATLAB Builder kütüphane dosyalarıyla MATLAB fonksiyonları dağıtılıp, .NET veya Java uygulaması oluşturulabiliyor olmasına rağmen, ileriki gelişimi MATLAB diline bağlı olacaktır.

Her araç kutusu ayrı olarak satın alınmaktadır. Eğer değerlendirme lisansı talep edilirse, MATLAB değerlendirmesi için MathWorks satış departmanı proje hakkında detaylı bilgi talep eder. Bir lisans edinmenin tüm süreçleri, para ve zaman şartlarından dolayı çok pahalıdır. Değerlendirme lisansı 2 veya 4 hafta içinde değerlendirilip verilir. MATLAB'ın öğrenci versiyonu da mevcuttur.

Şikayet eden AB antitröst düzenleyicileri Mathworks'ün rakip lisansları satmayı reddedip reddetmediğini araştırıyor.Mathworks software license probed by EU antitrust regulators  Bloomberg news

 Alternatifler 

Alternatif olarak MATLAB'ın rakibi olan firmalar var.Comparison of mathematical programs for data analysis  ScientificWeb Ticari rakipleri de dahil olmak üzere, Mathematica, Maple, NAG, ITT Visual Information Solutions tarafından geliştirilen IDL, masaüstü alternatifi olarak ise Metlynx ve GNU Octave Xoctave vardır.

Ayrıca diğer alternatif yazılımlar ücretsiz ve açık kaynakdır, özellikle GNU Octave, FreeMat ve Scilab MATLAB dili ile son derece uyumlu olarak tasarlanmıştır.

NCLab, Octave'nin bulut arayüzü olmasını sağlar, kullanıcıların web tarayıcısında MATLAB dosyalarını kaydetmesine ve çalıştırmasına izin verir. NCLab, kişisel, ticari amaç ile kullanmayan kullanıcılar için ücretsizdir ve hemen hemen hiçbir kısıtlama yoktur. Kurumlar ise sembolik bir abonelik ücretini öderler.

Diğer diller arasında basit olarak davranan diziler(dizi programlama dilleri), APL ve J, Fortran 90'dan daha yüksektir, istatistiksel bir dil olan S kadar iyidir (S'in ana uygulamaları S-PLUS ve popüler açık kaynak olan R).

Ayrıca, IT++ için C++, Perl Data Language için Perl, ScalaLab'' için Scala ve SciPy ile birlikte NumPy ve Matplotlib için Python gibi mevcut dillerdeki çeşitli kütüphanelere benzer fonksiyonlar eklenebilir.

 Sürüm geçmişi 
 Sürüm! Sürüm adı  Sürüm numarası  Bundled JVM  Yıl  Sürüm tarihi  Sürüm notu MATLAB 1.0 1984 MATLAB  2 1986 MATLAB  3 1987 MATLAB  3.5 1990 MS-DOS üzerinde çalışır fakat en az 386 işlemcisi gerekmektedir. 3.5m sürümü olan bir matematik işlemcisi gereklidir. MATLAB  4 1992 MATLAB  4.2c R7 1994 Windows 3.1 üzerinde çalışır. Matematik işlemcisi gereklidir. MATLAB 5.0 R8 1996 Aralık, 1996 MATLAB 5.1 R9  1997 Mayıs, 1997 MATLAB 5.1.1 R9.1 MATLAB 5.2 R10  1998 Mart, 1998 MATLAB 5.2.1 R10.1 MATLAB 5.3 R11  1999 Ocak, 1999 MATLAB 5.3.1 R11.1 Kasım, 1999 MATLAB 6.0 R1212 1.1.8 2000 Kasım, 2000 Bundled Java machine(JVM)'nin ilk sürümü. MATLAB 6.1 R12.1 2001 Haziran, 2001 MATLAB 6.5 R1313 2002 Temmuz, 2002 MATLAB 6.5.1 R13SP1  2003 MATLAB 6.5.2 R13SP2 MATLAB 7 R14 14 1.4.2  2004 Haziran, 2004 MATLAB 7.0.1 R14SP1 Ekim, 2004 MATLAB 7.0.4 R14SP2 1.5.0  2005 7 Mart, 2005 MATLAB 7.1 R14SP3 1.5.0 1 Eylül, 2005 MATLAB 7.2 R2006a 15 1.5.0  2006 1 Mart, 2006 MATLAB 7.3 R2006b 16 1.5.0 1 Eylül, 2006 HDF5 tabanlı MAT dosya desteği MATLAB 7.4 R2007a 17 1.5.0_07  2007 1 Mart, 2007 MATLAB 7.5 R2007b 18 1.6.0 1 Eylül, 2007 PowerPC, Mac ve Windows 2000 için son sürüm. Windows Vista için lisans server desteği MATLAB 7.6 R2008a 19 1.6.0  2008 1 Mart, 2008 MATLAB 7.7 R2008b 20 1.6.0_04 9 Ekim, 2008 MATLAB 7.8 R2009a 21 1.6.0_04  2009 6 Mart, 2009 32-bit ve 64-bit Microsoft Windows 7 için ilk sürüm. MATLAB 7.9 R2009b 22 1.6.0_12 4 Eylül, 2009 Intel 64-bit Mac için ilk sürüm. SPARC ve Solaris için son sürüm. MATLAB 7.9.1 R2009bSP1 1.6.0_12  2010 1 Nisan, 2010 MATLAB 7.10 R2010a 23 1.6.0_12 5 Mart, 2010 Intel 32-bit Mac için son sürüm. MATLAB 7.11 R2010b 24 1.6.0_17 3 Eylül, 2010 MATLAB 7.11.1 R2010bSP1 1.6.0_17  2011 17 Mart, 2011 MATLAB 7.12 R2011a 25 1.6.0_17 8 Nisan, 2011  MATLAB 7.13 R2011b 26 1.6.0_17 1 Eylül, 2011 MATLAB 7.14 R2012a 27 2012 1 Mart, 2012 MATLAB 8 R2012b 28 11 Eylül, 2012

Sürüm numarası, Concurrent License Manager programı olan FlexLM tarafından bildirilen sürümdür.

 Dosya uzantıları 
 Yerel 
 .fig MATLAB figürü
 .m MATLAB fonksiyonu, scripti ya da sınıfı
 .mat MATLAB depolama değişkenleri için binary dosyası
 .mex...  MATLAB executable (belirli platform, ör. Mac için ".mexmac", Linux için ".mexglx" vb.)
 .p MATLAB content-obscured .m dosyası (result e())

 Üçüncü parti 
 .jkt MATLAB için Jacket tarafından oluşturulan GPU önbellek dosyası (AccelerEyes)
 .mum MATLAB CAPE-OPEN Unit Operation Model File (AmsterCHEM)

 Ayrıca bakınız 
 Sayısal analiz
 Görüntü işleme

 Notlar 

 Kaynakça 






 Dış bağlantılar 

 MATLAB overview, at the MathWorks website
 System Requirements - Platform Roadmap, at the MathWorks website.
 MATLAB Central File Exchange - library of over 12,000 MATLAB files and toolboxes, mostly distributed under BSD License.

 comp.soft-sys.matlab
 Official blogs
 Writing Fast MATLAB Code by P. Getreuer
 Calling MATLAB from Java: MatlabControl JMI Wrapper, The MatlabJava Server, MatlabControl

Kategori:Görüntü işleme yazılımları
Kategori:Dizi programlama dilleri
Kategori:C yazılımları
Kategori:IRIX yazılımları
Kategori:Veri analizi yazılımları
Kategori:Sayısal programlama dilleri
Kategori:Windows yazılımları
Kategori:Çizim yazılımları
Kategori:Çapraz platform yazılımları