stringtranslate.com

МАТЛАБ

MATLAB (аббревиатура от «MATrix LABoratory» [22] ) — это запатентованный многопарадигмальный язык программирования и среда числовых вычислений , разработанная MathWorks . MATLAB позволяет выполнять матричные манипуляции, строить графики функций и данных, реализовывать алгоритмы , создавать пользовательские интерфейсы и взаимодействовать с программами, написанными на других языках.

Хотя MATLAB предназначен в первую очередь для численных вычислений, дополнительный набор инструментов использует символьный движок MuPAD , предоставляя доступ к возможностям символьных вычислений . Дополнительный пакет Simulink добавляет графическое многодоменное моделирование и проектирование на основе моделей для динамических и встроенных систем .

По состоянию на 2020 год MATLAB имеет более четырех миллионов пользователей по всему миру. [23] Они имеют разный опыт в области инженерии , науки и экономики . По состоянию на 2017 год более 5000 мировых колледжей и университетов используют MATLAB для поддержки обучения и исследований. [24]

История

Происхождение

MATLAB был изобретен математиком и программистом Кливом Молером . [25] Идея MATLAB была основана на его докторской диссертации 1960-х годов. [25] Молер стал профессором математики в Университете Нью-Мексико и начал разрабатывать MATLAB для своих студентов [25] в качестве хобби. [26] Он разработал первоначальное программирование линейной алгебры MATLAB в 1967 году вместе со своим бывшим научным руководителем Джорджем Форсайтом . [25] За этим последовал код Fortran для линейных уравнений в 1971 году. [25]

До версии 1.0 MATLAB «не был языком программирования; это был простой интерактивный матричный калькулятор. Не было ни программ, ни наборов инструментов, ни графики. И никаких ОДУ или БПФ ». [27]

Первая ранняя версия MATLAB была завершена в конце 1970-х годов. [25] Программное обеспечение было впервые представлено общественности в феврале 1979 года в Военно-морской аспирантуре в Калифорнии. [26] Ранние версии MATLAB представляли собой простые матричные калькуляторы с 71 встроенной функцией. [28] В то время MATLAB распространялся бесплатно [29] [30] в университетах. [31] Молер оставлял копии в университетах, которые посещал, и программное обеспечение приобрело большую популярность на математических факультетах университетских кампусов. [32] : 5 

В 1980-х годах Клив Молер встретил Джона Н. Литтла . Они решили перепрограммировать MATLAB на C и продавать его для настольных компьютеров IBM, которые в то время заменяли мэйнфреймы. [25] Джон Литтл и программист Стив Бангерт перепрограммировали MATLAB на C, создали язык программирования MATLAB и разработали функции для наборов инструментов. [26]

С 1993 года доступны альтернативные версии с открытым исходным кодом — GNU Octave (в основном совместимый с Matlab) и scilab (похожий на Matlab).

Коммерческое развитие

MATLAB был впервые выпущен как коммерческий продукт в 1984 году на конференции по автоматическому управлению в Лас-Вегасе . [25] [26] Для разработки программного обеспечения была основана компания MathWorks , Inc. [30] и был выпущен язык программирования MATLAB. [28] Первая продажа MATLAB состоялась в следующем году, когда Ник Трефетен из Массачусетского технологического института купил десять копий. [26] [33]

К концу 1980-х годов несколько сотен копий MATLAB были проданы университетам для использования студентами. [26] Программное обеспечение стало популярным во многом благодаря наборам инструментов, созданным экспертами в различных областях для выполнения специализированных математических задач. [29] Многие из наборов инструментов были разработаны в результате того, что студенты Стэнфорда использовали MATLAB в академической среде, а затем принесли программное обеспечение с собой в частный сектор. [26]

Со временем MATLAB был переписан для ранних операционных систем, созданных Digital Equipment Corporation , VAX , Sun Microsystems , и для ПК с ОС Unix. [26] [28] Версия 3 была выпущена в 1987 году. [34] Первый компилятор MATLAB был разработан Стивеном С. Джонсоном в 1990-х годах. [28]

