MATLAB – Уикипедия

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

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

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