MATLAB

**MATLAB** („MATrix LABoratory“ ning qisqartmasi yaʼni bu „Matritsa labararatoriyasi“) – bu MathWorks tomonidan ishlab chiqilgan xususiy koʻp paradigmali dasturlash tili va raqamli hisoblash muhiti. MATLAB matritsalarni manipulyatsiya qilish, funksiyalar va maʼlumotlarning chizmalarini tuzish, algoritmlarni amalga oshirish, foydalanuvchi interfeyslarini yaratish va boshqa tillarda yozilgan dasturlar bilan interfeyslarni oʻrnatish imkonini beradi.

MATLAB asosan raqamli hisoblash uchun moʻljallangan boʻlsa-da, ixtiyoriy asboblar toʻplami ramziy hisoblash qobiliyatlariga kirish imkonini beradi va MuPAD ramziy dvigatelidan foydalanadi. Simulink qoʻshimcha paketi dinamik va oʻrnatilgan tizimlar uchun grafik koʻp domenli simulyatsiya va modelga asoslangan dizaynni qoʻshadi.

2020-yil holatiga koʻra, MATLAB butun dunyo boʻylab 4 milliondan ortiq foydalanuvchiga ega.Ular turli muhandislik, fan va iqtisod sohalaridan kelib chiqqan. Eslatib oʻtamiz, 2017-yil holatiga koʻra, 5000 dan ortiq jahon kollejlari va universitetlari oʻqitish va tadqiqotlarni qoʻllab-quvvatlash uchun MATLAB’dan foydalanadilar..

## Tarixi

### Kelib chiqishi
MATLAB matematik va kompyuter dasturchisi Kliv Moler tomonidan ixtiro qilingan.. MATLAB gʻoyasi uning 1960-yillardagi nomzodlik dissertatsiyasiga asoslangan edi. .Moler Nyu-Meksiko universitetida matematika professori boʻldi va oʻz shogirdlari uchun sevimli mashgʻulot sifatida MATLAB dasturini ishlab chiqa boshladi. U 1967-yilda oʻzining bir martalik dissertatsiya boʻyicha maslahatchisi Jorj Forsit bilan MATLABning dastlabki chiziqli algebra dasturlashni ishlab chiqdi .Shundan soʻng 1971-yilda chiziqli tenglamalar uchun Fortran kodi paydo boʻldi.

Dastlab (1.0 versiyasidan oldin) MATLAB "dasturlash tili emas edi, u oddiy interaktiv matritsa kalkulyatori edi. Hech qanday dasturlar, asboblar qutilari, grafikalar yoʻq edi. Va ODE yoki FFT yoʻq.

MATLAB ning birinchi dastlabki versiyasi 1970-yillarning oxirida tugallangan.Dasturiy taʼminot birinchi marta 1979-yil fevral oyida Kaliforniyadagi dengiz aspiranturasida ommaga oshkor qilingan.MATLABning dastlabki versiyalari 71 ta oldindan tuzilgan funksiyaga ega oddiy matritsali kalkulyatorlar edi.Oʻsha paytda MATLAB bepul universitetlarga tarqatilgan.Moler oʻzi tashrif buyurgan universitetlarda nusxalarini qoldiradi va dasturiy taʼminot universitet kampuslarining matematika boʻlimlarida kuchli izdoshlar paydo boʻldi .

1980-yillarda Kliv Moler Jon N. Little bilan uchrashdi. Ular MATLABni C tilida qayta dasturlashga va uni oʻsha paytdagi asosiy kompyuterlar oʻrnini bosgan IBM ish stollari uchun sotishga qaror qilishdi..Jon Littl va dasturchi Stiv Bangert MATLABni C tilida qayta dasturlashdi, MATLAB dasturlash tilini yaratdilar va asboblar qutilari uchun funksiyalarni ishlab chiqdilar.

### Tijorat rivojlanishi
MATLAB birinchi marta 1984-yilda Las-Vegasda boʻlib oʻtgan Avtomatik boshqaruv konferensiyasida tijorat mahsuloti sifatida chiqarildi. ￼￼MathWorks￼￼, Inc. dasturiy taʼminotni ishlab chiqish uchun tashkil etilgan va MATLAB dasturlash tili chiqarildi. Birinchi MATLAB sotuvi keyingi yili Massachusets texnologiya institutidan Nik Trefeten oʻn nusxasini sotib olganida boʻldi.

1980-yillarning oxiriga kelib, MATLABning bir necha yuz nusxalari talabalar foydalanishi uchun universitetlarga sotildi..

