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 (език за програмиране) и основават MathWorks през 1984 г. Тези пренаписани библиотеки са били известни като JACKPAC. През 2000 г., MATLAB е пренаписана, за да използвате по-нов набор от библиотеки за манипулация матрици, LAPACK.

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), като се използва векторнa нотация често се произвежда код, който е по-бърз да се изпълни. Този код, откъс от функцията magic.m, създава магически квадрат M за нечетни стойности на n (MATLAB функция 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-клас (за референтни класове) или не (за класове стойност).

Поведението на извикване на Метод е различено между стойностни и референтни класове.

Например, едно извикване на метод:

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 среда за разработка) за графичен дизайн GUIs. Също така има и функции за изчертаване на графики. Пример, функцията plot може да възпроизведе графика от два вектора x и y. Кодът:

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

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

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

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