Подтвердить что ты не робот

Является ли Matlab (против C/FORTRAN) респектабельным языком для профессионального математического исследователя 21-го века?

Я умираю от тяжелого пользователя из matlab, главным образом потому, что это то, чему я научился в первую очередь, и у меня не возникла проблема с достаточно значительной разницей для переключения. Я исхожу из численной оптимизации/линейной алгебры, где я выполнил вычисления оптимизации и вычисления собственных значений в миллионах степеней свободы. Недавно я вошел в сферу случайности, где у меня изначально создалось впечатление, что меня заставят изменить. Но после оптимизации кода и тщательной инициализации семени генератору случайных чисел я могу выполнять те же задачи Монте-Карло, что и мои современники примерно в одно и то же время. Мое понимание было в том, что инструкции "if" на базовом уровне и т.д. В Matlab значительно медленнее. Однако, если в каждом цикле есть значительные вычисления, которые могут быть векторизованы, я не уверен, что C будет лучше. И, во всяком случае, Matlab, кажется, все в порядке, в том смысле, что моя верхняя граница не меньше, чем любой другой профессионал (и во многих случаях, похоже, больше). У меня такое чувство, что я получаю много отзывов от людей, которые про-C здесь, которые уже давно списали Matlab как некоторый тривиальный игрушечный язык. Я профессиональный исследователь и утверждаю, что Matlab является конкурентоспособным для вычислительного математического программирования высочайшего уровня. Я ошибаюсь? Нужно ли мне переходить на язык более низкого уровня, например, C/FORTRAN? Почему или почему нет? Есть ли такие, как я? Большое спасибо! Приветствия

4b9b3361

Ответ 1

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

Вы можете писать более быстрые программы, если вы выбрали C или Fortran, хотя, возможно, не так быстро, как вы надеялись, поскольку Matlab использует для многих своих числовых подпрограмм те же библиотеки BLAS (и т.д.), как если бы вы пишут на C или Fortran. Но из моего опыта работы мои коллеги находят возможность быстрее писать программы гораздо важнее, чем писать более быстрые программы. Они генерируют много идей, которые, после размышлений, позже отвергают. Добавленная скорость разработки, которую Matlab дает сверх C и Fortran, означает, что они проходят весь цикл (который обычно включает визуализацию результатов) намного быстрее и делают это чаще, поэтому делайте больше исследований по какой-то грубой мере.

(В стороне: одна из заданий, которые я получаю, заключается в том, чтобы превратить некоторый код Matlab, который не был отброшен в программы Fortran для исполнения на крупных кластерах компании. Но то, что происходит с некоторыми нашими кодами, когда начальные исследования и мы хотим развернуть их для производства.)

Я также хотел бы отметить, что Matlab обладает хорошими возможностями параллельного вычисления (если вы можете себе это позволить) через Parallel Compute Toolbox, который, вероятно, будет интересен по мере того, как ваши проблемы станут больше, и вы поймете, что недооцениваете некоторые из своих ядра, черт возьми, он даже получил интеграцию с вычислениями в GPU в последней версии.

В двух словах я бы посоветовал, что пребывание с Matlab позволит вам сосредоточиться на своих математических исследованиях и не отвлекать внимание на борьбу с новым набором инструментов. Тем более, что вы не предполагаете, что Matlab недостаточно для ваших ожидаемых потребностей.

Ответ 2

Говоря как кто-то, кто движется между академией и промышленностью в области инженерии, единственной причиной, по которой я не использую Matlab больше, является издержки. Если вы и все люди, которым вы хотите дать код, чтобы иметь лицензии Matlab, тогда нет причин для переключения.

Если вы обнаружите, что части вашего кода должны быть оптимизированы, вы можете переписать только эти биты на языке более низкого уровня и вызвать их из своей программы Matlab. Переключение языков по соображениям производительности - это, по моему мнению, преждевременная оптимизация. Я решаю вычислительные задачи в итеративном процессе:

  • Сначала создайте решение самым быстрым и простым способом, что в вашем случае означает использование языка, который вы знаете лучше всего.
  • Запустите его с ограниченным набором данных с использованием профилировщика и выясните, где узкие места.
  • Устраните наихудшее узкое место, используя любой из следующих способов: a) Измените алгоритм, b) оптимизируйте использование функций текущей среды разработки, c) перепишите этот бит кода в то, что выполняется быстрее для этой конкретной проблемы.
  • Вернитесь к 2. до тех пор, пока ваше уравнение времени выполнения/времени разработки не достигнет какого-либо порогового значения, с которым вам удобно (или, если вы являетесь аспирантом, пока ваш наблюдатель не кричит вам о том, что вы остановите FIDDLING WITH BLOODY THING AND JUST ПРОДОЛЖАЙТЕ УЖЕ).

