Я использовал МАТЛАБ более 25 лет. (А до этого я даже пользовался MATRIXx , пусть он будет пухом.
) Это не первый язык, на котором я научился программировать , но это язык, на котором я математически повзрослел.
Знание MATLAB помогло моей карьере.
Однако невозможно игнорировать рост использования Python в научных вычислениях.
MathWorks, должно быть, чувствует то же самое: они не только добавили возможность вызвать Python напрямую из MATLAB , но и позаимствовал некоторые особенности его языка, например, более агрессивный передача инфекции для компонентов бинарного оператора.
Наступил момент, когда я усомнился в дальнейшем использовании MATLAB как в исследованиях, так и в преподавании.
Однако я так много вложил в материалы, что было трудно найти мотивацию изучать что-то новое.
Учебник по вводным основам MATLAB, соавтором которого я был по вычислительной математике.
Статья переведена при поддержке EDISON Software, которая заботится о здоровье программистов и их завтраке , и разрабатывает индивидуальное программное обеспечение .
Книга содержит более 40 функций и 160 вычислительных примеров и охватывает то, что я считаю фундаментальным в использовании MATLAB для научных численных вычислений.
Частично для самосовершенствования, а частично для повышения полезности книги в этом году я решил перевести код на Юлия И Питон .
Этот опыт привел меня к специфическим взглядам трех языков на научные вычисления, которые я пытаюсь описать ниже.
Я оставлю в стороне вопросы стоимости и открытости.
MATLAB, в отличие от Python и Julia, не распространяется свободно.
Это огромная разница – для кого-то, но я хочу рассмотреть технические достоинства.
За прошедшие годы MATLAB вышел далеко за рамки любого бесплатного продукта, предлагая ряд очень полезных способов, и если вы хотите быть продуктивным, то цена будет адской.
Это отдельный разговор о платонической привлекательности языка и экосистем.
Если оставить в стороне вопросы стоимости, многие различия между этими языками связаны с их происхождением.
MATLAB сначала отдал приоритет математическому аспекту, а именно вычислительной математике.
Python, появившийся в 1980-х годах, положил в основу информатики.
Julia, созданная в 2009 году, стремилась достичь баланса между двумя предыдущими языками.
МАТЛАБ
Первоначально каждое значение в MATLAB представляло собой массив чисел двойной точности с плавающей запятой.Оба аспекта этого выбора — массивы и числа с плавающей запятой — были вдохновленными дизайнерскими решениями.
Стандарт IEEE 754 для чисел с плавающей запятой не был принят до 1985 года, а память измерялась в килобайтах, а не в гигабайтах.
Двойные числа с плавающей запятой были не самым эффективным способом отображения символов или целых чисел, но именно их хотели использовать ученые, инженеры и все математики большую часть времени.
Кроме того, нельзя объявлять переменные и выделять память.
Позволяя компьютеру выполнять эти задачи и избавляясь от типов данных, вы освобождаете свой мозг для размышлений об алгоритмах, которые будут работать с данными.
Массивы важны, потому что числовые алгоритмы в линейной алгебре приняли свои собственные формы.
Но доступ к ним с помощью стандартной среды научных вычислений FORTRAN 77 представлял собой многоэтапный процесс, включавший объявление переменных, вызов скрытых имен подпрограмм, компиляцию кода, а затем анализ данных и выходных файлов.
Запись умножения матрицы в виде А*В и печать ответа сразу привели к изменению правил игры.
MATLAB также сделал графику простой и открытой.
Никаких сложных машинно-зависимых библиотек с низкоуровневыми вызовами, простоplot(x,y), и вы увидите то, что любой другой увидел бы с MATLAB. Было еще больше инноваций, таких как комплексная запутанность чисел, разреженные матрицы, инструменты для создания кросс-платформенных графических пользовательских интерфейсов и передовой набор решателей ОДУ, которые сделали MATLAB местом для научных вычислений со скоростью мысли.
Однако дизайн, который был идеален для интерактивных вычислений, даже длительных, не всегда приводил к написанию хороших и производительных программ.
Перемещение данных между многими функциями требовало манипулирования множеством переменных и частого обращения к документации по входным и выходным аргументам.
Одна функция на файл на диске в плоском пространстве имен была очень простой для небольшого проекта, но головной болью для большого.
Если вы хотели избежать проблем со скоростью вычислений, необходимо было применять определенные шаблоны программирования (векторизация, предварительное выделение памяти).
Научные вычисления теперь применяются во многих других областях с огромным количеством различных типов данных.
И так далее.
В ответ MathWorks продолжила внедрять инновации в MATLAB: встроенные функции, вложенные функции, конечные переменные, несколько типов данных, объектно-ориентированные функции, среды модульного тестирования и так далее.
Каждое нововведение, вероятно, было решением важной проблемы.
Но накопление этих изменений в течение 40 лет имело побочный эффект: подрыв простоты и единства концепции.
В 2009 году я написал книгу , который достаточно хорошо осветил основы MATLAB менее чем на 100 страницах.
Насколько я знаю, все эти вещи до сих пор доступны.
Но сейчас нужно знать гораздо больше, чтобы называть себя профессионалом.
Питон
Частично история Python является зеркальным отражением истории MATLAB. Оба языка имели интерактивную командную строку (теперь называемую REPL — сокращение от read-eval printloop, что переводится как цикл чтения-оценки-печати), а также свободу от различных объявлений и компиляций.Однако MatLab был создан в первую очередь с прицелом на вычислительный анализ, а Python был создан для хакеров.
Затем каждый язык смог расширить свою пользовательскую базу за счет обновлений и улучшений функций.
На мой взгляд, Python все еще страдает от бедности своего математического аппарата.
В нем есть такие неудобные мелочи, как наличие ** вместо ^, @ используется для умножения матриц (добавлено недавно!), не размера, а формы матрицы, строкового хранения и т.д. Если подумать что V.conj().
T@D**3@V более элегантен, чем V∗D 3 В, то скорее всего у тебя не в порядке с головой.
Также его индексация начинается с 0 (вместо 1).
у меня была возможность познакомиться с противоположное мнение , однако, на мой взгляд, это не так убедительно, Очевидно, это все вопрос личных предпочтений, тема священных войн в Интернете, так как всегда можно привести громоздкий пример в свою пользу, Что определенно кажется убедительным Я в том, что на протяжении десятилетий математической индексации векторов и матриц мы всегда начинаем с 1, и многие псевдокоды основаны на этом предположении.
Помимо некоторых неудобств, я считаю систему Python+NumPy+SciPy громоздкой и непоследовательной.
Ярким примером является тот факт, что, несмотря на высокую объектно-ориентированность, существуют матричные классы, и тем не менее их использование не рекомендуется , Возможно, МатЛаб меня так избаловал, но матрицы я считаю важным объектом, который нужно держать под рукой и активно использовать.
Разве не главная особенность ООП — возможность использовать * для выполнения различных операций с массивами и матрицами? Вообще в этом плане много досадных моментов (Зачем мне вообще команда spsolve ? Почему я не могу просто применить команду решения к разреженной матрице? И еще много подобного.
) Есть также места, где численная экосистема выглядит немного хуже.
Например, квадрат и Решатели ОДУ выглядят минималистично в 2019 году.
Насколько я могу судить, для DAE, DDE, симплектических или неявных решателей не существует методов, допускающих внутренние итерации Крылова.
Посмотрите, этим функциям в основном 30 лет и больше — они все еще хороши, но очень далеки от совершенства.
Matplotlib — потрясающий пакет для работы, и в некоторых случаях он выглядел лучше, чем MATLAB, но мне не хватает 3D. Некоторые эксперты утверждают, что существуют причины, по которым код Python имеет проблемы со скоростью выполнения при использовании компилируемых языков.
Я удивлен результатом поиска » питон слишком медленный «Защитники Python приводят множество аргументов/оправданий, которые люди приводили в свое время в пользу MATLAB. Это не значит, что они неправы, но это нечто большее.
Я понимаю, почему Python так заинтересовал многих людей, занимающихся научными вычислениями.
Он имеет некоторый синтаксис MATLAB и возможности, доступные в REPL. Он имеет отличные инструменты и хорошо работает с другими языками и областями вычислений.
Он предложил его бесплатно и с гораздо лучшей долгосрочной воспроизводимостью.
Очевидно, что это хорошо работает для многих людей, которые, вероятно, не видят смысла меняться.
Из-за того, что я умею делать в научных вычислениях, изучение и использование Python становится более сложной задачей, чем я привык.
Некоторое время мы не будем знать, продолжится ли оно в сообществе или оно уже достигло своего пика.
Юлия
У Юлии есть свои преимущества и недостатки, поскольку она пришла поздно.Я восхищаюсь создателями Юлии за то, что они понимают, что они мог бы добиться большего
Нам нужен язык с открытым исходным кодом и библиотечной лицензией.Я думаю, что они во многом преуспели.Нам нужна скорость C с динамикой Ruby. Нам нужен гомоионный язык с реальными макросами, такими как Lisp, но с очевидными, знакомыми математическими обозначениями, такими как Matlab. Нам нужно что-то такое же простое для программирования, как Python, такое же простое для статистики, как R, такое же естественное для манипуляций со строками, как Perl, такое же мощное для линейной алгебры, как Matlab, и способное объединять программы, как оболочка.
Что-то, что легко освоить, но тем не менее понравится самым серьезным хакерам.
Мы хотим, чтобы он был интерактивным и чтобы он компилировался.
К выходу версии 1.0 они вроде бы немного отличались и от REPL, и от MATLAB. (Чем именно LinRange лучше linspace?) Хотя это придирки.
Это первый язык, который я использовал, с возможностью выйти за рамки ASCII. Я получаю огромное удовлетворение от использования таких переменных, как Phi, и таких операторов, как ≈.
Это больше, чем просто красивая обертка; возможность больше походить на математические выражения, которые мы пишем, является большим плюсом, хотя это немного усложняет обучение и документирование.
Работа в Julia показала мне, что некоторые навыки программирования я приобрел благодаря своему выбору MATLAB, а не из-за присущего ему превосходства.
Векторизация не является естественным явлением для многих вещей.
Джулия рассказывает, что векторизовать любую функцию можно, просто добавив точку к ее имени.
Построение матрицы с помощью понимание делает вложенные циклы (или трюки с сеткой сетки) по сравнению с ними похожими на глючные кнуты, а обход матрицы в целом с генератор при простом суммировании это похоже на получение чего-то просто так.
(Я знаю, что Python имеет схожие особенности языка.
) Отличная функция множественная отправка делает некоторые вещи намного проще и понятнее, чем объектная ориентация.
Например, предположим, что у вас есть классы Wall и Ball на традиционном объектно-ориентированном языке.
Какой класс должен обнаруживать столкновение мяча со стеной? Или вам нужен класс, чтобы играть в роли рефери? Подобные вопросы могут меня отвлечь.
При множественной отправке данные упаковываются в типы объектов, но методы, которые работают с данными, не привязаны к классу.
Так
функцияDetect_collision(B::Ball,W::Wall)знает о типах, но определяется независимо от них.
Мне потребовалось много времени на программирование, чтобы понять, насколько интересна и потенциально важна концепция множественной диспетчеризации для расширения языка.
Численная экосистема быстро развивается.
Мой пример номер один DifrentialEquations.jl написано замечательным Крис Ракаукас .
Если это программное обеспечение в ближайшее время не получит Премию Уилкинсона, система сломана.
Просто зайдите на сайт и приготовьтесь лечиться.
Мне еще предстоит увидеть большой прирост скорости по сравнению с MATLAB, который обещает Джулия.
Частично это связано с моей относительной неопытностью и типами задач, которые я выполняю, но частично это связано с тем, что MathWorks проделывает невероятную работу по автоматической оптимизации кода.
В любом случае, это не тот аспект кодирования, на котором я концентрируюсь большую часть времени.
Программирование на Julia заняло у меня некоторое время, чтобы освоиться (возможно, я просто старею и кристаллизовался).
Это заставляет меня думать о типах данных больше, чем хотелось бы, и всегда возникает подозрение, что я упускаю правильный способ что-то сделать.
Но для повседневного использования я, скорее всего, пока обращусь к Джулии как MATLAB.
Нижняя граница
MATLAB — это корпоративное решение, используемое в основном для решения инженерных задач.Это остается простейшим инструментом для решения численных задач.
Немаловажную роль в этом, конечно же, играет очень подробная документация и десять лет развития компании.
MATLAB похож на седан BMW в мире научных вычислений.
Это дорого, даже если говорить об аксессуарах (наборе инструментов).
Вы платите за безупречную, бесперебойную работу и обслуживание.
Но это также привлекает непропорционально большое количество количество ненависти .
Python — пикап Ford. Он вездесущ и любим многими (в США).
Он может делать все, что вы от него хотите, и он создан для того, чего не могут другие автомобили.
Скорее всего, вам захочется этого время от времени.
Но это не дает вам большого удовольствия от вождения.
Джулия — Тесла.
Он был построен с смелой целью изменить будущее, и это возможно.
Но это также может стать просто упоминанием.
В то же время вы доберетесь туда, где находитесь, стильно и с большей силой.
Теги: #python #Процесс обучения в IT #юлия #matlab
-
Обзор Сканера Документов Epson
19 Oct, 24 -
Делаем «Самое Бесполезное Устройство» Сами
19 Oct, 24 -
Webkit Теперь Понимает @Font-Face
19 Oct, 24 -
Вычислительная Геология И Визуализация
19 Oct, 24