В 2000 году MathWorks добавила библиотеку на основе Fortran для линейной алгебры в MATLAB 6, заменив оригинальные подпрограммы LINPACK и EISPACK, которые были на C. [28] Parallel Computing Toolbox от MATLAB был представлен на Суперкомпьютерной конференции 2004 года, а поддержка графических процессоров (GPU) была добавлена ​​в него в 2010 году. [28]

Недавняя история

Некоторые особенно крупные изменения в программном обеспечении были сделаны в версии 8 в 2012 году. [35] Пользовательский интерфейс был переработан [ необходима ссылка ] и функциональность Simulink была расширена. [ 36] К 2016 году MATLAB представил несколько технических и пользовательских улучшений интерфейса, включая блокнот MATLAB Live Editor и другие функции. [28]

Синтаксис

Приложение MATLAB построено на языке программирования MATLAB. Обычное использование приложения MATLAB подразумевает использование «Командного окна» в качестве интерактивной математической оболочки или выполнение текстовых файлов, содержащих код MATLAB. [37]

Пример «Привет, мир!»

Пример программы «Hello, world!» существует в MATLAB.

disp ( 'Привет, мир!' )

Это отображается так:

Привет, мир!

Переменные

Переменные определяются с помощью оператора присваивания, =. MATLAB является слабо типизированным языком программирования, поскольку типы преобразуются неявно. [38] Это выведенный типизированный язык, поскольку переменные могут быть назначены без объявления их типа, за исключением случаев, когда они должны рассматриваться как символические объекты, [39] и их тип может изменяться. Значения могут быть получены из констант , из вычислений, включающих значения других переменных, или из выходных данных функции. Например:

>> х = 17 х = 17  >> x = 'шляпа' x = шляпа  >> х = [ 3 * 4 , пи / 2 ] х =  12,0000 1,5708   >> y = 3 * sin ( x ) y =  -1,6097 3,0000  

Векторы и матрицы

Простой массив определяется с помощью синтаксиса двоеточия: начальный :инкремент :терминатор . Например:

>> массив = 1 : 2 : 9 массив = 1 3 5 7 9  

определяет переменную с именем array(или присваивает новое значение существующей переменной с именем array), которая представляет собой массив, состоящий из значений 1, 3, 5, 7 и 9. То есть массив начинается с 1 ( начальное значение), увеличивается с каждым шагом от предыдущего значения на 2 ( значение приращения ) и останавливается, когда достигает (или почти превышает) 9 ( значение конца ).

Значение приращения на самом деле можно исключить из этого синтаксиса (вместе с одним из двоеточий), чтобы использовать значение по умолчанию 1.

>> ари = 1 : 5 ари = 1 2 3 4 5  

присваивает переменной с именем ariмассив со значениями 1, 2, 3, 4 и 5, поскольку в качестве приращения используется значение по умолчанию 1.

Индексация начинается с единицы [40], что является обычным соглашением для матриц в математике, в отличие от индексации, начинающейся с нуля, которая обычно используется в других языках программирования, таких как C, C++ и Java.

Матрицы можно определить, разделив элементы строки пробелом или запятой и используя точку с запятой для разделения строк. Список элементов должен быть заключен в квадратные скобки []. Скобки ()используются для доступа к элементам и подмассивам (они также используются для обозначения списка аргументов функции).

>> А = [ 16 , 3 , 2 , 13 ; 5 , 10 , 11 , 8 ; 9 , 6 , 7 , 12 ; 4 , 15 , 14 , 1 ] А = 16 3 2 13  5 10 11 8  9 6 7 12  4 15 14 1                    >> A ( 2 , 3 ) ответ = 11

Наборы индексов могут быть заданы выражениями, такими как 2:4, что вычисляется как [2, 3, 4]. Например, подматрица, взятая из строк 2–4 и столбцов 3–4, может быть записана как:

>> А ( 2 : 4 , 3 : 4 ) ans = 11 8 7 12 14 1

Квадратную единичную матрицу размера n можно сгенерировать с помощью функции eye, а матрицы любого размера с нулями или единицами можно сгенерировать с помощью функций zerosи ones, соответственно.

>> глаз ( 3 , 3 ) ответ = 1 0 0 0 1 0 0 0 1>> нули ( 2 , 3 ) ответ = 0 0 0 0 0 0>> единицы ( 2 , 3 ) ответы = 1 1 1 1 1 1

