7/13/2009

MATLAB в Linux: вариант способа работы

В этой заметке я, по просьбе некоторых трудящихся, опишу свой скромный опыт работы в MATLAB - системе численных математических расчётов, которая может почти всё. Последние версии MATLAB уже интегрируются зачем-то с Adobe Photoshop, Web и появляются тулбоксы по моделированию процесса заварки кофе. Следующая версия, ещё более пухлая, чем предыдущая, с большим количеством рюшечек, бубенчиков и свистелок, думаю, уже будет уметь варить капучино. В этом есть свои отрицательные стороны, о которых можно долго разглагольствовать, выдавая за преимущества. До тех пор, пока любимая ваша программа, работавшая со времён мезозоя, не вывалится в новой версии в любимое теперь MATLAB сообщение out of memory.

\begin{lyrics}
Заготовьте ваши тухлые помидоры...
... ибо автор этих строк сейчас как обычно рубанёт с плеча: MATLAB, друзья, правит балом. Эта нехитрая мысль навеяна, кроме прочего, здоровенным постером на последней странице журнала Physics Today. MATLAB стал языком инженеров и учёных благодаря своей замечательной, просто потрясающе продуманной и отлично написанной документации, простой и понятной интегрированной среде разработки и огромному количеству хорошо сделанных тулбоксов на все случаи жизни.

Под свист пролетающих над авторскими сединами помидоров и прочих несвежих корнеплодов, а также выкриков "Octave наше всё", хочу от всего сердца отметить: да, я знаю про Octave. Octave почти совместима с MATLAB. Octave быстрее, чем MATLAB, хотя и не намного. Octave свободна и не просит много мегабаксов. Но есть много но. Мало документации и она любительская: неоднородна по качеству и сильно уступает MATLAB-овской. Нет графической среды разработки (QtOctave в состоянии бета-версии, и ей ещё расти и расти). Почти совместимость с MATLAB я прочувствовал лично на себе: даже после установки octave-forge, о чём ещё нужно было догадаться, только три маленькие программки из моих почти полусотен матлабовских скриптов заработали без переделки. Остальные потребовали m-файлов из MATLAB и возюкания напильником. Все наши лаборатории в МИФИ, доколь хватает глаз, на MATLAB и я должен взаимодействовать с ними в плане обмена результатами. Так что увы. Это я о том, что если кто-то сумел приспособить Octave для своих задач - я очень за него рад, но в наших конкретных палестинах Octave не конкурент в данный момент из-за недостаточной совместимости с MATLAB.

Но это не вся беда. А беда в том, что в MathWorks, похоже, идеи закончились, и хорошие программисты стали потихоньку уходить. Закономерно стала ощутимо увеличиваться тяжеловесность графической оболочки MATLAB, в особенности всякими Java-прибабахами, столь милыми сердцу индийским программистам. Чем дальше версия, тем больше системные требования при одинаковом функционале. Как сказал один мой хороший знакомый, большой поклонник Windows Vista (она у него не тормозит и работает быстрее XP), "просто добавь памяти до 8Гб и купи себе, наконец, Core2Quad, как я". Меня, как и многих, такой подход, скажем так, не устраивает.
\end{lyrics}

Итак, есть желание работать в MATLAB с некоторым комфортом, таким как подсветка синтаксиса и возможностью переключаться между несколькими функциями, но с малым расходом ресурсов. Есть следующий рецепт:
  1. Устанавливаем в Linux / FreeBSD любой текстовый редактор с табами, подсветкой синтаксиса и выходом на консоль. Я для этого использую kate (подставьте сюда и далее ваш любимый текстовый редактор).
  2. В kate есть выход на консоль (Terminal), где мы запускаем MATLAB без графической оболочки командой: matlab -nojvm
    1. полезно поставить вызов консоли в kate на горячую клавишу (например, Alt+T) - так можно быстро отркрыть консольку и узнать, где в очередной раз вы напортачили в коде.
  3. В терминале kate запустится MATLAB и порадует вас простым командным интерфейсом.
  4. Теперь в kate открываем свои программы, написанные в MATLAB - при этом должна сработать автоматическая раскраска кода.
  5. Для запуска вашей программы переключаемся в консольку в kate и набираем её имя - автодополнение, как и всюду в UNIX, работает по кнопке TAB.
  6. Всё, программа начнёт работать и выдавать вам результаты.
Выглядит это всё так:



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


