MATLAB (сокращение от , в русском языке произносится как Матла́б) — платформа для программирования и пакет прикладных программ для решения задач технических вычислений. Пакет используют более миллиона инженерных и научных работников, он работает на большинстве современных операционных систем, включая Linux, macOS, Solaris (начиная с версии R2010b поддержка Solaris прекращена) и Windows.
История MATLAB как язык программирования был разработан Кливом Моулером () в конце 1970-х годов, когда он был деканом факультета компьютерных наук в Университете Нью-Мексико. Целью разработки служила задача дать студентам факультета возможность использования программных библиотек Linpack и EISPACK без необходимости изучения Фортрана. Вскоре новый язык распространился среди других университетов и был с большим интересом встречен учёными, работающими в области прикладной математики. До сих пор в Интернете можно найти версию 1982 года, написанную на Фортране, распространяемую с открытым исходным кодом. Инженер Джон Литтл () познакомился с этим языком во время визита Клива Моулера в Стэнфордский университет в 1983 году. Поняв, что новый язык обладает большим коммерческим потенциалом, он объединился с Кливом Моулером и Стивом Бангертом (). Совместными усилиями они переписали MATLAB на C и основали в 1984 компанию The MathWorks для дальнейшего развития. Эти переписанные на С библиотеки долгое время были известны под именем JACKPAC. Первоначально MATLAB предназначался для проектирования систем управления (основная специальность Джона Литтла), но быстро завоевал популярность во многих других научных и инженерных областях. Он также широко использовался и в образовании, в частности, для преподавания линейной алгебры и численных методов.
Язык MATLAB
Описание языка Язык MATLAB является высокоуровневым интерпретируемым языком программирования, включающим основанные на матрицах структуры данных, широкий спектр функций, интегрированную среду разработки, объектно-ориентированные возможности и интерфейсы к программам, написанным на других языках программирования.
Программы, написанные на MATLAB, бывают двух типов — функции и скрипты. Функции имеют входные и выходные аргументы, а также собственное рабочее пространство для хранения промежуточных результатов вычислений и переменных. Скрипты же используют общее рабочее пространство. Как скрипты, так и функции сохраняются в виде текстовых файлов и компилируются в машинный код динамически. Существует также возможность сохранять так называемые pre-parsed программы — функции и скрипты, обработанные в вид, удобный для машинного исполнения. В общем случае такие программы выполняются быстрее обычных, особенно если функция содержит команды построения графиков.
Основной особенностью языка MATLAB являются его широкие возможности по работе с матрицами, которые создатели языка выразили в лозунге «думай векторно» ().
Векторы и матрицы Пример кода, являющегося частью функции magic.m, генерирующего магический квадрат M для нечётных значений размера стороны 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; Пример кода, загружающего одномерный массив A значениями массива B в обратном порядке (только если вектор A определён, и число его элементов совпадает с числом элементов вектора B): A(1:end) = B(end:-1:1);
Графики Программа MATLAB может создавать трёхмерную графику с помощью функций surf, plot3 или mesh. [X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2); Z = sin(R)./R; Z(R==0) = 1; mesh(X,Y,Z); Этот код создаст каркасный 3D график sinc-функции .
Деление графического окна осуществляется командой subplot (количество строк, количество столбцов, текущий элемент) (представим что как бы матрицу создаем). Построение Полиномиальной регрессии для табличных данных возможно через команду Tools > Basic Fitting графического окна вывода.
Вычисление площади ограниченной линиями Вычисление площади ограниченной двумя линиями возможно с помощью команды quad (площадь определённого интеграла, код см. ниже). Аргументами quad являются точки пересечения линий (находятся с помощью команды fzero(первый аргумент разница между функциями, второй аргумент отрезок или точка где разница между фунуциями равна нулю). clear all clc close all f=@(x) 0.5*x.^2+sin(5*x)-5*x+1 g=@(x) sqrt(x.^2+5.5) X=-2:0.01:14; subplot(2,1,1) plot(X,f(X),'m','LineWidth',2) hold on plot(X,g(X),'g','LineWidth',2) grid xlabel('x') ylabel('f,g') legend('f','g','Location','best') F=@(x) g(x)-f(x) subplot(2,1,2) plot(X,F(X),'b','LineWidth',2) hold on plot([-2 14],[0 0],'k','LineWidth',2) grid xlabel('x') ylabel('f,g') x1=fzero(F,0) x2=fzero(F,[10,14]) S=quad(F,x1,x2)
Перенос строки в командном окне В случае длинных формул, когда выражение не влезает в строку в программе предусмотрена функция переноса в командном окне осуществляется тремя точками «…». Точки становятся синего цвета, курсор на следующей строке мигает но нет знака двойного неравенства >> (знак начала командной строки). Например, t=sqrt(abs(sin(1.3*pi)/cos(4.6)*tan(0.7*pi)/acot(0.3)))-... (exp(-0.2)*log(3.8)^1.2)^(1/3)
равносильно t=sqrt(abs(sin(1.3*pi)/cos(4.6)*tan(0.7*pi)/acot(0.3)))-(exp(-0.2)*log(3.8)^1.2)^(1/3)
Оформление графиков Функция plot() позволяет менять цвет и тип отображаемой линии, в том числе логарифмической шкале. Для этого, используются дополнительные параметры, которые записываются следующим образом: plot(<x>, <y>, <’цвет линии, тип линии, маркер точек’>); Например, plot(X,Y,'r--','LineWidth',2, 'Marker','o','MarkerFaceColor','k') построит график красного цвета (r), штрихпунктирный(--), с толщиной линии 2 ('LineWidth',2), с маркером в виде круга ('Marker','o'), закрашенного в черный цвет ('MarkerFaceColor','k').
grid
xlabel('x')
ylabel('y')
title('Lomanaya liniya') grid создает сетку, xlabel('x') и ylabel('y') подписывает оси координат, title('Lomanaya linia') дает заголовок графику.
Ввод векторов (соответственно потом и матриц (массивов)) В квадратных скобках перечисляем элементы вектора через пробел (можно разделять запятой) и элементы выложатся в строчку. Например, X=[2 3 4 3 5 1]Если потребуется выложить элементы в столбец то элементы нужно разделять точкой с запятой «;» (в принципе всегда можно применить процедуру транспонирования).
Очень часто нужно задать вектор, элементы которого отличаются на одинаковую величину — шаг. Особенно это актуально когда строим графики функций (область построения этой функции разделяем точками с каким-то шагом). Для этой задачи используется символ индексации двоеточие «:». Например, от 0 до 10 для шага 2: Y=[0:2:10] (если шаг равен 1 то его не пишем, единицу MATLAB поставит по умолчанию). Вектор может быть аргументом функции, например F=sin(Y)
Самый сложный момент для понимания и восприятия программы Есть такие вещи, которые в математике определённой операцией не описаны. Например работа поэлементно с элементами массива. В математике мы можем поэлементно работать с элементами массива, но нет определённого обозначения для этого. В Matlabe есть. В случае, если нужно применить действие к каждому элементу массива то нужно ставить точку «.». Например, есть вектор F F=[0 3 4 3 5 1] мы спокойно его можем поделить на два: F/2 Далее получим (каждый элемент вектора будет поделен на 2): 0 1.5000 2.0000 1.5000 2.5000 0.5000
Однако, если написать 2/F Matlab выдаст ошибку: Error using / Matrix dimensions must agree. Как только в голове возникает мысль, что действие нужно применить к каждому элементу вектора в Matlabe на это нужно указать проставлением точки перед действием: 2./F. Далее получим: Inf 0.6667 0.5000 0.6667 0.4000 2.0000. Inf обозначает что было произведено деление на ноль.
Задание функций В случае если есть два графика функции и нужно определить их пересечение, далее посчитать площадь которая ограничивается в результате пересечения. В Matlabe пользовательскую функцию можно создать добавлением знака «@» (в круглых скобках пишем то, от чего эта функция зависит): f=@(x)0.5*x^2+sin(5*x)-5*x+1 что соотвтетствует функции . Точка стоит только перед степенью (.^), это говорит о том, что функция будет вектором. Перед суммой, разностью точки не ставятся так как векторы складывать, вычитать можно по обычным правилам.
MATLAB выведет: f =
function_handle with value:
@(x)0.5*x.^2+sin(5*x)-5*x+1 function_handle говорит о том что функция ручной работы, пользовательская.
Пример кода для вывода диапазона построения от −2 до 12 с шагом 0.01 (можно вводить как 0.01 так и .01): X=-2:.01:12; Точка с запятой ";"в конце команды обозначает, что результат не будет выведен на экран. Для вывода функций вместе в одном окне можно использовать команду hold on: plot(X,f(X)) hold on plot(X,g(X)) grid legend('f','g','Location','best')
legend('f','g','Location','best') говорит о том что подписи функций на совместном графике будут расположены в наиболее свободном месте.
Применение
Математика и вычисления MATLAB предоставляет пользователю большое количество (несколько сотен) функций для анализа данных, покрывающие практически все области математики, в частности:
Матрицы и линейная алгебра — алгебра матриц, линейные уравнения, собственные значения и векторы, сингулярности, факторизация матриц и другие. Многочлены и интерполяция — корни многочленов, операции над многочленами и их дифференцирование, интерполяция и экстраполяция кривых и другие. Математическая статистика и анализ данных — статистические функции, статистическая регрессия, цифровая фильтрация, быстрое преобразование Фурье и другие. Обработка данных — набор специальных функций, включая построение графиков, оптимизацию, поиск нулей, численное интегрирование (в квадратурах) и другие. Дифференциальные уравнения — решение дифференциальных и дифференциально-алгебраических уравнений, дифференциальных уравнений с запаздыванием, уравнений с ограничениями, уравнений в частных производных и другие. Разреженные матрицы — специальный класс данных пакета MATLAB, использующийся в специализированных приложениях (функция появилась в 1992 году). Целочисленная арифметика — выполнение операций целочисленной арифметики в среде MATLAB.
Разработка алгоритмов MATLAB предоставляет удобные средства для разработки алгоритмов, включая высокоуровневые с использованием концепций объектно-ориентированного программирования. В нём имеются все необходимые средства интегрированной среды разработки, включая отладчик и профайлер. Функции для работы с целыми типами данных облегчают создание алгоритмов для микроконтроллеров и других приложений, где это необходимо.
Визуализация данных В составе пакета MATLAB имеется большое количество функций для построения графиков, в том числе трёхмерных, визуального анализа данных и создания анимированных роликов.
Встроенная среда разработки позволяет создавать графические интерфейсы пользователя с различными элементами управления, такими как кнопки, поля ввода и другими.
Независимые приложения Программы MATLAB, как консольные, так и с графическим интерфейсом пользователя, могут быть собраны с помощью модуля MATLAB Compiler в независимые от MATLAB исполняемые приложения или динамические библиотеки, для запуска которых на других компьютерах, однако, требуется установка свободно распространяемой среды MATLAB Runtime (ранее называлась MATLAB Compiler Runtime MCR).
Внешние интерфейсы Пакет MATLAB включает различные интерфейсы для получения доступа к внешним подпрограммам, написанным на других языках программирования, данным, клиентам и серверам, общающимся через технологии Component Object Model или Dynamic Data Exchange, а также периферийным устройствам, которые взаимодействуют напрямую с MATLAB. Многие из этих возможностей известны под названием MATLAB API.
COM