MATLAB

**MATLAB** (ingelesezko '''' —«matrize laborategia»— izen osoaren laburtzapena) zenbakizko konputazioko sistema bat da, bere programazio-lengoaia propioarekin (M lengoaia) garapen ingurune integratua (IDE) eskaintzen duena. Erabilgarri dago Unix, Windows, macOS eta GNU/Linux plataformetarako.

Bere oinarrizko ezaugarrien artean daude matrizeen manipulazioa, datuen eta funtzioen irudikapena, algoritmoak ezartzea, erabiltzaile interfazeak sortzea ( GUI ) eta beste hizkuntza batzuetako programekin eta beste hardware gailu batzuekin komunikatzea. MATLAB paketeak bere gaitasunak zabaltzen dituzten bi tresna osagarri ditu, hau da, Simulink (domeinu anitzeko simulazio plataforma) eta GUIDE (erabiltzaile interfazearen editorea - GUI). Gainera, MATLABen gaitasunak tresna kutxekin zabaldu ditzakezu; eta Simulink- enak bloke paketeekin (bloke multzoak).

Unibertsitateetan eta ikerketa eta garapen zentroetan asko erabiltzen den softwarea da. Azken urtetan ezaugarri kopurua handitu egin da, esate baterako, seinale digitalen prozesadoreak zuzenean programatzea edo VHDL kodea sortzea.

2004an, MATLAB milioi bat lagunek baino gehiagok erabiltzen zutela kalkulatu zen esparru akademiko eta enpresarialetan.

MATLAB aplikazioak bere programazio lengoaian garatzen dira. Hizkuntza hau interpretatuta dago, eta ingurune interaktiboan zein script fitxategi baten bidez (* .m fitxategiak) exekutatu daiteke. Hizkuntza honek bektore eta matrizearen eragiketak, funtzioak, lambda kalkulua eta objektuetara bideratutako programazioa ahalbidetzen ditu.

## Historia 
MATLAB Cleve Moler matematikariak eta informatika programatzaileak asmatu zuten.  Matematikaren aldeko ideia 1960ko bere doktoretza tesian oinarritu zen. Moler Mexiko Berriko Unibertsitatean matematikako irakasle bihurtu zen, eta bere ikasleentzat MATLAB garatzen hasi zen hobby gisa . 1967an, MATLAB hasierako programazio linealeko aljebra garatu zuen George Forsythe bere tesi bakarreko aholkulariarekin. 1971ko ekuazio linealetarako Fortran kodea jarraitu zitzaion.

Hasieran (1.1 bertsioaren aurretik), MATLAB ez zen programazio-lengoaia bat, baizik eta matrize interaktibo kalkulagailu sinple bat. Ez zegoen ez programarik, ez tresnarik, ez grafikorik. Eta ODErik ezta FFTs-rik ez. 

1970eko hamarkadaren amaieran egin zen lehen bertsio goiztiarra, softwarea publikoari 1979ko otsailean Kaliforniako Naval Postgraduate Schoolen argitaratu zitzaion lehen aldiz. MATLAB bertsio Early matrize kalkulagailu sinpleak izan ziren, aurretik eraikitako 71 funtzioekin. Garai hartan, MATLAB doan banatu zen  unibertsitateetan. Molerrek kopiak utziko zituen bisitatu zituen unibertsitateetan, eta softwarea ondorengo indartsu bat garatu zen unibertsitate campusetako matematika zerbitzuetan.

1980ko hamarkadan, Cleve Molerrek John N. Little ezagutu zuen. MATLAB C formatuan berprogramatzea erabaki zuten eta IBMko idazmahaietan merkaturatu zuten, garai hartan mainframe ordenagailuak ordezten ari zirenak.  John Little eta Steve Bangert programatzaileek MATLAB berriro programatu zuten C kategorian, MATLAB programazio-lengoaia sortu zuten, eta toolboxetarako ezaugarriak garatu zituzten.

## Sintaxia 
MATLAB aplikazioa MATLAB programazio lengoaiaren inguruan eraikitzen da. MATLAB aplikazioaren erabilera komunak barne hartzen du "agindu Window" maskor matematiko interaktibo edo testu-fitxategi exekutatzaile bat erabiltzea, MATLAB kodea duena.

### Aldagaiak 
Aldagaiak funtzio operadorea erabiliz definitzen dira, MATLAB programazio-lengoaia ahul bat da, motak bere baitan konbertitzen direlako. Ondorioztatutako hizkuntza bat da, aldakorrak esleitu daitezkeelako beren mota adierazi gabe, objektu sinbolikotzat hartu behar badira izan ezik, eta horien mota alda daitekeelako.  Balioak konstanteengandik, beste aldagai batzuen balioak barne hartzen dituen kalkulutik edo funtzio baten irteeratik etor daitezke. Adibidez:

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

### Matrizeak eta Bektoreak 
Bektore sinple bat, kolon sintaxia erabiliz definitzen da: hasiera:gehikuntza:bukaera. Adibidez:

Matrize-lerro baten elementuak espazio edo koma hutsarekin bereiziz defini daiteke eta errenkada bakoitza amaitzeko puntu-koma(‘;’) bat erabiliz. Elementuen zerrenda kortxetez inguratua egon behar da. Parentesiak (elementu eta azpigenero) sartzeko erabiltzen dira (funtzio-argumentu zerrenda izendatzeko ere erabiltzen dira).

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

>> A = [ 16 3 2 13 ; 5 10 11 8 ; 9 6 7 12 ; 4 15 14 1]
```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
```

### Klaseak eta objektuetara zuzendutako programazioa 
MATLABek objektuetara zuzendutako programazioa onartzen du, besteak beste, klaseak, herentzia, bidalketa birtuala, paketeak, balioaren araberako semantika eta erreferentziazko semantika. Hala ere, sintaxia eta dei-konbentzioak nabarmen desberdinak dira beste hizkuntzekiko. MATLABek balio-klaseak eta erreferentzia-klaseak ditu, klaseak *heldulekua* super-klase gisa duen ala ez (erreferentzia-klaseetarako) edo ez (balio-klaseetarako).

Metodo-deiaren portaera desberdina da balio eta erreferentzia klaseen artean. Adibidez, metodo baterako deia:

```matlab
object.method();
```

Edozein *objektu* kidea alda dezake *objektuaren* erreferentzia klase baten instantzia bat baldin bada bakarrik, bestela balio class metodo instantzia berria itzuli behar objektuaren aldatzeko beharra badu.

Klase sinple baten adibidea behean ematen da:

```matlab
classdef Hello
  methods
    function greet(obj)
      disp('Hello!')
    end
  end
end
```

`hello.m` izeneko fitxategi batean sartzen denean, hau komando hauekin exekutatu daiteke:

```matlabsession
>> x = Hello();
>> x.greet();
Hello!
```

### Grafikoak eta Erabiltzaile-interfaze grafikoaren programazioa 
{
	"version": 2,
	"width": 400,
	"height": 200,
	"data": [
		{
			"name": "table",
			"values": [
				{
					"x": 3,
					"y": 1
				},
				{
					"x": 1,
					"y": 3
				},
				{
					"x": 2,
					"y": 2
				},
				{
					"x": 3,
					"y": 4
				}
			]
		}
	],
	"scales": [
		{
			"name": "x",
			"type": "ordinal",
			"range": "width",
			"zero": false,
			"domain": {
				"data": "table",
				"field": "x"
			}
		},
		{
			"name": "y",
			"type": "linear",
			"range": "height",
			"nice": true,
			"domain": {
				"data": "table",
				"field": "y"
			}
		}
	],
	"axes": [
		{
			"type": "x",
			"scale": "x"
		},
		{
			"type": "y",
			"scale": "y"
		}
	],
	"marks": [
		{
			"type": "rect",
			"from": {
				"data": "table"
			},
			"properties": {
				"enter": {
					"x": {
						"scale": "x",
						"field": "x"
					},
					"y": {
						"scale": "y",
						"field": "y"
					},
					"y2": {
						"scale": "y",
						"value": 0
					},
					"fill": {
						"value": "steelblue"
					},
					"width": {
						"scale": "x",
						"band": "true",
						"offset": -1
					}
				}
			}
		}
	]
}

MATLABek ondo integratuta ditu grafikoak egiteko ezaugarriak. Adibidez, funtzio- *diagrama* *erabil daiteke x* eta *y* bi bektoreren grafiko bat sortzeko. Kodea:

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

Sinu funtzioaren irudi hau sortzen du:

350x350px

MATLABek hiru dimentsioko grafikoak ere onartzen ditu:

MATLABek erabiltzailearen interfaze grafikoa (GUI) aplikazioak garatzen laguntzen du. Interfazeak programatikoki edo diseinu bisualeko inguruneak erabiliz sor daitezke, hala nola *GUIDE* eta *App Designer* .

## Kanpo estekak