MATLAB

MATLAB သည် ဂဏန်းသင်္ချာ တွက်ချက်ရေးအတွက် programming language ဖြစ်သည်။ The MathWorks မှ မက်ထရစ်များ ဖြေရှင်းရန်အတွက်၊ ပုံများ ရေးဆွဲရန်အတွက်၊ အချက်အလက် (data), အယ်လ်ဂေါ်ရစ်သမ် သွင်းခြင်း (implementation)၊ user interface ပြုလုပ်ခြင်း နှင့် အခြား ပရိုဂရမ်များ နှင့် ဆက်စပ်ရာတွင် သုံးသည်။ MATLAB သည် ဂဏန်းသင်္ချာ တွက်ချက်ရေးအတွက်တာဖြစ်သော်လည်း အပို toolbox များသုံးပြီး Maple အက္ခရာသင်္ချာ စနစ်သုံး၍ ကွန်ပျူတာ အက္ခရာသင်္ချာ စွမ်းရည် ရနိုင်သည်။ ယခုအခါတွင် MuPad ကိုသုံး၍ အက္ခရာသင်္ချာများကိုတွက်ချက်နိုင်ပြီဖြစ်သည်။ ထို toolbox ကိုထပ်မံ၍ ဝယ်ယူအသုံးပြုရမည်ဖြစ်သည်။

= သမိုင်း =
"**mat**rix **lab**oratory" ၏အတိုကောက် ဖြစ်သော MATLAB သည် ၁၉၇၀ တွင် University of New Mexico ရှိ ကွန်ပျူတာ ဌာနမှ Cleve Moler ကတည်ထောင်ခဲ့သည်။ သူသည် သူ၏ ကျောင်းသားများကို Fotran လေ့လာစရာမလိုပဲ LINPACK နှင့် EISPACK များကို သုံးနိုင်ရန် ပုံထုတ်ခဲ့သည်။ ထိုမှ applied mathematics သုံးသူများကြား တွင်ကျယ်လာသည်။ ၁၉၈၃ တွင် Moler သည် Stanford University သို့သွားစဉ် အင်ဂျင်နီယာ Jack Little ကို MATLAB ပြသခဲ့သည်။ သူသည် ဈေးကွက်မြင်သော ကြောင့် Moler ၊ Steve Bangert တို့နှင့် ပေါင်းခဲ့သည်။ သူတို့သည် MATLAB ကို C ဖြင့်ရေးပြီး The MathWorks အဖြစ် ၁၉၈၄ တွင် တည်ထောင်ခဲ့သည်။ ထိုပြန်လည်ရေးသားသော library ကို JACKPAC ဟုခေါ်သည်။ 

MATLAB ကို Little ၏နယ်ဖြစ်သော control design engineer များက စတင်သုံးစွဲပြီး အခြားအသုံးများလဲ အမြန် ပျံနံ့သွားသည်။ MATLAB ကို ပညာရေးတွင် အသုံးပြီး အထူးသဖြင့် linear algebra နှင့် numerical analysis သင်ကြားရာ အသုံးများသည်။ သိပ္ပံပညာရှင် များ အထူးသဖြင့် image processing တွင် အသုံးများသည်။

= ရေးထုံး =

MATLAB သည် M-code ဟုခေါ်သော MATLAB programming language ကို အခြေခံထား သည့် ရေးထုံး (syntax) ဖြစ်သည်။ M-code ပရိုဂရမ် များ မောင်းရန် အလွယ်ဆုံးမှာ MATLAB command window ၏ prompt '>>' တွင် ရိုက်ထည့်ရန်ဖြစ်သည်။ ဤနည်းအားဖြင့် MATLAB ကို သင်္ချာဆိုင်ရာ အပြန်အလှန် shell အဖြစ်အသုံးပြုနိုင်သည်။ ထိုညွန်ကြားချက်များကို စာဖိုင် အဖြစ် သိမ်းနိုင်သည်။ ထိုကိစ္စအတွက် MATLAB Editor ကိုသုံးပြီး ဖန်ရှင်များပါသည့် script အဖြစ်သိမ်းနိုင်သည်။ ဖန်ရှင်များသည် မူလရှိနေသော MATLAB command များကို ဖြည့်စွက်ပေးသည်။

## ကိန်းရှင် 
ကိန်းရှင်များကို assignment operator, = သုံး၍ သက်မှတ်နိုင်သည်။ MATLAB သည် dynamically typed ဖြစ်သော ကြောင့် ကိန်းရှင်များကို symbolic object များမှလွဲ၍ မကြေညာပဲ သုံးနိုင်ပြီး type လည်း ပြောင်းလည်းနိုင်သည်။ တန်ဖိုးများကို ကိန်းသေ များမှ၎င်း၊ အခြား ကိန်းရှင်များ တွက်ချက်ရာမှ၎င်း၊ ဖန်ရှင်၏ ရလဒ်မှ၎င်း ရရှိနိုင်သည်။ 

