Много раз пришлось отвечать на этот вопрос юным студентам, только начинающим обучаться у нас в лаборатории. Обычно приходят студенты с некоторыми навыками по C/C++ (ну или C#), но про MatLab даже не слышали. Для тех, кто занимается графикой MatLab может и не нужен, но в обработке и распознавании изображений - по-моему просто незаменим.
Я решил собрать все свои аргументы в пользу его освоения в этот пост.
Итак, что в нем хорошего?
Во-первых большое количество встроенных операций по работе с матрицами. Очень упрощает как различные задачи связанные с решением СЛАУ и т.п., так и работу с изображениями.
Во-вторых богатейшая библиотека различных математических методов. Чего там только нет! Численные методы, дифференциальные уравнение, обработка сигналов, вычислительная геометрия, и т.д. и т.п.
Если вдруг все-таки чего-то нет, в интернете можно найти массу тулбоксов и просто функций для Matlab. Во-первых есть "официальные каталоги" типа
www.mathtools.net. Во-вторых просто на сайтах различных исследователей и лабораторий (например - у
нас) можно найти множество полезных функций на разные случаи жизни.
Очень важная и удобная вещь - богатые возможности по быстрой простой (для разработчика) визуализации различных данных - двумерных и трехмерных графиков функций, множеств и т.д.
То, что Matlab - это интерпретатор с постоянно доступной командной строкой по началу мне казалось не очень удобным. Я привык к компиляторам... Но потом я понял, что и в этом есть удобство. В нужный момент можно программу притормозить (например с помощью breakpoint) и "осмотреться" - посмотреть что за данные получились на этом шаге, отобразить их графически, модифицировать, подправить параметры вызванной функции и т.д. Облегчает как отладку так и понимание что же там в алгоритме происходит и почему что-то идет не так, как задумымалось.
Поскольку я использую Matlab в основном для экспериментирования - это очень удобно.
Matlab можно использовать в C++ программах и наоборот - в Matlab можно использовать библиотеки, написанные в C++. Это страшно удобно.
Таким образом удается как тестировать алгоритмы написанные на C++ с помощью среды Matlab, так и использовать в своих программах средства Matlab (например, визуализацию данных) через Matlab engine. Добавлять в свою программу для отладки вывод 3D графиком весьма трудоемко и вообще не хочется. А тут - подключаешься с движку Matlab передаешь туда данные и строишь графики какие хочешь!
Мой вывод - использование Matlab ускоряет исследовательскую работу в несколько раз, позволяет сосредоточиться собственно на алгоритме, а не на его реализации. Бывает что на C/C++ непонятно в чем проблема - то ли алгоритм плохой, то ли реализован неверно. В Matlab проблемы реализации ловятся легче, да потенциальной возможности посадить ошибку меньше, поскольку есть богатая библиотека отлаженных методов, которые не надо писать самому или подключать из сторонних библиотек.
Комментарии
MATLAB и графика
Насчет того, что "для тех, кто занимается графикой MatLab может и не нужен" - не соглашусь: в задачах inverse rendering (например, получение материала) MATLAB очень помогает при решении задач нелинейного подбора параметров.
Хотелось бы отметить минусы МатЛаба по сравнению с С++: сильные тормоза, крайне медленные циклы и зачаточный уровень ООП. В остальном, конечно, инструмент довольно удобный.
Согласен с Левшой
Именно так мы часто и поступаем. Переписываем часть на C++, оформляем как MEX и включаем в MATLAB среду в которой работаем - проверяем на идентичность результатов.
MATLAB - первая и основная ступень в разработке проекта.
Я специализируюсь немного в другой области ЦОС - теории связи. Но с автором статьи согласен полностью. Скажу более: в матлаб можно как прорабатывать алгоритм, так и отлаживать готовый продукт! То есть переписывая и отлаживая отдельный части на CС++ в MATLAB. Затем можно переходить на другую платформу поддерживающую СС++: Visual, Borland, Builder C/C++.
Повредить - вряд ли...
Зависит от области. Если он изучает программирование численных методов, и ему обязательно нужно научиться самому их реализовывать - тогда да, пускай реализовывает сам. Если же ему нужно только уметь воспользоваться ими - нет смысла тратить силы и время на изобретение велосипеда.
А где же альтернативное мнение?
Да, действительно, Matlab способен в значительной степени ускорить разработку проекта, но хочется добавить, что использование готовых решений может повредить молодому специалисту в его обучении.
Добавка про добавку
Согласен с Vezhnick. Думаю особенно это проявляется в условиях, когда разработка ведется на в расслабленных "академических" условиях, а в рамках выполнения коммерческого заказа, где есть четкие требования и по качеству и по срокам.
Добавка от меня
Matlab позволяет сильно повысить качество алгоритмов. Если алгоритм изначально разрабатывался в С , то из-за проблем реализации и отладки сложных методов, скорее всего, будут применены более простые. В Matlab'е же можно применять библиотеки уже отлаженных методов и выполнить решение на высоком уровне.