Другими словами, не стоит подчеркивать производительность, пока это не станет проблемой, особенно если вы пишете код для собственного использования.

Ответ 3

Если вы в основном участвуете в алгоритмах прототипирования, которые включают простые структуры данных, Matlab - отличный выбор. Рабочий процесс многих ученых, работающих в вычислительных областях, заключается в следующем: разработать новый алгоритм, проверить, что он работает в Matlab, затем вы пишете свою бумагу, и все готово. Если это все, что вы хотите сделать, придерживайтесь того, что вы знаете (matlab).

Если вы хотите сделать больше... Ну, Fortran и C/С++ напрямую не сопоставимы с Matlab, потому что просто нет смысла использовать скомпилированный язык, если производительность не критична. С другой стороны, у Python есть аналогичная функция, установленная для matlab, помимо того, что она является свободным полным языком программирования с активным онлайн-сообществом. Недостатки перехода на python на удивление незначительны, а проблемы огромны. Я пропустил некоторый синтаксис обработки массива Matlab, поскольку Numpy (модуль python для манипулирования массивами) имеет несколько особенностей, но об этом. Недавно я переключился с Matlab на Python, и я не планирую возвращаться. Кажется, что Matlab заставлял меня писать код наихудшим образом. Мой код на Python намного чище, более модульным и легче читать. Кроме того, система документации Sphinx потрясающая.

Короче говоря, рассмотрим python, если:

  • Вам нужно будет поддерживать большую базу кода
  • Вы хотите создать свой проект с открытым исходным кодом и внести другие вкладки.
  • Вы хотите сделать свой код доступным для людей без лицензии matlab.
  • Вы хотите написать свои собственные структуры данных, отличные от массивов (деревья, графики,...)
  • Вам нужно внедрить нечисловой код (искать локальные каталоги, загружать с URL-адресов, находить локальные файлы с использованием регулярных выражений, текстовую обработку)
  • Вы хотите легко и эффективно генерировать потрясающую документацию.
  • Вы не хотите тратить деньги на лицензию Matlab.

Здесь ссылка на python над matlab для научных исследований: http://www.stat.washington.edu/~hoytak/blog/whypython.html

Здесь я снисходительная ссылка, показывающая удивительный потенциал Python Sphinx для автоматической генерации красивой онлайн-документации, которая легко интегрирует математические выводы и фактический исходный код: http://pythonhosted.org/fit_neuron/overview.html

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

Ответ 4

Ну, я больше программист на С++/Java, чем Matlab, хотя я использовал Matlab, но я думаю, что для математических исследований Matlab довольно хорошо подходит. Исследование - это то, что связано с большим количеством экспериментов, а С++ - это страшный язык, на котором можно экспериментировать. Matlab очень легко быстро проверяет вещи, выясняет, какие из них работают, а какие нет, и двигаться дальше. Вы всегда можете кодировать свои решения на другом языке, как только вы знаете, что вы хотите сделать, предполагая, что версия Matlab слишком медленная (из-за ограниченного количества, которое я видел, иногда это бывает, иногда это не так).

В нижней строке: вы можете не захотеть использовать Matlab для всего (фраза "если все, что у вас есть, это молоток, все похоже на гвоздь" ), но это, безусловно, хороший язык для конкретной задачи математического исследование.

Ответ 5

Я также хотел бы рассмотреть программное обеспечение Mathematica, которое отлично подходит для некоторых потребностей математиков,

Ответ 6

Я думаю, что matlab вам подходит, потому что c - язык общего назначения, а Matlab - для математики.

Ответ 7

Matlab выделяется в:

  • высокоуровневая матричная математика (просто вычислите A * B, вам не нужно вызывать A.multiply(B) или некоторый синтаксис типа С++/Java)
  • анализ данных
  • визуализация данных
  • взаимодействие с Java

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

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

Ответ 8

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

Я уверен, что вы можете сделать все быстро и легко в Matlab, но я пришел к выводу, что это довольно громоздко с точки зрения элегантности и удобочитаемости после оптимизации. Векторная математика, конечно, весело и быстро, но мне трудно определить размеры иногда.

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

В обособлении я предпочитаю С++ вместе с некоторыми удивительными библиотеками (GSL, Eigen и т.д.). Самое забавное, что я все еще делаю свои сюжеты в Matlab, потому что я очень хорошо узнал эту часть Matlab:)