```matlab
>> 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
```

## ဘက်တာ/မက်တရစ် 
MATLAB သည် "Matrix Laboratory" ဖြစ်သည်နှင့်အညီ ဘက်တာ၊ မက်တရစ် နှင့် multi-dimensional arrays များ ပြုလုပ်ရန် လွယ်ကူသည်။ MATLAB စကားအရ programming language များတွင် array ဟုခေါ်သော ဘက်တာ သည် (1×*N* or *N*×1) မက်တရစ် ပင်ဖြစ်လေသည်။ မက်တရစ် ကို များသောအားဖြင် 2-dimensional array ၊ ဆိုလိုသည်မှာ ၁ ထက်များသော *m* နှင့် *n* ၏ *m*×*n* array ဖြစ်သည်။ ဒိုင်မေးရှင်း နှစ်ခုထက်ပိုလျှင် multi-dimensional array ဟုခေါ်သည်။

MATLAB သည် array များကို အလွယ်တစ်ကူ တည်ဆောက်ရန် *init:increment:terminator* ဟူ၍ ရေးထုံး ပေးထားသည်။ ဥပမာ

```
>> array = 1:2:9
array =
 1 3 5 7 9
```

သည်  ကိန်းရှင် `array` ကို တည်ဆောက်ပြီး တစ်ပြိုက်တည်းမှာပင် 1, 3, 5, 7, နှင် 9 တန်ဖိုးများကို သက်မှတ်သည်။ ဆိုလိုသည်မှာ ထိုကိန်းရှင်သည် *အစ တန်ဖိုး* (init) 1 မှ *ခုန်ကျော် တန်ဖိုး* (increment) 2 ဖြင် *အဆုံးသတ် တန်ဖိုး* 9 (terminator) ထိ ရရှိခြင်းဖြစ်သည်။ တစ်ဖန် *ခုန်ကျော် တန်ဖိုး* 3 သို့ပြောင်းလျှင်

```
>> array = 1:3:9
array =
 1 4 7
```

တကယ်တော *ခုန်ကျော် တန်ဖိုး* ကိုခြံလှစ်ထားခဲ့လျှင် 1 ဖြစ်သွားပြီး

```
>> ari = 1:5
ari =
 1 2 3 4 5
```

ကိန်းရှင် တန်ဖိုး `ari` မှာ 1, 2, 3, 4, နှင် 5 ဖြစ်သည်။

MATLAB သည် သင်္ချာတို့ အတိုင်း Indexing ကို 1 မှစသည်။ ၎င်းအချက်မှာ အခြား programming language များတွင် သုံးသော သုံးည စ စနစ် များအကျား ထူးခြားချက် ဖြစ်သည်။

မက်တရစ်များ သက်မှတ်ရာတွင် အတန်း (row) တစ်ခု၏ ကိန်း (element) များကို ကွက်လပ် (blank space) သို့မဟုပ် ကော်မာ ဖြင် ခွဲခြားပြီး semicolon သည် အတန်းများကို တဖန် ခွဲခြားသည်။ ၎င်းတို့ကို square brackets: [] ဖြင် ခတ်ထားရမည်။ Parentheses: () ကိုမူ မက်တရစ်၏ ကိန်းများ ထုတ်ယူရာတွင် အသုံးပြုသည်။ ဖန်ရှင် များ အသွင်း (input argument) ပေးရာတွင်လဲ parentheses ကိုသုံးသည်။

```
>> 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

>> A(2:4,3:4)
ans =
 11 8
 7 12
 14 1
```

n ဆိုဒ် ရှိသော identity matrix ကို *eye* ဖန်ရှင် ဖြင် ထုတ်လုပ်နိုင်သည်။ သုံညကြီးပါသော မက်တရစ် ကို `zeros` ဖန်ရှင် သုံး၍၎င်း တစ်ကြီးပါသော မက်တရစ် ကို `ones` ဖန်ရှင် သုံး၍၎င်း လိုသော ဆိုဒ် အတိုင်း ထုတ်လုပ်နိုင်သည်။

```
>> 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
```

MATLAB ဖန်ရှင် အများစုမှာ မက်တရစ် ကိုလက်ခံပြီး ကိန်း (element) တစ်ခုခြင်းစည်ကို အကြိုးသက်ရောက်သည်။ ဥပမာ `mod(2*J,n)` သည် "J" တွင်ရှိသော ကိန်း (element) တစ်ခုခြင်းစည်ကို 2 ဖြင် မြောက်၍ "n" ဖြင် စားကျွှန်း (modulo) ရှာသည်။ MATLAB သည် ထုံးစံ "for" and "while" ပါတ်ခြင်းများပါသောလည်း MATLAB ၏ vectorized ရေးထုံးသည် ရေးရလွယ်ပြီး တွက်ချက်ရာတွင်လဲ မြန်စေသည်။ `magic.m` မှ အောက်ဖော်ပြပါ ရေးသားချက်သည် magic square ကို ထုတ်ပေးသည်။ 