Dasturiy taʼminot asosan turli sohalardagi mutaxassislar tomonidan maxsus matematik vazifalarni bajarish uchun yaratilgan asboblar qutilari tufayli ommalashgan. Koʻpgina asboblar qutilari Stenford talabalari tomonidan MATLAB dan akademik miqyosda foydalangan, keyin esa dasturiy taʼminotni xususiy sektorga olib kelganligi natijasida ishlab chiqian..

Vaqt oʻtishi bilan MATLAB Digital Equipment Corporation, VAX, Sun Microsystems va Unix shaxsiy kompyuterlari tomonidan yaratilgan dastlabki operatsion tizimlar uchun qayta yozildi. 3-versiya 1987-yilda chiqarilgan Birinchi MATLAB kompilyatori 1990-yillarda Stiven S. Jonson tomonidan ishlab chiqilgan.

2000-yilda MathWorks MATLAB 6 da chiziqli algebra uchun Fortranga asoslangan kutubxonani qoʻshib, dasturiy C tilidagi LINPACK va EISPACK pastki dasturlarini almashtirdi. (GPU) 2010-yilda unga qoʻshilgan.

### Yaqin tarix
2012-yilda 8-versiyada dasturiy taʼminotga katta oʻzgarishlar kiritildi Foydalanuvchi interfeysi qayta ishlandi va Simulink funksiyasi kengaytirildi. 2016-yilga kelib MATLAB bir qancha texnik va foydalanuvchi interfeysi yaxshilanishlarini, jumladan MATLAB Live Editor notebookini va boshqa funksiyalarni taqdim etdi.

## Sintaksis
MATLAB ilovasi MATLAB dasturlash tili atrofida qurilgan. MATLAB ilovasidan keng tarqalgan foydalanish „Buyruqlar oynasi“ dan interaktiv matematik qobiq sifatida foydalanish yoki MATLAB kodini oʻz ichiga olgan matnli fayllarni bajarishni oʻz ichiga oladi.

### Oʻzgaruvchilar
Oʻzgaruvchilar tayinlash operatori, `=` yordamida aniqlanadi. MATLAB zaif tiplangan dasturlash tilidir, chunki turlar bilvosita aylantiriladi.Bu taxmin qilingan tiplashtirilgan tildir, chunki oʻzgaruvchilar ularning turini eʼlon qilmasdan tayinlanishi mumkin, agar ular ramziy ob’ektlar sifatida koʻrib chiqilishi kerak boʻlsa va ularning turi oʻzgarishi mumkin. Qiymatlar konstantalardan, boshqa oʻzgaruvchilar qiymatlarini oʻz ichiga olgan hisoblashdan yoki funksiyaning chiqishidan kelib chiqishi mumkin. Masalan:
```matlabsession
>> x = 17
x =
 17

>> x = 'hatʼ
x =
hat

>> x = [3*4, pi/2]
x =
  12.0000  1.5708

>> y = 3*sin(x)
y =
  -1.6097  3.0000
```


### Vektorlar va matritsalar
Oddiy massiv ikki nuqta sintaksisi yordamida aniqlanadi: *boshlangʻich* `:` *increment* `:` *terminator* . Masalan; misol uchun:
```matlab
>> array = 1:2:9
array =
 1 3 5 7 9
```
1, 3, 5, 7,9 va 11
L
9 qiymatlaridan tashkil topgan massiv nomli `array` belgilaydi (yoki mavjud oʻzgaruvchiga `array` nomi bilan yangi qiymat beradi). Yaʼni, massiv 1 dan (*boshlangʻich* qiymat) boshlanadi, har bir qadam bilan oldingi qiymatdan 2 ga (*oʻsish* qiymati) ortadi va 9 ga (yoki undan oshib ketishga yaqin) yetganda toʻxtaydi.

Birlamchi qiymat 1 dan foydalanish uchun *oʻsish* qiymati aslida ushbu sintaksisdan (koʻp nuqtalardan biri bilan birga) tashqarida qolishi mumkin.
```matlab
>> ari = 1:5
ari =
 1 2 3 4 5
```
`ari` nomli oʻzgaruvchiga 1, 2, 3, 4 va 5 qiymatlari boʻlgan massivni tayinlaydi, chunki oʻsish sifatida standart qiymat 1 ishlatiladi.

Indekslash bir asosli boʻlib, C, C++ va Java kabi boshqa dasturlash tillarida qoʻllaniladigan nolga asoslangan indekslashdan farqli oʻlaroq, matematikada matritsalar uchun odatiy qoidadir.