Транспонирование вектора или матрицы выполняется либо функцией transpose, либо добавлением точки-штриха после матрицы (без точки штрих будет выполнять сопряженное транспонирование для комплексных массивов):

>> A = [ 1 ; 2 ], B = A . ' , C = транспонировать ( A ) A =  1  2 B =  1 2 C =  1 2          >> Д = [ 0 , 3 ; 1 , 5 ] , Д. ' D =  0 3  1 5 ans =  0 1  3 5       

Большинство функций принимают массивы в качестве входных данных и работают поэлементно с каждым элементом. Например, mod(2*J,n)умножит каждый элемент в J на ​​2, а затем уменьшит каждый элемент по модулю n . MATLAB включает стандартные forи whileциклы, но (как и в других подобных приложениях, таких как APL и R ), использование векторизованной нотации рекомендуется и часто выполняется быстрее. Следующий код, взятый из функции magic.m , создает магический квадрат M для нечетных значений n (функция MATLAB meshgridиспользуется здесь для генерации квадратных матриц I и J , содержащих ⁠ ⁠ ):

[ J , I ] = сеткасетка ( 1 : n ); A = mod ( I + J - ( n + 3 ) / 2 , n ); B = mod ( I + 2 * J - 2 , n ); M = n * A + B + 1 ;                              

Структуры

MATLAB поддерживает типы структурных данных. [41] Поскольку все переменные в MATLAB являются массивами, более адекватным названием будет «структурный массив», где каждый элемент массива имеет одинаковые имена полей. Кроме того, MATLAB поддерживает динамические имена полей [42] (поиск полей по имени, манипуляции с полями и т. д.).

Функции

При создании функции MATLAB имя файла должно совпадать с именем первой функции в файле. Допустимые имена функций начинаются с буквенного символа и могут содержать буквы, цифры или символы подчеркивания. Переменные и функции чувствительны к регистру. [43]

rgbImage = imread ( 'ecg.png' ); grayImage = rgb2gray ( rgbImage ); % для неиндексированных изображений level = graythresh ( grayImage ); % порог для преобразования изображения в двоичный, binaryImage = im2bw ( grayImage , level ); % Извлечь отдельные каналы красного, зеленого и синего цветов. redChannel = rgbImage (:, :, 1 ); greenChannel = rgbImage (:, :, 2 ); blueChannel = rgbImage (:, :, 3 ); % Сделать черные части чисто красными. redChannel ( ~ binaryImage ) = 255 ; greenChannel ( ~ binaryImage ) = 0 ; blueChannel ( ~ binaryImage ) = 0 ; % Теперь объединим для формирования выходного изображения. rgbImageOut = cat ( 3 , красныйКанал , зеленыйКанал , синийКанал ); imshow ( rgbImageOut );                                   

Функции управления

MATLAB поддерживает элементы лямбда-исчисления , вводя дескрипторы функций [44] или ссылки на функции, которые реализованы либо в файлах .m, либо в анонимных [45] /вложенных функциях. [46]

Классы и объектно-ориентированное программирование

MATLAB поддерживает объектно-ориентированное программирование, включая классы, наследование , виртуальную диспетчеризацию, пакеты, семантику передачи по значению и семантику передачи по ссылке . [47] Однако синтаксис и соглашения о вызовах существенно отличаются от других языков. MATLAB имеет классы значений и классы ссылок, в зависимости от того, имеет ли класс handle как суперкласс (для классов ссылок) или нет (для классов значений). [48]

Поведение вызова метода отличается между классами значений и ссылочными классами. Например, вызов метода:

объект . метод ();

может изменить любой член объекта, только если объект является экземпляром ссылочного класса, в противном случае методы класса значений должны возвращать новый экземпляр, если необходимо изменить объект.

Пример простого класса приведен ниже:

classdef Hello методы function greet ( obj ) disp ( 'Hello!' ) end end end       

Если поместить его в файл с именем hello.m, его можно выполнить с помощью следующих команд:

>> x = Привет (); >> x . greet (); Привет!  

Программирование графики и графического пользовательского интерфейса

MATLAB имеет тесно интегрированные функции построения графиков. Например, функция plot может быть использована для создания графика из двух векторов x и y . Код:

х = 0 : пи / 100 : 2 * пи ; у = грех ( х ); сюжет ( х , у )    

