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