```
[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;
```

## Semicolon 
အခြား programming language များတွင် semicolon ကို command များ အဆုံးသက်ရန်တွင်သုံးသည်။ MATLAB သည် semicolon သုံးခြင်းသည် optional ဖြစ်ပြီး မပါလျှင် အဖြေ ကို command prompt တွင် ပြသည်။ `clc` ကဲ့သို့ အဖြေမရှိသော ဖန်ရှင်များတွင် semicolon ပါသည်နှင် မပါသည်တို့ အတူတူပင်ဖြစ်သည်။ 

## ဂရပ်ပုံဆွဲခြင်း 
MATLAB ဖန်ရှင် `plot` ကို ဘတ်တာ *x* နှင် *y* တို့အား ဂရပ်ပုံဆွဲရန် အသုံးပြုသည်။ ဤကုဒ် 

```
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
```

သည် ၏ sine function ကိုပုံဖော်သည်။

သုံးဖက်မြင် ပုံများကိုမူ *surf*, *plot3* သို့မဟုတ် *mesh* ဖန်ရှင်များ သုံး၍ ဆွဲနိုင်သည်။

## လိုအပ်ချက်များ 
MATLAB သည် The MathWorks မှထုတ်လုပ်သော proprietary software ဖြစ်ခြင်းကြောင့် သုံးစွဲသူများအနေဖြင့် vendor lock-in ခံရမည် ပြဿနာရှိသည်။ မကြာမီကပင် Application Deployment တစ်ခုဖြစ်သည့် MATLAB Builder ဟုခေါ်သော အပို tool တစ်ခုကို MATLAB ဖန်ရှင်များအား .NET သို့မဟုတ် Java တို့တွင် library အဖြစ်သုံးရန် ထုတ်ခဲ့သည်။ သို့သော အားနည်းချက်မှာ သုံးစွဲသူ ကွန်ပျူတာတွင် MATLAB လုပ်ဆောင်ချက်များ ပေးအပ်ရန် MCR (MATLAB Component Runtime) လိုအပ်သည်။ MCR ကိုမူ MATLAB compiler မှထုတ်သော library files များ သုံးစွဲရန် လွတ်လပ်စွာ ဖြန့်ချိနိုင်သည်။

MATLAB သည် Fortran၊ Visual Basic နှင် Ada တို့ကဲ့သို့ လက်သည်းကွင်းကို ဥပမာ `y = f(x)` ကဲ့သို့ array များကို indexing လုပ်ရာတွင်၎င်း ဖန်ရှင် ခေါ်ရာတွင်၎င်းသုံးသည်။ ထိုရေးထုံးသည် procedure နှင် lookup table ကို ပြန်ပြောင်းရေးသားရန် လွယ်ကူစေသောလဲ နားလည်ရန်အတွက် သေချာ ကြည့်ရှုရန်လိုပေသည်။

## C နှင် Fortran ဖန်ရှင်များ ခေါ်ယူသုံးစွဲခြင်း 
MATLAB သည် C programming language သို့မဟုတ် Fortran များ ကို ခေါ်ယူသုံးစွဲနိုင်သည်။ ထို့အတွက် MATLAB data type များ အသွင်းအထုတ်လုပ်ရန် wrapper function တစ်ခု လိုသည်။ ထိုဖန်ရှင်များကို လိုအပ်သည့်သလို ခေါ်ယူသုံးစွဲနိုင်သော "MEX-files" ဟုခေါ်ပြီး ၎င်း၏ extension မှာ operating system အပေါ် မူတည်သည်။

## ထုတ်ဝေမှု သမိုင်း 
Date - release name - version
:

* 2008, R2008a, 7.6
* 2007, R2007b, 7.5
* 2007, R2007a, 7.4
* 2006, R2006b, 7.3
* 2006, R2006a, 7.2
* 2005, R14SP3, 7.1
* 2005, R14SP2, 7.0.4
* 2004, R14SP1, 7.0.1
* 2004, R14, 7
* 2003, R13SP2, 6.5.2
* 2003, R13SP1, 6.5.1
* 2002, R13. 6.5
* 2001, R12.1, 6.1
* 2000, R12, 6.0
* 1999, R11.1, 5.3.1
* 1999, R11, 5.3
* 1998, R10.1, 5.2.1
* 1998, R10, 5.2
* 1997, R9.1, 5.1.1
* 1997, R9, 5.1
* 1996, R8, 5.0
* 1994, R7, 4.2c
* 1992, R?, 4
* 1990, R?, 3.5
* 1987, R?, 3
* 1986, R?, 2
* 1984, R?, 1.0

## ကိုးကား