Matritsalar qator elementlarini boʻsh joy yoki vergul bilan ajratish va satrlarni ajratish uchun nuqta-vergul yordamida aniqlanishi mumkin. Elementlar roʻyxati kvadrat qavslar bilan oʻralgan boʻlishi kerak `[]` . Qavslar `()` elementlar va pastki qatorlarga kirish uchun ishlatiladi (ular funksiya argumentlari roʻyxatini belgilash uchun ham ishlatiladi).
```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
```
Indekslar toʻplamini `[2, 3, 4]` ga baholovchi `2:4` kabi ifodalar bilan belgilash mumkin. Masalan, 2 dan 4 gacha satrlar va 3 dan 4 gacha ustunlardan olingan submatritsa quyidagicha yozilishi mumkin:
```matlab
>> A(2:4,3:4)
ans =
 11 8
 7 12
 14 1
```
*n* oʻlchamli kvadrat identifikatsiya matritsasi `eye` funksiyasi yordamida yaratilishi mumkin va nol yoki birlarga ega boʻlgan istalgan oʻlchamdagi matritsalar mos ravishda `zeros` va `ones` funksiyalari bilan yaratilishi mumkin.
```matlab
>> eye(3,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
```
Vektor yoki matritsani koʻchirish `transpose` funksiyasi yoki matritsadan keyin nuqta-past qoʻshish orqali amalga oshiriladi (nuqtasiz, prime murakkab massivlar uchun konjugat transpozitsiyani amalga oshiradi):
```matlab
>> ari = 1:5
ari =
 1 2 3 4 5
```
Aksariyat funksiyalar massivlarni kirish sifatida qabul qiladi va har bir elementda elementlar boʻyicha ishlaydi. Masalan, `mod(2*J,n)` *J* dagi har bir elementni 2 ga koʻpaytiradi va keyin har bir element modulini *n ga* kamaytiradi. MATLAB standart `for` va `while` sikllarini oʻz ichiga oladi, lekin (R kabi boshqa shunga oʻxshash ilovalarda boʻlgani kabi) vektorlashtirilgan yozuvdan foydalanish tavsiya etiladi va tez-tez bajariladi. *Magic.m* funksiyasidan olingan quyidagi kod *n* ning toq qiymatlari uchun sehrli *M* kvadrat hosil qiladi (MATLAB funksiyasi `meshgrid` bu yerda *1:n ni* oʻz ichiga olgan *I* va *J* kvadrat matritsalarini yaratish uchun ishlatiladi):
```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;
```


### Tuzilmalar
MATLAB strukturaviy maʼlumotlar turlarini qoʻllab-quvvatlaydi. MATLAB-dagi barcha oʻzgaruvchilar massiv boʻlgani sababli, massivning har bir elementi bir xil maydon nomlariga ega boʻlgan „struktura massivi“ yanada mosroq nomdir. Bundan tashqari, MATLAB dinamik maydon nomlarini qoʻllab-quvvatlaydi (nom boʻyicha maydonlarni qidirish, maydonni manipulyatsiya qilish va h.k.).).

### Funksiyalar
MATLAB funksiyasini yaratishda fayl nomi fayldagi birinchi funksiya nomiga mos kelishi kerak. Yaroqli funksiya nomlari alifbo belgisi bilan boshlanadi va harflar, raqamlar yoki pastki chiziqdan iborat boʻlishi mumkin. Oʻzgaruvchilar va funksiyalar katta-kichik harflarga sezgir.

### Funksiya tutqichlari
MATLAB lambda hisobining elementlarini funksiya tutqichlari, yoki funksiya havolalarini kiritish orqali qoʻllab-quvvatlaydi, ular.m fayllarda yoki anonim /ichiga qoʻyilgan funksiyalarda amalga oshiriladi.

### Sinflar va ob’ektga yoʻnaltirilgan dasturlash
MATLAB ob’ektga yoʻnaltirilgan dasturlashni qoʻllab-quvvatlaydi, jumladan sinflar, meros, virtual joʻnatish, paketlar, oʻtish-qiymat semantikasi va oʻtish-yoʻnaltiruvchi semantika. Biroq, sintaksis va chaqiruv qoidalari boshqa tillardan sezilarli darajada farq qiladi. MATLABda qiymat sinflari va mos yozuvlar sinflari mavjud boʻlib, ular sinfning super-sinf (mos yozuvlar sinflari uchun) yoki yoʻqligiga (qiymat sinflari uchun) *qarab*.

