MATLAB

от Уикипедия, свободната енциклопедия
Направо към навигацията Направо към търсенето
MATLAB
Matlab Logo.png
Информация
Последна версия R2016a
Операционна система многоплатформен
Лиценз платен
Уебсайт 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 е изградена около скриптов език. Общата употреба на 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 * J2, 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 поддържа разработване на приложения с графичен потребителски интерфейс (GUI). MATLAB включва GUIDE (GUI среда за разработка) за графичен дизайн. Също така има и функции за изчертаване на графики. Например функцията plot() може да възпроизведе графика от два вектора x и y, които представляват съответно абсцисите и ординатите на даден набор от точки в декартова координатна система:

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

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

Matlab plot sin.svg

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

Резултатът:

MATLAB mesh sinc3D.svg
[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 surf sinc3D.svg

Взаимодействие с други езици[редактиране | редактиране на кода]

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

Библиотеки, написани на Perl, Java, ActiveX или .NET, могат директно да се извикват от MATLAB.