В нашей операции shoestring нам нужно прототипировать алгоритмы на каком-то языке более высокого уровня, прежде чем перейти к реализации C на встроенном оборудовании.
До сих пор мы использовали MATLAB для этого, но расходы на лицензирование начинают болеть. Мы рассматриваем перенос нашего кода MATLAB на Octave.
Есть ли какая-то особая причина не для этого? Разве мы нарушим совместимость, особенно если у нас есть внешние партнеры, которые настаивают на использовании MATLAB? Есть ли какие-либо штрафы за производительность, которые мы можем ожидать?
В 2008 году я попытался сделать то же самое. Я быстро заметил следующие показательные пробки:
Но я должен сказать, что меня в целом впечатлило то, насколько совместим Octave с Matlab, если ваше использование Matlab является базовым, вам может повезти. Наконец, это было в 2008 году, через два года многое может измениться.
Сверху моей головы:
Я тестировал октаву и R тоже.
Что касается октавы: Я был очень впечатлен сходством синтаксиса октавы. Мне не потребовалось много времени, чтобы переносить мои сценарии MATLAB на октаву. В то же время у меня есть особая проблема с маркерами печати вместе с ошибкой, которая была исправлена Ярно Раджахалме в nabble и для изменения размера шрифта xtick, который обходной путь я получил в ответе на вопрос в nabble. Таким образом, у него все еще есть некоторые ошибки, которые с некоторыми усилиями можно преодолеть. Если у вас возникли проблемы, вы можете попробовать nabble mailing forum: [email protected]. К слову, моя команда не может адаптироваться к ней, так как они адаптируются к MATLAB, поэтому мы все еще используем MATLAB. Поскольку MATLAB построен под gnuplot, другой способ исправить его ошибки - редактировать сгенерированный файл gnuplot. Лучшей IDE, которую я нашел, была QtOctave, что я сделал краткий обзор в "Remember Blog".
Что касается R: в соответствии с исследованием, проведенным SciViews, производительность R превосходит MATLAB и октаву. У меня нет большого опыта работы с R. Я изучил пакет mclust, чтобы написать главу wikibook о EM Clustering в R. Кстати, у них, похоже, очень активное сообщество. Таким образом, вы можете найти пакеты сторонних поставщиков для предложений, которые не являются стандартизированными ИМО. Лучшей IDE, которую я нашел, был плагин StatET для eclipse, JGR (Java GUI для R) и emacs. Несмотря на временные затраты на изучение нового языка программирования, если бы я выбрал платформу с открытым исходным кодом, чтобы сделать свою графику эксперимента и некоторый анализ интеллектуального анализа данных, я бы попробовал R.
Octave имеет несколько синтаксических улучшений в Matlab, например, вы можете сказать endif
endfor
и endfunction
вместо просто end
, что значительно облегчает отладку.
Octave также позволяет динамически генерировать функции и иметь несколько функций, определенных в сценариях и файле функций. Какой способ лучше, чем подход, основанный на одно файловом однозадачном представлении по методу Matlab.
Наконец, октава имеет parcellfun
и pararrayfun
, которые являются очень мощными инструментами параллельной обработки, которые полностью отсутствуют в matlab. В matlab есть parfor
, но это не лучший способ сделать это, на мой взгляд.
Минусы для октавы заключаются в том, что они немного отстают на панелях инструментов, хотя, если вы посмотрите, вы можете найти похожие вещи. fsolve
и lsode
кажутся немного более медленными, но более прочными, по октаве почему-то. Кроме того, большой облом для некоторых людей, как правило, является отсутствие символической ссылки и инструментария DAQ, но этот материал все равно будет запатентован.
Python/Numpy определенно стоит вихря: он более мощный, но их синтаксис нацелен на более сложные фрагменты кода.
failed to open pipe: pipe: not supported on this system
. Я использую готовые бинарные файлы Windows Octave_3.6.1_VS2010
.
В Octave нет guide
, что упрощает создание GUI. Я регулярно использую руководство для создания инструментов для моего не-MATLAB с помощью коллег.
В вашем случае использования октава может превосходить MATLAB:
Он имеет синтаксис, который позволит вам напишите код, который немного ближе к C. i.e. + =, - =, функция по умолчанию значения параметров, строка с двойными кавычками литералы и т.д.
Предполагая, что ваши фишки медленнее, чем настольный процессор, скорость не будет проблемой.
Поскольку он запускается намного быстрее, чем Matlab, более практично интегрировать в сценарии оболочки для тестирования.
Для прототипирования график более чем достаточен; люди просто привыкли к стилю MATLAB.
Относительный недостаток наборов инструментов не большое дело, поскольку они не были бы доступно на целевой платформе в любом случае.
Я использую оба, и всякий раз, когда я переключаюсь, я пропускаю функции от другого.
Там есть хороший WikiBook на MATLAB с список различий между MATLAB и Octave.
По моему опыту, ядро MATLAB хорошо переносится в Octave, но панели инструментов имеют разный уровень совместимости, поэтому ваше решение зависит от того, что именно вы пытаетесь закодировать.
Некоторые вещи, отсутствующие в Octave, AFAIK - это тесная интеграция с .NET-кодом и создателем gui, guide
(хотя есть много других инструментов для создания графического интерфейса, которые могут использовать Octave).
Кроме того, как указывали другие, многое из того, что вы платите за MATLAB, - это интерфейс с гладким интерфейсом и инструменты для отладки/профилирования. Опытные кодеры, вероятно, могут справиться с альтернативами, но новички могут бороться.
Обратите внимание, что Octave поддерживает языковые конструкции, отсутствующие в Matlab (например, операторы автоматического инкремента, инструкции do-until и т.д.). Это делает его иногда раздражающим для кода порта, разработанного (кем-то, кто не знаком с ограничениями Matlab) на Octave в среде Matlab.
В FAQ по Октаве есть несколько других ограничений/различий.
Интересно посмотреть, как альтернатива с открытым исходным кодом работает для статистики, но не для численного анализа. R (октава статистики) в наши дни очень популярна, чем коммерческий S-plus (статистика статистики). Проблемы, упомянутые в качестве причин не отходить от Matlab, найденные в других ответах, также применимы к R. Но все же все только начали вносить свой вклад, и теперь R является стандартом, с лучшей графикой, лучшими пакетами и не более чем блокировщиком поставщика.
Таким образом, вы можете предпочесть октаву над матлабом, если вы сможете преодолеть дилемму заключенных.
Вы должны обязательно предпочесть Matlab для Octave, если вы можете себе это позволить.
У меня не было большого опыта работы с Octave, но я бы ожидал проблем, если ваш код использует набор инструментов Matlab, причудливые графики или Matlab gui.
Я бы ожидал, что это будет похоже на OpenOffice и MS Office. В основном совместимый, но достаточно разный, чтобы дать вам головную боль.
Я успешно перенес некоторые приложения линейной регрессии и квадратичного программирования в Octave.
Линейная регрессия (оператор обратной косой черты) работала без какой-либо корректировки. В случае квадратичного программирования мне пришлось переключиться с fmincon() на sqp(), давая аналогичные результаты.
Тем не менее, инструментальные панели и графический интерфейс в Octave, действительно, менее зрелые (я потратил столько времени на основные вещи), хотя за последние два года он быстро добивался прогресса.