MATLAB (на български се произнася „Матлаб“) е съкращение от MATrix LABoratory (на български: „матрична лаборатория“) и е софтуерна среда за числен анализ и самостоятелен програмен език от четвърто поколение. Създадена от многонационалната корпорация за софтуер за технически приложения The MathWorks, системата MATLAB позволява операции над матрици, изчертаване графики на функции и представяне на данни, програмна реализация на алгоритми, разработка на човеко-машинни интерфейси и интерфейси с други програмни продукти, написани на различни програмни езици като C++ и FORTRAN.

MATLAB
Информация
Последна версияR2021b
22 септември 2021
Операционна системамногоплатформен
Лицензплатен
УебсайтMATLAB
MATLAB в Общомедия

По твърдения на компанията производител от 2004 г. MATLAB се използва от над 1 милион потребители от академичните среди и бизнеса и намира приложение в разнообразни области като инженерство, наука, икономика и др. Измежду организациите потребители на MATLAB са Масачузетският технологичен институт, НАСА, обществото „Макс Планк“, Университетът в Аахен, „Боинг“, „Локхийд-Мартин“, „Моторола“, „Новартис“, „Файзър“, „Тойота“, „Форд мотор къмпани“, „УниКредит“ и много други.

Някои вградени команди

редактиране
  • sum – намира сумата от елементите в дадена матрица;
  • mean – намира средната аритметична стойност на няколко елемента;
  • max – отделя максималния елемент (реално число) от дадена матрица;
  • min – отделя минималния елемент (реално число) от дадена матрица;
  • rot90 – завърта елементите на матрицата на деветдесет градуса – тогава вторичният диагонал става допълнителен, а елементът от първия ред и първия стълб остава на първия ред, но вече попада в последния стълб.

Клив Молер, председател на Отдела за компютърни науки в Университета на Ню Мексико, започва да разработва MATLAB в края на 70-те години. Той го проектира с цел да предостави достъп на студентите си до Linpack и EISPACK, без да се налага да учат Fortan. Скоро след това се разпространява и в други университети, като привлича вниманието на математическата общност. Инженерът Джак Литъл е заинтересован от MATLAB по време на посещение на Молер до Станфордския университет през 1983 г. Осъзнавайки търговския потенциал, той се присъединява към Молер и Стив Бангерт. Те пренаписват MATLAB на C (език за програмиране) и основават The MathWorks през 1984 г. Тези редактирани библиотеки са известни като JACKPAC. През 2000 г. пакетът MATLAB е доусъвършенстван с цел да осигури нов, по-богат набор от библиотеки за манипулация с данни.

Първоначално MATLAB е приет от изследователи и практици в системи за управление, но бързо се разпространява в много други области. Сега се използва също и в областта на образованието, по-специално за преподаването на линейна алгебра и числени методи, и е популярен сред учените, участващи в обработката на изображения.

Синтаксис

редактиране

Платформата MATLAB е се базира на скриптов език. Общата употреба на системата включва използването на Command Window като интерактивен математически shell или изпълнение на текстови файлове, съдържащи MATLAB код.

Променливи

редактиране

Променливи се дефинират с помощта на оператора за присвояване =. 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

Вектори и матрици

редактиране

Един масив можем да дефинираме с помощта на синтаксиса: начална стойност : стойност на увеличение : крайна стойност. Например:

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

Тук дефинираме променлива с име array, която е масив, съдържащ стойностите 1, 3, 5, 7 и 9. Стойността на първия елемент на масива е 1 (начална стойност), а всяка следваща стойност се получава от предишната с прибавяне на 2 (стойност на увеличение). Това действие завършва, след като е достигната стойността 9 (крайна стойност).

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

Стойността на увеличение може и да не бъде явно дефинирана в синтаксиса. В този случай тя по подразбиране се приема равна на 1.

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

Матриците могат да бъдат дефинирани чрез отделяне на елементите на един ред с празно място или запетая. Символът точка и запетая се използва за преминаване на следващия ред. Списъкът от елементи трябва да бъде поставен в квадратни скоби []. Кръгли скоби () се употребяват за достъп до елемент:

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

Със следния синтаксис можем да вземем част от матрица: от 2-ри до 4-ти ред и от 3-ти до 4-ти стълб включително:

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

Функцията 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 могат да приемат като аргументи матрици и съответно се прилагат по отношение на всеки елемент. Например mod (2 * J, n) ще умножи всеки елемент в матрицата J по 2 и след това ще намали всеки елемент по модул n. MATLAB не включва стандартните цикли for и while, но (както и в други подобни приложения, например R) като се използва векторна нотация, често се произвежда код, който е по-бърз за изпълнение. Следващият код, откъс от функцията magic.m, създава магически квадрат M за нечетни стойности на n (вградената функция meshgrid се използва тук, за да генерира квадратни матрици I и J, съдържащи 1: n).

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

Класове и обектно ориентирано програмиране

редактиране

MATLAB поддържа обектно ориентирано програмиране: класове, наследяване, виртуални функции, пакети, предаване по стойност и предаване по референция. Въпреки това конвенциите в синтаксиса са значително по-различни от другите езици. MATLAB има класове стойност и референтни класове в зависимост от това дали този клас трябва да се изпълнява като super-клас (за референтни класове), или не (за класове стойност).

Поведението при извикване на дадена функция (метод) в класовете стойност и референтните класове е различно. Например следващото извикване на метода method():

object.method();

може да променя кой да е обект на даден клас, стига този клас да е от референтен тип. Много прост пример за дефиниция на клас е следният:

classdef hello
    methods
        function greet(this)
            disp('Hello!')
        end
    end
end

Когато поставите този код във файл с име hello.m, функцията в него може да бъде изпълнена със следните команди:

>> x = hello;
>> x.greet();
Hello!

Графика и графичен потребителски интерфейс за програмиране

редактиране

MATLAB поддържа разработване на приложения с графичен потребителски интерфейс (Graphical User Interface, GUI) и по-точно динамичната среда GUIDE (GUI среда за разработка) за графичен дизайн. Също така има и функции за изчертаване на графики. Например функцията plot() може да възпроизведе графика от два вектора x и y (с еднакъв брой елементи), които представляват съответно абсцисите и ординатите на даден набор от точки в декартова координатна система:

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

Горното извикване изчертава графиката на функцията y = sinx:

 

MATLAB може да възпроизвежда и тримерни графики посредством функциите surf(), plot3() и mesh():

[X,Y] = meshgrid(-10:0.25:10,-10:0.25:10);
f = sinc(sqrt((X/pi).^2+(Y/pi).^2));
mesh(X,Y,f);
axis([-10 10 -10 10 -0.3 1])
xlabel('{\bfx}')
ylabel('{\bfy}')
zlabel('{\bfsinc} ({\bfR})')
hidden off

Резултатът е показан на фигурата по-долу.

 
[X,Y] = meshgrid(-10:0.25:10,-10:0.25:10);
f = sinc(sqrt((X/pi).^2+(Y/pi).^2));
surf(X,Y,f);
axis([-10 10 -10 10 -0.3 1])
xlabel('{\bfx}')
ylabel('{\bfy}')
zlabel('{\bfsinc} ({\bfR})')

Изпълнението на горния код извежда в отделен графичен прозорец следната повърхнина:

 

Взаимодействие с други езици

редактиране

MATLAB може да извиква функции и методи, написани на езиците C или Fortran. Динамично натоварените обектни файлове, които са компилирани като функции, са MEX-files (от MATLAB exexutable). Библиотеки, написани на Perl, Java, ActiveX или .NET, могат директно да се извикват от MATLAB.