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]

Libraries written in Perl, Java, ActiveX or .NET can be directly called from MATLAB,[57][58] and many MATLAB libraries (for example XML or SQL support) are implemented as wrappers around Java or ActiveX libraries. Calling MATLAB from Java is more complicated, but can be done with a MATLAB toolbox[59] which is sold separately by MathWorks, or using an undocumented mechanism called JMI (Java-to-MATLAB Interface),[60][61] (which should not be confused with the unrelated Java Metadata Interface that is also called JMI). Official MATLAB API for Java was added in 2016.[62]

As alternatives to the MuPAD based Symbolic Math Toolbox available from MathWorks, MATLAB can be connected to Maple or Mathematica.[63][64]

Libraries also exist to import and export MathML.[65]

Relations to US sanctions

In 2020, MATLAB withdrew services from two Chinese universities as a result of US sanctions. The universities said this will be responded to by increased use of open-source alternatives and by developing domestic alternatives.[66]

See also

Notes

  1. ^ a b "MathWorks Announces Release 2024b of MATLAB and Simulink". Retrieved September 15, 2024.
  2. ^ "Protect Your Source Code". MathWorks. Retrieved November 1, 2019.
  3. ^ "MEX Platform Compatibility". MathWorks. Retrieved November 1, 2019.
  4. ^ "MAT-File Versions". MathWorks. Retrieved November 1, 2019.
  5. ^ "Save Figure to Reopen in MATLAB Later". MathWorks. Retrieved November 1, 2019.
  6. ^ "Live Code File Format (.mlx)". MathWorks. Retrieved November 1, 2019.
  7. ^ "MATLAB App Designer". MathWorks. Retrieved November 1, 2019.
  8. ^ "Toolbox Distribution". MathWorks. Retrieved November 1, 2019.
  9. ^ "MATLAB App Installer File". MathWorks. Retrieved November 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 г.

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

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