дает следующую фигуру синусоидальной функции :

MATLAB также поддерживает трехмерную графику:

MATLAB поддерживает разработку приложений с графическим пользовательским интерфейсом (GUI). [49] Пользовательские интерфейсы могут быть созданы либо программно, либо с использованием визуальных сред проектирования, таких как GUIDE и App Designer . [50] [51]

MATLAB и другие языки

MATLAB может вызывать функции и подпрограммы, написанные на языках программирования C или Fortran . [52] Создается функция-обертка, позволяющая передавать и возвращать типы данных MATLAB. Файлы MEX (исполняемые файлы MATLAB) — это динамически загружаемые объектные файлы, созданные путем компиляции таких функций. [53] [54] С 2014 года добавляется все больше двусторонних интерфейсов с Python . [55] [56]

Библиотеки, написанные на Perl , Java , ActiveX или .NET, можно вызывать напрямую из MATLAB, [57] [58], и многие библиотеки MATLAB (например, поддержка XML или SQL ) реализованы как оболочки вокруг библиотек Java или ActiveX. Вызов MATLAB из Java более сложен, но может быть выполнен с помощью набора инструментов MATLAB [59] , который продается отдельно MathWorks , или с помощью недокументированного механизма, называемого JMI ​​(интерфейс Java-to-MATLAB), [60] [61] (который не следует путать с несвязанным интерфейсом метаданных Java , который также называется JMI). Официальный API MATLAB для Java был добавлен в 2016 году. [62]

В качестве альтернативы набору инструментов Symbolic Math Toolbox на базе MuPAD , доступному в MathWorks, MATLAB можно подключить к Maple или Mathematica . [63] [64]

Существуют также библиотеки для импорта и экспорта MathML . [65]

Отношение к санкциям США

В 2020 году MATLAB прекратила предоставлять услуги двум китайским университетам из-за санкций США. Университеты заявили, что на это отреагируют более широким использованием альтернатив с открытым исходным кодом и разработкой внутренних альтернатив. [66]

Смотрите также