Metodni chaqirish harakati qiymat va mos yozuvlar sinflari oʻrtasida farq qiladi. Masalan, usulga qoʻngʻiroq qilish:
```matlab
object.method();
```
*Ob’ektning* har qanday aʼzosini faqat *ob’ektga* mos yozuvlar sinfining namunasi boʻlsa, oʻzgartirishi mumkin, aks holda qiymat klassi usullari ob’ektni oʻzgartirishi kerak boʻlsa, yangi namunani qaytarishi kerak.

Oddiy sinfga misol quyida keltirilgan:
```matlab
classdef Hello
  methods
    function greet(obj)
      disp('Hello!')
    end
  end
end
```
`Salom.m` nomli faylga qoʻyilganda, buni quyidagi buyruqlar bilan bajarish mumkin:

Yaʼni:
```matlabsession
>> x = Hello();
>> x.greet();
Hello!
```


## Grafik va grafik foydalanuvchi interfeysi dasturlash
MATLAB (Matritsa Labararatoriyasi) qattiq integratsiyalangan grafik chizish xususiyatlariga ega. Masalan, funksiya *grafigi* ikkita vektor *x* va *y* dan grafik hosil qilish uchun ishlatilishi mumkin. Kod:

Masalan:￼
```matlab
x = 0:pi/100:3*pi;
y = sin(x);
plot(x)
```
sinus funksiyasining quyidagi koʻrsatkichini hosil qiladi:

MATLAB uch oʻlchovli grafiklarni ham qoʻllab-quvvatlaydi:

MATLAB grafik foydalanuvchi interfeysi (GUI) ilovalarini ishlab chiqishni qoʻllab-quvvatlaydi.UI dasturlari yoki *GUIDE* va *App Designer* kabi vizual dizayn muhitlari yordamida yaratilishi mumkin.

## MATLAB va boshqa tillar
MATLAB C yoki Fortran dasturlash tillarida yozilgan funksiyalar va pastki dasturlarni chaqirishi mumkin.MATLAB maʼlumotlar turlarini uzatish va qaytarish imkonini beruvchi oʻrash funksiyasi yaratiladi. MEX fayllari (MATLAB bajariladigan fayllar) bu kabi funksiyalarni kompilyatsiya qilish orqali yaratilgan dinamik yuklanadigan obyekt fayllari. 2014-yildan boshlab Python bilan ikki tomonlama interfeys qoʻshildi.

Perl, Java, ActiveX va . NET kutubxonalarida yoziladi va toʻgʻridan-toʻgʻri MATLAB dan chaqirilishi mumkin.MATLAB kutubxonalari (masalan, XML yoki SQL- ni qoʻllab-quvvatlash) Java yoki ActiveX kutubxonalari atrofida oʻralgan holda amalga oshiriladi. Java-dan MATLAB-ga qoʻngʻiroq qilish ancha murakkab, lekin MathWorks tomonidan alohida sotiladigan MATLAB asboblar toʻplami yoki JMI (Java-to-MATLAB Interface) deb nomlangan hujjatsiz mexanizm (u) yordamida amalga oshirilishi mumkin. JMI deb ham ataladigan bogʻliq boʻlmagan Java metadata interfeysi bilan adashtirmaslik kerak). Java uchun rasmiy MATLAB API 2016-yilda qoʻshilgan.

MathWorks-da mavjud boʻlgan MuPAD- ga asoslangan SMT (Symbolic Math Toolbox)-ga alternativa sifatida MATLAB Maple yoki Mathematica -ga ulanishi mumkin.

MathML ni import va eksport qilish uchun kutubxonalar ham mavjud.

## AQSh sanksiyalariga munosabat
2020-yilda MATLAB AQSh sanktsiyalari natijasida Xitoyning ikkita universiteti xizmatlaridan voz kechdi. Universitetlar bunga ochiq manbali muqobillardan koʻproq foydalanish va mahalliy alternativalarni ishlab chiqish orqali javob berishini aytishdi.

MATLAB yiliga ikki marta yangilanadi .Yangi xususiyatlar va boshqa yaxshilanishlarga qoʻshimcha ravishda, har bir versiyada yangi xatolar tuzatilgan va kichikroq oʻzgarishlar mavjud.

Raqam (yoki nashr raqami) FLEXlm Concurrent License Manager dasturi tomonidan bildirilgan versiyadir. MATLAB va rasmiy asboblar qutilaridagi oʻzgarishlarning toʻliq roʻyxati uchun MATLAB nashri eslatmalariga murojaat qiling.

## Yana qarang

* Raqamli-tahlil dasturlarini taqqoslash
* Raqamli-tahlil dasturlari roʻyxati

## Manbalar

## Havolalar

* 
*