А теперь сравним
Для сравнения: на моей машине P4-3GHz и 2Gb RAM работает программа, выполняющая деконволюцию изображений размером 5Мпикс (три массива по 5Мпикс, два прямых Фурье-преобразования и одно обратное, деление массивов друг на друга). Так вот, мой MATLAB R14 аж 2004 года выделки такое изображение обрабатывает легко. Я могу в таком режиме matlab -nojvm запустить параллельно обработку ТРЁХ таких изображений, сидеть слушать музыку и писать другой текст.

В лаборатории: Core2Duo 2.6GHz, 2Gb RAM, Windows XP, MATLAB 2007b сходу вываливается на той же самой задаче в out of memory.


Выше небольшой скриншот, на котором показана работа двух MATLAB предыдущей версии параллельно в режиме nojvm, на фоне других работающих программ.

А для Windows...
Благодаря отзывчивости комментаторов, есть такие варианты использования MATLAB в Windows в экономичном режиме:
Это всё денег не просит, так что скачайте и попробуйте.


Заключение
После того, как руководство лаборатории обновило MATLAB на всех машинах на 2007b и они стали вываливаться в out of memory, я для себя сделал такие выводы:
  • Новые версии - не всегда лучшие, особенно если программа долго разрабатывается и тем более она проприетарная.
  • Работать можно и без графической оболочки, и почти так же комфортно (в вашем любимом текстовом редакторе).
  • Не сломалось - не чини (т.е. нет нужды в новых функциях - не обновляй программу).
А ежели уважаемые комментаторы накидают в комментарии примеров других текстовых редакторов, у которых есть подсветка синтаксиса и выход на консоль - буду очень им признателен. Особливо ежели текстовый редактор работает под Windows.