Примечания

  1. ^ ab "MathWorks объявляет о выпуске MATLAB и Simulink версии 2024b" . Получено 15 сентября 2024 г. .
  2. ^ "Защитите свой исходный код". MathWorks . Получено 1 ноября 2019 г.
  3. ^ "Совместимость платформы MEX". MathWorks . Получено 1 ноября 2019 г.
  4. ^ "MAT-File Versions". MathWorks . Получено 1 ноября 2019 г.
  5. ^ "Сохранить рисунок, чтобы открыть его позже в MATLAB". MathWorks . Получено 1 ноября 2019 г.
  6. ^ "Формат файла живого кода (.mlx)". MathWorks . Получено 1 ноября 2019 г.
  7. ^ "MATLAB App Designer". MathWorks . Получено 1 ноября 2019 г.
  8. ^ "Toolbox Distribution". MathWorks . Получено 1 ноября 2019 г.
  9. ^ "Файл установщика приложений MATLAB". MathWorks . Получено 1 ноября 2019 г.
  10. ^ "Установка пакета поддержки". MathWorks . Получено 1 ноября 2019 г.
  11. ^ "Интервью с КЛИВОМ МОЛЕРОМ, проведенное Томасом Хейгом 8 и 9 марта 2004 г. в Санта-Барбаре, Калифорния" (PDF) . Музей истории компьютеров. Архивировано из оригинала (PDF) 27 декабря 2014 г. . Получено 6 декабря 2016 г. Таким образом, APL, Speakeasy, LINPACK, EISPACK и PL0 были предшественниками MATLAB.
  12. ^ Безансон, Джефф; Карпински, Стефан; Шах, Вирал; Эдельман, Алан (14 февраля 2012 г.). «Почему мы создали Джулию». Julia Language . Получено 1 декабря 2016 г. .
  13. ^ Eaton, John W. (21 мая 2001 г.). «Octave: Past, Present, and Future» (PDF) . Texas-Wisconsin Modeling and Control Consortium . Архивировано из оригинала (PDF) 9 августа 2017 г. . Получено 1 декабря 2016 г. .
  14. ^ "История". Scilab. Архивировано из оригинала 1 декабря 2016 г. Получено 1 декабря 2016 г.
  15. ^ SM Rump: INTLAB – INTerval LABoratory. В книге Тибора Чендеса, редактора, Developments in Reliable Computing, страницы 77–104. Kluwer Academic Publishers, Дордрехт, 1999.
  16. ^ Мур, Р. Э., Кирфотт, Р. Б. и Клауд, М. Дж. (2009). Введение в интервальный анализ. Общество промышленной и прикладной математики .
  17. ^ Рамп, SM (2010). Методы проверки: строгие результаты с использованием арифметики с плавающей точкой. Acta Numerica , 19, 287–449.
  18. ^ Харгривз, GI (2002). Интервальный анализ в MATLAB. Численные алгоритмы, (2009.1).
  19. ^ "L-образная мембрана". MathWorks. 2003. Получено 7 февраля 2014 .
  20. ^ "Системные требования и доступность платформы". MathWorks . Получено 14 августа 2013 г.
  21. ^ «Платформа дорожной карты для семейств продуктов MATLAB и Simulink». de.mathworks.com . Получено 22 декабря 2021 г. .
  22. ^ "Матрицы и массивы - MATLAB и Simulink". www.mathworks.com . Получено 21 мая 2022 г. .
  23. ^ The MathWorks (февраль 2020 г.). «Обзор компании» (PDF) .
  24. ^ "Текущее количество пользователей Matlab во всем мире". Mathworks . 9 ноября 2017 г. Получено 26 апреля 2023 г.
  25. ^ abcdefgh Чонаки, Н.; Винч, Д. (2005). «Обзоры Maple, Mathematica и Matlab: скоро выйдут в ближайшем к вам издании». Вычислительная техника в науке и технике . 7 (2). Институт инженеров по электротехнике и электронике (IEEE): 9–10. Bibcode : 2005CSE.....7b...9C. doi : 10.1109/mcse.2005.39. ISSN  1521-9615. S2CID  29660034.
  26. ^ abcdefgh Хейг, Томас. «Клив Молер: пионер математического программного обеспечения и создатель Matlab» (PDF) . Анналы IEEE по истории вычислений . IEEE Computer Society.
  27. ^ "Краткая история MATLAB". www.mathworks.com . Получено 4 сентября 2021 г. .
  28. ^ abcdefg Молер, Клив; Литтл, Джек (12 июня 2020 г.). «История MATLAB». Труды ACM по языкам программирования . 4 (HOPL). Ассоциация вычислительной техники (ACM): 1–67. doi : 10.1145/3386331 . ISSN  2475-1421.
  29. ^ Аб Сюэ, Д.; Пресс, ТУ (2020). Программирование MATLAB: решения математических задач. Де Грюйтер STEM. Де Грюйтер. п. 21. ISBN 978-3-11-066370-9. Получено 16 сентября 2020 г. .
  30. ^ ab Press, CRC (2008). Решение прикладных математических задач с помощью MATLAB. CRC Press. стр. 6. ISBN 978-1-4200-8251-7. Получено 16 сентября 2020 г. .
  31. ^ Woodford, C.; Phillips, C. (2011). Численные методы с рабочими примерами: издание Matlab. SpringerLink : Bücher. Springer Netherlands. стр. 1. ISBN 978-94-007-1366-6. Получено 16 сентября 2020 г. .
  32. ^ Tranquillo, JV (2011). MATLAB для инженерии и наук о жизни. Синтез цифровой библиотеки инженерии и компьютерных наук. Morgan & Claypool Publishers. ISBN 978-1-60845-710-6. Получено 17 сентября 2020 г. .
  33. ^ LoTurco, Lori (28 января 2020 г.). «Ускорение темпов инжиниринга». MIT News . Massachusetts Institute of Technology . Получено 16 сентября 2020 г. .
  34. ^ Гатто, Марино; Риццоли, Андреа (1993). «Обзор MATLAB, версия 4.0». Моделирование природных ресурсов . 7 (1). Wiley: 85–88. Bibcode : 1993NRM.....7...85G. doi : 10.1111/j.1939-7445.1993.tb00141.x. ISSN  0890-8575.
  35. ^ Чо, М. Дж.; Мартинес, В. Л. (2014). Статистика в MATLAB: Учебник. Chapman & Hall/CRC Computer Science & Data Analysis. CRC Press. ISBN 978-1-4665-9657-3. Получено 17 сентября 2020 г. .
  36. ^ Xue, D.; Chen, Y. (2013). Методы моделирования систем с MATLAB и Simulink. Больше не используется. Wiley. стр. 17. ISBN 978-1-118-69437-4. Получено 15 октября 2020 г. .
  37. ^ "MATLAB Documentation". MathWorks . Получено 14 августа 2013 г.
  38. ^ "Сравнение MATLAB с другими объектно-ориентированными языками". MATLAB . MathWorks . Получено 14 августа 2013 г. .
  39. ^ "Создание символических переменных и выражений". Symbolic Math Toolbox . MathWorks . Получено 14 августа 2013 г. .
  40. ^ "Matrix Indexing". MathWorks . Получено 14 августа 2013 г.
  41. ^ "Структуры". MathWorks . Получено 14 августа 2013 г.
  42. ^ "Создание имен полей из переменных". MathWorks . Получено 14 августа 2013 г.
  43. ^ "Чувствительность к регистру и пробелам". MathWorks . Получено 1 ноября 2019 г.
  44. ^ "Function Handles". MathWorks . Получено 14 августа 2013 г.
  45. ^ "Анонимные функции". MathWorks . Получено 14 августа 2013 г.
  46. ^ "Вложенные функции". MathWorks.
  47. ^ "Объектно-ориентированное программирование". MathWorks . Получено 14 августа 2013 г.
  48. ^ «Сравнение классов дескрипторов и значений». MathWorks.
  49. ^ "MATLAB GUI". MathWorks. 30 апреля 2011 г. Получено 14 августа 2013 г.
  50. ^ "Создание простого GUIDE GUI". MathWorks . Получено 14 августа 2014 г.
  51. ^ "MATLAB App Designer". MathWorks . Получено 1 ноября 2019 г.
  52. ^ "Application Programming Interfaces to MATLAB". MathWorks. Архивировано из оригинала 15 сентября 2017 г. Получено 14 августа 2013 г.
  53. ^ "Создание MEX-файлов". MathWorks. Архивировано из оригинала 3 марта 2014 г. Получено 14 августа 2013 г.
  54. ^ Spielman, Dan (10 февраля 2004 г.). «Connecting C and Matlab». Йельский университет, факультет компьютерных наук . Получено 20 мая 2008 г.
  55. ^ "MATLAB Engine for Python". MathWorks . Получено 13 июня 2015 г.
  56. ^ "Call Python Libraries". MathWorks . Получено 13 июня 2015 г.
  57. ^ "Внешние интерфейсы языка программирования". MathWorks. Архивировано из оригинала 11 марта 2014 г. Получено 14 августа 2013 г.
  58. ^ "Вызов скрипта Perl с использованием соответствующего исполняемого файла операционной системы". MathWorks . Получено 7 ноября 2013 г.
  59. ^ "MATLAB Builder JA". MathWorks . Получено 7 июня 2010 г.
  60. ^ Альтман, Яир (14 апреля 2010 г.). «Интерфейс Java-to-Matlab». Недокументированный Matlab. Архивировано из оригинала 5 сентября 2015 г. Получено 7 июня 2010 г.
  61. ^ Каплан, Джошуа. «матлабконтроль JMI».
  62. ^ "MATLAB Engine API для Java". MathWorks . Получено 15 сентября 2016 г.
  63. ^ Germundsson, Roger (30 сентября 1998 г.). "MaMa: Вызов MATLAB из Mathematica с помощью MathLink". Wolfram Research . Архив библиотеки Wolfram.
  64. ^ rsmenon; szhorvat (2013). "MATLink: Связь с MATLAB из Mathematica" . Получено 14 августа 2013 г.
  65. ^ Weitzel, Michael (1 сентября 2006 г.). "MathML import/export". MathWorks - File Exchange. Архивировано из оригинала 25 февраля 2011 г. Получено 14 августа 2013 г.
  66. ^ «Запрет американских военных лишил два китайских университета доступа к популярному программному обеспечению». South China Morning Post . 12 июня 2020 г. Получено 6 ноября 2020 г.

Дальнейшее чтение

Внешние ссылки