2004'te, MATLAB akademik ve endüstriyel alandaki kullanıcı sayısı bir milyon civarındaydı.[20] 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ı.[21] 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.[22] 2000'de, LAPACK matris işleme için yeni kütüphane kümeleri oluşturmak için MATLAB yeniden yazılmıştır.[23]
MATLAB uygulaması, MATLAB dili çerçevesinde geliştirilmiştir.[24]
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.[25] Dinamik tipli bir dildir çünkü değişkenler, değişken türü yazılmadan da atanabilirler, sembolik nesne olarak kabul edilip işlenirler,[26] 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:
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:9dizi=13579
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:9dizi=147
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:5ari=12345
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).
Ö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=118712141
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.
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 Msihirli 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).
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.[kaynak belirtilmeli]
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:
MATLAB programı 3 boyutlu grafikler oluşturmak için surf, plot3 ya da mesh fonksiyonlarını kullanır.
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 executable) olarak adlandırılır.[29][30]
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,[31]MathWorks tarafından ayrı olarak satılır ya da JMI adlı belgelenmemiş bir mekanizma kullanılır (Java-to-MATLAB Interface),[32] 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.[33]
MathML giriş ve çıkışları için kütüphanelerin bulunması gerekmektedir.[34]
Lisans
MATLAB, MathWorks şirketinin tescilli bir üründür, bu yüzden kullanıcılar satıcıya bağlıdır.[20][35] 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[kaynak belirtilmeli]. 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.[36]
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.
NCLab16 Eylül 2020 tarihinde Wayback Machine sitesinde arşivlendi., 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).
^Bezanson, Jeff; Karpinski, Stefan; Shah, Viral; Edelman, Alan (14 Şubat 2012). "Why We Created Julia". Julia Language. 19 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 1 Aralık 2016.
^Eaton, John W. (21 Mayıs 2001). "Octave: Past, Present, and Future"(PDF). Texas-Wisconsin Modeling and Control Consortium. 9 Ağustos 2017 tarihinde kaynağından(PDF) arşivlendi. Erişim tarihi: 1 Aralık 2016.
^"History". Scilab. 1 Aralık 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 1 Aralık 2016.
^S.M. Rump: INTLAB – INTerval LABoratory. In Tibor Csendes, editor, Developments in Reliable Computing, pages 77–104. Kluwer Academic Publishers, Dordrecht, 1999.
^abCleve Moler, the creator of MATLAB (Aralık 2004). "The Origins of MATLAB". 16 Ekim 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Nisan 2007.
^Spielman, Dan (10 Şubat 2004). "Connecting C and Matlab". Yale University, Computer Science Department. 3 Temmuz 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Mayıs 2008.