30 комментариев:

  1. Т.е. Матлаб используется фактически в стандартном для работы с Octave режиме.

    По вопросу: лёгкая IDE Geany ;) Есть версия под виндоуз.

    ЕМНИП, gedit с плагинами тоже умеет требуемое. А если вспомнить любовь автора к латех и gedit-latex-plugin...

    ОтветитьУдалить
  2. @lasc
    У SciTE нет терминала. У Geany есть, но, естественно, только под линухом.

    ОтветитьУдалить
  3. bug fixes - тоже повод к обновлению, особенно в случае "security"

    однако автор прав, в том смысле что с проприетарным продуктом предсказуемости в следствии отсутствия конкретного CHANGELOG.txt

    ОтветитьУдалить
  4. Большое спасибо за пост.
    Действительно, открытые аналоги матлаба пока что ему не конкуренты :( Вообще никак. Так что присоединяюсь к автору в почетной работе мишенью для помидоров.

    За пост спасибо, очень интересная идея.

    Только вот даже если под винду редактор с консолью и найдется, матлаб с ним фиговенько интегрироваться будет. Дело в том, что в виндовом матлабе нет консольного режима как такового. -nojvm просто откроет еще одно окно. Правда, весить это все равно будет гораздо меньше.

    Кстати, доблестные гугловцы баг с openid фиксить не собираются?

    ОтветитьУдалить
  5. Octave пробовал, для потоковых вычислений(нужно было решить около 1000 дифуров), про -nojvm у матлаба не знал, да пребудет с нами vim :)

    ОтветитьУдалить
  6. Я уже как-то упоминал про R.
    у него есть пакет RMatlab - о проблемах сообщается только в 2004-2005 гг.

    ОтветитьУдалить
  7. gvim вполне себе имеет терминал и работавет в Windows

    ОтветитьУдалить
  8. Привет!

    Багфиксы:

    среде разработке
    Среде разработки.

    а так же выкриков
    «Также».

    В этом есть свои отрицательные стороны, о которых можно \читать дальше долго разглагольствовать,
    Что это за «\читать» такое?

    Идея с \begin{lyrics} понравилась, хоть с LaTeX и не работал :)

    А ежели уважаемые комментаторы накидают в комментарии примеров других текстовых редакторов, у которых есть подсветка синтаксиса и выход на консоль - буду очень им признателен. Особливо ежели текстовый редактор работает под Windows.
    Notepad++
    Терминала там вроде как нету, но можно навесить действие на горячую клавишу — подозреваю, что откроется виндовый cmd (вот вам и «терминал»).

    ;)

    ОтветитьУдалить
  9. vim (gVim) - действительно очень хороший редактор. Начал пользоваться неделю назад (R/Python/BASH/LaTeX) и т.д. - достаточно быстро научился и привык (хотя учиться ещё есть чему, сложная вещь).

    А питоновские библиотеки не умеют того же, что умеет матлаб?

    ОтветитьУдалить
  10. 2 Alexey комментирует...

    По вопросу: лёгкая IDE Geany
    Спасибо, гляну.

    ЕМНИП, gedit с плагинами тоже умеет требуемое.
    Автор крепко прикипел к КДЕшным приложениям, однако готов рассмотреть альтернативы :-))

    2 Sergey Kishchenko комментирует...
    У SciTE нет терминала. У Geany есть, но, естественно, только под линухом.
    Ну так я под Дебианом. Кстати, Kate можно поставить, говорят, и под виндой. Только терминал там тот ещё...

    2 StraNNicK комментирует...
    gEdit уже упоминали. Присоединюсь.
    Погляжу. У меня просто уже устоялся Kile и Kate, вы не подумайте, ничего личного к Gnome я не имею :-)

    2 Alexandr комментирует...
    bug fixes - тоже повод к обновлению, особенно в случае "security"
    Типа злоумышленник может скриптом на Матлабе перехватить управление моим плеером? :-) Ничего, переживём.

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


    2 index.php комментирует...
    Действительно, открытые аналоги матлаба пока что ему не конкуренты :( Вообще никак.
    Ну, не так категорично. На Октаве можно много чего делать, и я слышал, что много народу (некоторые мои знакомые физики-ядерщики) Октаву допилили и используют. Но в IMages\Signal Processing пока увы.

    Только вот даже если под винду редактор с консолью и найдется, матлаб с ним фиговенько интегрироваться будет.
    На это я всегда отвечаю так: а) ставьте Убунту или б) зажигайте Кноппикс и ставьте туда Матлаб. :-) Да, я суров, я знаю...

    Кстати, доблестные гугловцы баг с openid фиксить не собираются?
    Пнул их чугунным валенком, как и обещал. Они переехали на новый форум, но он какой-то кривой (не отображает ссылки и форматирование). Посмотрим.

    2 openid.php комментирует...
    про -nojvm у матлаба не знал
    А и я не знал. Просто у той версии, которой я пользуюсь, интерфейс просто страшен. Чтобы не видеть этот ужас, я в хелпе раскопал волшебный ключик.


    2 Анонимный комментирует...
    Я уже как-то упоминал про R.
    Слышал, но пока использовать не приходилось. Народ нахваливает R, и если что, буду его копать.

    2 Assaron комментирует...
    gvim вполне себе имеет терминал и работавет в Windows
    И это хорошо!


    2 Programmaster комментирует...
    Привет!
    Это он! Это он! Моего сердца чемпион! ;-))

    Багфиксы:
    Поправлено, большое спасибо. Про Notepad++ добавил.

    Большое спасибо бесценным комментаторам за идеи, пожелания и найденные очепятки!

    ОтветитьУдалить
  11. >>Я уже как-то упоминал про R.
    >Слышал, но пока использовать не приходилось. Народ >нахваливает R, и если что, буду его копать.

    достаточно много пришлось с ним повозиться (правда, использовал довольно простые функции). Ощущения спорные. Где-то прочитал про php, что это язык для женщин - мол, структура языка не очень логичная и интуитивно понятная, однако это компенсируется обилием функций на все случаи жизни. Вот R - точно такой же. Вавилонская башня, построенная без особого плана. Содержит кучу хитростей, которые нужно либо знать, либо находить экспериментальным путём.

    Однако, для обработки статистических данных - очень удобно (правда, табличный процессор все равно нужен - для подготовки исходных данных). При этом, зарраза, сильно не любит всякие нестандартности в данных, не умеет их обрабатывать и тяжело дебажится. Вот так.

    Кстати, ещё одна приятная фича R - модуль sweave. В латексовский код можно интегрировать R скрипты. Во время компиляции сначала запускается R, потом latex и все сводится в один конечный документ с картинками и исходниками. Очень удобно для ведения документированных исследований.

    Вот как-то так. ;)

    ОтветитьУдалить
  12. Ещё есть редактор medit, в нём тоже есть консолька, как в kate. Правда не знаю, будет ли подсветка для м-файлов. Medit вообще незаменим на лёгких системах, не зависит ни от кделибс, ни от гнома.

    ОтветитьУдалить
  13. Нафиг матлаб. Octave + Octave-forge, или R. Kate на фронтенд :-)

    ОтветитьУдалить
  14. Странно что емакс до сих пор не вспомнили :)

    ОтветитьУдалить
  15. Кстати, virens, спрячь в span class="fullpost" картинки и список редакторов, чего им на главной светиться-то?

    ОтветитьУдалить
  16. Но в IMages\Signal Processing пока увы.

    А также splines, filter design, statistics, и много чего еще.

    На это я всегда отвечаю так: а) ставьте Убунту или б) зажигайте Кноппикс и ставьте туда Матлаб. :-) Да, я суров, я знаю...

    Разве админу юзерагенты комментаторов не показываются? Слово Iceweasel о многом может сказать :)

    ОтветитьУдалить
  17. 2 antalar комментирует...
    Вот R - точно такой же. Вавилонская башня, построенная без особого плана.
    Люблю образные сравнения. :-)
    Мне пока с R работать не доводилось, но учитывая мое погружение в обработку сигналов в скором времени (надеюсь), видимо, придется.


    2 Анонимный комментирует...
    Ещё есть редактор medit, в нём тоже есть консолька, как в kate.
    Это встроенный в MC? Если да, то Вы слишком суровы :-)


    2 diaword комментирует...
    Нафиг матлаб. Octave + Octave-forge
    Увы, мой друг, но жизнь куда богаче наших идеалистических побуждений. Я бы рад, но увы.

    2 Programmaster комментирует...
    Кстати, virens, спрячь в span class="fullpost" картинки
    Оно почему-то вылезает после каждого редактирования.


    2 index.php комментирует...
    А также splines, filter design, statistics, и много чего еще.
    Увы, но это горькая правда. Использовать Октаву для обработки сигналов и изображений очень непросто. Приходится использовать проприетарный велосипед :-)

    Но будем надеяться, что дело исправится. Кстати, скоро будет пост про графическую оболочку к Октаве.

    ОтветитьУдалить
  18. >Это встроенный в MC?

    Та ни! В MC встроен mcedit. А medit это чёткий гтк-шный редактор. Вот например скриншот: http://tinyurl.com/yvdnwz

    P.S. А что анонимуса убили?

    ОтветитьУдалить
  19. > Люблю образные сравнения. :-)

    На самом деле, ещё и не такие образы лезут в голову, когда в очередной раз пытаешься найти причину поломки, а потом и обхитрить R.

    ОтветитьУдалить
  20. Я опять заведу свою пластинку про Python + SciPy + Matplotlib :)
    Конечно всё зависит от задачь, но когда не нужно пользоваться каким то хитрозамороченным тулбоксом, то эта связка работает на ура, обрабатывая гигабайтные массивы. Image proccesing там вроде ещё нет, но signal processing уже имеется, правда не знаю какого качества.(было бы интересно услышать твои комментарии о нём, если попадёт в поле твоего зрения :) )

    Матлаб, конечно, будет на арене ещё долго, в основном из за огромного количества кода написанного на нём. Та же история происходит и с Фортраном. Но я надеюсь что со временем будет прибавляться кода и на питоне )

    ОтветитьУдалить
  21. 2 Phasma комментирует...
    medit это чёткий гтк-шный редактор. Вот например скриншот: http://tinyurl.com/yvdnwz
    Чоткий? :-)) Пожалуй. Но не гламурен. Впрочем, в список включу. Спасибо.

    P.S. А что анонимуса убили?
    Некоторые анонимусы хотят превратить комменты в дорвей для порноссылок. Я против :-)


    2 antalar комментирует...
    На самом деле, ещё и не такие образы лезут в голову, когда в очередной раз пытаешься найти причину поломки, а потом и обхитрить R.
    Что-то после таких отзывов в R лезть не тянет :-) Пока остаюсь на MATLAB.

    2 Magik комментирует...
    Я опять заведу свою пластинку про Python + SciPy + Matplotlib :)
    /me придвинулся ближе к старому ламповому грамофону и насыпал себе ещё попкорну.

    эта связка работает на ура, обрабатывая гигабайтные массивы.
    Не сомневаюсь, но я не так крут в питоне. И потом, мне часто дают код, который УЖЕ написан на матлабе, да и результаты моих трудов хотят пользовать граждане, далёкие от питона.

    Мои выходки с Linux, LaTeX и Gnuplot и так едва терпят в лаборатории - не так давно для проводов вбили в стену рею. Намекают, что не только для проводов :-)) В общем, лучше их не злить.

    Image proccesing там вроде ещё нет, но signal processing уже имеется
    Про Signal Processing - скоро этим придётся заняться, надеюсь. Но это не раньше следующего года. Спасибо, Коля, будем смотреть.

    было бы интересно услышать твои комментарии о нём, если попадёт в поле твоего зрения
    Очень даже может попасть, так что, как говорится, stay tuned.

    Матлаб, конечно, будет на арене ещё долго, в основном из за огромного количества кода написанного на нём.
    Да, он пришёл, чтобы остаться. И в общем, это не так уж плохо (если не брать в расчёт стоимость лицензии).

    ОтветитьУдалить
  22. Я допускаю, что для ряда рассчётов MATLAB незаменим и удобен. Но его коммерческая сущность не позволяет пользоваться им повсеместно. К тому же он действительно очень медленный. Программа, написанная мною на питоне, производила расчёт в 14 раз быстрее, правда после ряда оптимизаций. Возможно, на матлабе тоже можно было бы что-то оптимизировать, но мой товарищ этим не занимался. К тому же питон позволяет рапараллеливать вычисления и работать с сервером через ssh, про матлаб не знаю.

    ОтветитьУдалить
  23. Так держать оборону, virens. Масса написанного кода сдерживает внедрение FOSS. Увы - сие данность :-( А под винды есть русская версия Scite - http://scite.net.ru/ Вот внём наличествует исполнение кода в консоли.

    ОтветитьУдалить
  24. @Илья комментирует...
    Я допускаю, что для ряда рассчётов MATLAB незаменим и удобен.
    Не для ряда, а почти для всех численных вычислений. Не быстр, но очень удобен. Там есть всё, что надо, а в той же пионерской октаве нет даже profiler.

    Но его коммерческая сущность не позволяет пользоваться им повсеместно.
    В развитом мире это не вопрос: надо матлаб - университет покупает лицензию на матлаб. И вопрос закрыт.

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

    Программа, написанная мною на питоне, производила расчёт в 14 раз быстрее, правда после ряда оптимизаций.
    Вычисления на питоне!? То есть вы предлагаете перемножить матрицы 3000х3000 на питоне? И это быстрее матлаба? Не верю! (с)

    Возможно, на матлабе тоже можно было бы что-то оптимизировать
    Там с оптимизацией не разгуляешься: все "открытые" m-files дёргают за скомпилированные бинарники сомнительного происхождения.


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

    Кстати, нашим местным австралийцам ключик -nojvm так понравился, что они требуют перевода поста на английский :-)

    ОтветитьУдалить
  25. 5 Мпикселей изображения - это фигня... Даже если 3 штуки. А вот когда нужно открыть 64 Мпикселей изображение - вот начинаются все out of memory. И что делать не знаю. Вроде и памяти 4 гига, а использовать можно только 900 Мб.

    ОтветитьУдалить
  26. @Анонимный комментирует...
    5 Мпикселей изображения - это фигня... Даже если 3 штуки. А вот когда нужно открыть 64 Мпикселей изображение - вот начинаются все out of memory. И что делать не знаю.
    Анонимус, а ты nip2 пользуй. Оно это откроет запросто - есть сборки и под винду, и под мак, и, естественно, под Linux тоже есть. Зацени.

    ОтветитьУдалить
  27. Слоу-читатель на связи. Есть ли в настоящее время совместимость Octave с Matlab? Т.е., будет ли написанное на Octave работать без бубнов в Матлабе?

    ОтветитьУдалить
  28. @АлСт комментирует...
    Есть ли в настоящее время совместимость Octave с Matlab?

    Частичная - есть. То есть простенький код без экзотических функций (@bsfun и бестолковых ООП закидонов) будет скорее всего работать. Графические бубенчики отвалятся почти наверняка.

    У Октавы только в 2013 появилася графическая морда (т.е. интерфейс пользователя кроме командной строки), так что вы понимаете степень прогресса октавы.

    Т.е., будет ли написанное на Octave работать без бубнов в Матлабе?
    Что-то сложное - не будет.

    Октава - ёпенсорсное поделие для обучения студентов в странах, слишком нищих для покупки нормального софта. Собственно, Октава была написана на коленке в качестве пускалки скриптов для книги по хим.реакторам (John Eaton, University of Wisconsin-Madison). Собственно, с этим она справляется, а на большее никогда и не претендовала.

    ОтветитьУдалить