MATLAB – Уикипедия
За информацията в тази статия или раздел не са посочени източници. Въпросната информация може да е непълна, неточна или изцяло невярна. Имайте предвид, че това може да стане причина за изтриването на цялата статия или раздел. Шаблонът е поставен на 13:05, 3 май 2016 (UTC). |
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.