MATLAB

**MATLAB** (**mat**rix **lab**oratory), ç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ı. 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 (programlama dili)|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.

MATLAB, ilk olarak [[kontrol mühendisliği]]ndeki 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, <code>=</code> 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. Dinamik tipli bir dildir çünkü değişkenler, değişken türü yazılmadan da atanabilirler, sembolik nesne olarak kabul edilip işlenirler, 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:
<syntaxhighlight lang="matlab">
>> 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
</syntaxhighlight>

=== 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''<code>:</code>''increment''<code>:</code>''terminator''. Örneğin:
<syntaxhighlight lang="matlab">
>> dizi = 1:2:9
dizi =
 1 3 5 7 9
</syntaxhighlight>
Değişken ismi <code>dizi</code> olarak tanımlanır (veya yeni değeri <code>dizi</code> 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).
<syntaxhighlight lang="matlab">
>> dizi = 1:3:9
dizi =
 1 4 7
</syntaxhighlight>
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).
<syntaxhighlight lang="matlab">
>> ari = 1:5
ari =
 1 2 3 4 5
</syntaxhighlight>
1, 2, 3, 4 ve 5 değerlerini <code>ari</code> 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).

<syntaxhighlight lang="matlab">
>> 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
</syntaxhighlight>

Ö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:
<syntaxhighlight lang="matlab">
>> A(2:4,3:4)
ans =
 11 8
 7 12
 14 1
</syntaxhighlight>
''eye'' fonksiyonu kullanılarak ''n'' boyutlu bir kare [[Matris (matematik)#Birim matris|birim matrisi]] oluşturulabilir ve ''zeros'' ve ''ones'' fonksiyonları sırasıyla, boyutu sıfır ya da bir olan matrisler üretebilir.
<syntaxhighlight lang="matlab">
>> 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
</syntaxhighlight>

En çok MATLAB fonksiyonları matrisler kabul edebilir ve her öğeyi kendisi gibi kabul edecektir. Örneğin, <code>mod(2*J,n)</code> "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 (programlama dili)|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, ''n''nin tekli değerleri için ''M'' [[sihirli kare]]sini 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).

<syntaxhighlight lang="matlab">
[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;
</syntaxhighlight>

=== 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 [[Tam Zamanında|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 ''handle''ye 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,
<syntaxhighlight lang="matlab">
object.method();
</syntaxhighlight>
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:
<syntaxhighlight lang="matlab">
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
</syntaxhighlight>
Ardından [[sinüs]] fonksiyonu ile şekiller üretilebilir:



MATLAB programı 3 boyutlu grafikler oluşturmak için ''surf'', ''plot3'' ya da ''mesh'' fonksiyonlarını kullanır.


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.

<syntaxhighlight lang="matlab">
classdef merhaba
    methods
        function doit(this)
            disp('Merhaba!')
        end
    end
end
</syntaxhighlight>

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

== 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" (**M**ATLAB **ex*'ecutable) olarak adlandırılır.

[[Java]], [[ActiveX]] ya da [[.NET Framework|.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 (yazılım)|Maple]] ya da [[Mathematica]] ile bağlantı kurabilir.

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

== Lisans ==

MATLAB, MathWorks şirketinin [[tescilli marka|tescilli]] bir üründür, bu yüzden kullanıcılar satıcıya bağlıdır. MATLAB Builder kütüphane dosyalarıyla MATLAB fonksiyonları dağıtılıp, [[.NET Framework|.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 [[Avrupa Birliği|AB]] antitröst düzenleyicileri Mathworks'ün rakip lisansları satmayı reddedip reddetmediğini araştırıyor.

== Alternatifler ==


Alternatif olarak MATLAB'ın rakibi olan firmalar var. Ticari rakipleri de dahil olmak üzere, [[Mathematica]], [[Maple (yazılım)|Maple]], [[NAG Numerical Libraries|NAG]], [[ITT Visual Information Solutions]] tarafından geliştirilen [[IDL (programlama dili)|IDL]], masaüstü alternatifi olarak ise Metlynx ve [[GNU Octave]] [http://www.xoctave.com Xoctave] vardır.

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

[http://nclab.com 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 (programlama dili)|APL]] ve [[J (programlama dili)|J]], [[Fortran]] 90'dan daha yüksektir, istatistiksel bir dil olan [[S (programlama dili)|S]] kadar iyidir (S'in ana uygulamaları [[S-PLUS]] ve popüler açık kaynak olan [[R (programlama dili)|R]]).

Ayrıca, [[IT++]] için [[C++]], [[Perl Data Language]] için [[Perl]], *ScalaLab* için [[Scala (programlama dili)|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 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 [[Grafik işlem birimi|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 ==


* [http://www.mathworks.com/products/matlab?s_cid=wiki_matlab_15 MATLAB overview], at the MathWorks website
* [http://www.mathworks.com/support/sysreq/roadmap.html?s_cid=wiki_matlab_16 System Requirements - Platform Roadmap], at the MathWorks website.
* [http://www.mathworks.com/matlabcentral/fileexchange?s_cid=wiki_matlab_17 MATLAB Central File Exchange] - library of over 12,000 MATLAB files and toolboxes, mostly distributed under [[BSD License]].
* 
* [news://comp.soft-sys.matlab comp.soft-sys.matlab]
* [http://blogs.mathworks.com?s_cid=wiki_matlab_18 Official blogs]
* [https://web.archive.org/web/20110804230732/http://www.math.ucla.edu/~getreuer/matopt.pdf *Writing Fast MATLAB Code''] by P. Getreuer
* Calling MATLAB from Java: MatlabControl JMI Wrapper, The MatlabJava Server, MatlabControl