Пользователь
0,0
рейтинг
26 октября 2013 в 19:52

Разработка → Как мы использовали MATLAB. История одного фейла

Имена изменены, все совпадения случайны.


Увертюра


Сразу оговорюсь, MATLAB — отличный инструмент. Отличный инструмент, который мы использовали не по назначению.


Взгляните на нашу компанию. Наша сфера деятельности — разработка ПО для промышленности и много чего еще. В компании работает около 100 человек, а я в этой компании — один из сотрудников, занимающийся разработкой алгоритмов. Есть у нас и Флагманский продукт, приносящий основную прибыль.


Флагманский продукт — бизнес-приложение. В нем много формочек и отчетиков, своя база данных и вычислительное ядро. Вычислительное ядро написано на C# без привлечения нативного кода. Такое решение было принято разработчиками осознанно. Parallel.For был так соблазнителен, а C++ все хотели забыть как страшный сон.


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


Тогда наш Главный Алгоритмист предложил идею. Описание этой идеи и того, что из нее вышло и составляет суть данной статьи.


Идея



Идея была проста. Вместо того, чтобы платить зарплату одному умному программисту (который бы умел писать хороший код на C# и разбирался в тонкостях нашего «матана», а такого непросто найти), можно взять двух «полуумных». Первый будет писать прототипы на MATLAB, второй — переносить решение на C#.
MATLAB в таком случае преподносился как инструмент для документирования алгоритма. У такого решения были озвучены следующие преимущества:
  • MATLAB — простой язык, который опытный программист может выучить за 1 день
  • Все математики пишут на MATLAB

Стоит отметить, что ранее для документирования алгоритма использовался Mathcad, UML-диаграммы и даже просто лист бумаги.


С идеей спорили, ее не принимали. Но в итоге Главный Алгоритмист всех убедил, и была создана команда алгоритмистов, пишущих на матлабе. В эту команду вошел и я. В нашу команду также вошел Один Программист из числа разработчиков, который должен был бы, не думая, переносить наши матлаб-экзерсисы на C#.


Замечу, что кроме предложений отказаться от этой затеи, было и предложение использовать, по крайней мере, python+numpy. Хотя бы той причине, что сколько-нибудь значительного опыта разработки на MATLAB ни у кого не было (я раньше писал на python и R, остальные были математики и инженеры, использующие MATLAB как продвинутый калькулятор). Предложения, как можно понять, отклонили.


Прошел год...



Прошел год и сейчас уже можно подвести некоторые итоги:
  • Математики не умеют писать код. А в той лапше, что выходит из-под их пера не могут разобраться и они сами. Нет ни специфических знаний, ни опыта, ни культуры программирования
  • Раз уж мы отказались от схем и Mathcad, то появилось желание использовать для наших MATLAB программ реальные источники данных. В итоге мы немало времени занимались дублированием части функционала Флагманского продукта на Матлабе
  • Пока мы занимались программированием, времени на работу над собственно алгоритмом оставалось немного
  • MATLAB не подходит для разработки больших программ. По крайней мере, не подходит нам. Динамическая нестрогая типизация, медленные циклы, ооочень-медленный ООП (настолько, что пришлось частично отказаться от использования ООП), неполная поддержка разреженных матриц
  • Переносить код с MATLAB на C# непросто. Еще сложнее бэкпортировать рефакторинги и оптимизации

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

Вместо заключения



В самом начале статьи я немного слукавил, т.к. история продолжается до сих пор. Мы продолжаем писать на MATLAB, наш код продолжают переносить на C#. Хотя теперь уже все согласны, что у идеи Главного Алгоритмиста есть изъяны. Но менять уже что-либо слишком поздно.


А тем временем начинают поговаривать о дополнительном перекодировании решений с MATLAB уже на С++…
@basp
карма
21,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (44)

  • НЛО прилетело и опубликовало эту надпись здесь
  • +2
    Конечно не знаю ваших реалий, но python+numpy — звучит очень приятно!
  • +3
    AnatolyB Стало не хватать скорости работы приложения, написанного на C#.
    Сначала попробовали это решить совершенствованием алгоритма, и для этого ввели матлаб. А т.к. производительность приложения все равно была невысокая, то теперь решают, стоит ли с матлаба перекодировать не на C#, а на C++. Т.е. отказаться от C# в вычислительном ядре.
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        «монолитное». Про Intel MKL (а еще SuperLU) знаем и пытаемся внедрять. Пробовали и cuBLAS, но там свои недостатки (организационные, бедное апи, да и скорость в наших условиях сравнима с MKL)
    • +2
      то теперь решают, стоит ли с матлаба перекодировать не на C#, а на C++

      Э… Найти ещё одного «полуумного» программиста для переписывания с шарпа на плюсы? Вы мазохисты оптимисты, однако.
  • +1
    1. Matlab позволяет автоматически генерировать код из матлабовских скриптов/simulink моделей. Да это будет не C#, а C [просто], но какая разница, если этот код достается нахаляву?
    2. Рядом с математиком должен сидеть «имплементатор» — тот кто будет работать с тем же матлабовским кодом, но исходя из того, как его наиболее удобно переносить под вашу задачу. Естественно, если математика пустить в свободное плаванье, то результат будет плачевен.

    Так что, подозреваю, проблема не в том, что «не по назначению», а в том что «не имея необходимых навыков»
    • +1
      Да, именно. Я постоянно на работе компилирую огромадную симуляцию из simulink'а в код С, затем в Visual Studio портирую в проект, компилирую и получается исполняемый файл, который бежит примерно в 100 раз быстрее, чем симуляция в MATLAB'е.
      Главное правильно настроить MATLAB, чтобы он компилировал в С.
      • +1
        Главное правильно настроить MATLAB, чтобы он компилировал в С.

        Для трансляции Matlab=>C вы про toolbox «Matlab Coder» говорите, который появился сравнительно недавно и стоит $10000? «Matlab Compiler» (стоит $8000) не компилирует в нативный код уже очень давно. Всё что он делает — это создаёт контейнер с шифрованными matlab-исходниками, которые выполняются в Matlab Compiler Runtime.
        • +1
          «Matlab Coder» отличная вещь, но я говорил про иное. Я говорил про Automatic Code Generation, который компилирует модели из Симулинка.
  • +1
    Математики не умеют писать код. А в той лапше, что выходит из-под их пера не могут разобраться и они сами. Нет ни специфических знаний, ни опыта, ни культуры программирования

    У нас эта проблема тоже очень остро стоит.

    Matlab позволяет автоматически генерировать код из матлабовских скриптов/simulink моделей.

    К сожалению, если есть специфические требования к этому коду (ARM, NEON, OpenCL EP, etc.), то это решение не подходит.

    Рядом с математиком должен сидеть «имплементатор» — тот кто будет работать с тем же матлабовским кодом, но исходя из того, как его наиболее удобно переносить под вашу задачу. Естественно, если математика пустить в свободное плаванье, то результат будет плачевен.

    Согласен на 100%. Тут еще есть такой момент, что код на матлабе можно писать «тяп-ляп перемножаем две 100500х100500 матрицы и не паримся», а можно качественно и медленно, при этом нативную реализацию будет писать проще. Стоит ли говорить, каким путем идет большинство… Научным кодом из статей и т.п. вообще пользоваться довольно проблематично.
    • 0
      Научным кодом из статей и т.п. вообще пользоваться довольно проблематично.

      Да, тоже это замечал. То ли я слишком тупой, то ли те, кто писали эту статью, делали это слишком поверхностно, то ли они специально так писали, чтобы никто не украл идею. Напишут одну огромную формулу и разбирайся в ней.
    • +2
      «тяп-ляп перемножаем две 100500х100500 матрицы и не паримся»

      В случае матлаба эта операция будет выполнятся быстро, поскольку данный пакет заточен именно для работы с матрицами. Вряд ли вы с наскока напишите более оптимальный алгоритм чем команда программистов и математиков, разработавших эту библиотеку. Один из способов оптимизации скриптов в матлабе это как раз замена циклов на операции над матрицами (где это возможно).
      • 0
        Когда размер матрицы для умножения становится близок к 10^5 уже стоит задуматься о том, а можно ли как-либо обойтись без этого? Например, в задаче линейной регрессии с кучей параметров уже будет более оптимальным попробовать градиентный спуск, а не аналитическое решение, т.к. умножение матриц размером n x n требует примерно O(n^3) операций (на самом деле есть более быстрые алгоритмы, но все они дольше O(n^2))
  • +5
    Классическая модель разработки ПО для предметной области (то есть ПО, реализующий функционал, который программисту не до конца понятен) подразумевает, что между экспертом в предметной области и программистами находится менеджер проекта и/или архитектор, который с одной стороны понимает, что говорит эксперт, с другой стороны может это сказать на языке программистов.

    Очевидно, что делать эксперта в предметной области из программиста дорого. Делать из эксперта программиста — нереально (может повезти, но шанс не очень большой). Таким образом компромиссным было бы выделение именно человека, который бы проблемы программистов доносил до экспертов, а опасения и пожелания экспертов — до программистов.

    А главной подставой в этой конструкции является неустойчивое состояние образующихся «трёх властных центров», гармонизация которых и есть основная проблема.
    • +4
      В проблеме из топика есть специфика.

      (а) Предметная область «математика и специальные алгоритмы» намного сложнее и специфичнее, чем предметные области типа «финансы» или «продажи онлайн-магазина» и вообще любая бизнес-область. Архитектор в ней ничего не поймет. Или будет тем самым человеком, который знает и программирование, и математику

      (б) для бизнес-задач в качестве спецификации предметной области вам на 80% хватит entity-relationship model и иногда пары формулок. Спецификация сложного алгоритма, в котором каждое действие нетривиально--это сам алгоритм. Собственно, код на Матлабе со стороны математиков--это и есть спецификация алгоритма, но уже сразу на рабочем языке, а не на псевдокоде, например. Но я думаю, что это не должно быть реальное приложение, особенно с интеграцией в другие сервисы компании

      (в) сложный алгоритм на матлабе программисту понять тяжело (ну, может, через полгода научатся, выучив матлаб и линейную алгебру). Например, что делает что-то типа b=unique(perms(a)); c=eig(b*b'); будет долго непонятно. Особенно в контексте такого же кода вокруг и особенно с точки зрения того, как это правильно и эффективно перевести на C#. Кроме того, дебажить его без математика рядом часто тоже будет невозможно.

      Я к компании автора не имею никакого отношения, но его проблемы вполне понятны и, я уверен, стандартные практики из разработки бизнес-приложений к ним применить тяжело. Мне кажется, интересно было бы узнать, как такие проблемы решают в компаниях типа НАСА или Боинг.
      • 0
        Я думаю, что такие компании привлекают лучших специалистов в отрасли. Таких, которых единицы в мире. Если необходимо, они помогут с переездом, визой и т.д., не говоря уже о з/п. Естественно, строят цепочку от математика до программиста, с учетом сложности и декомпозиции задач. Полагаю, что выглядит это примерно так: математик-специалист в узкой области -> математик-алгоритмик -> архитектор -> ведущий программист -> рядовые программисты.
        • 0
          А почему вы не рассматриваете таких специалистов, как математики-программисты? :) Они существуют, однако.
          Я вот учусь на направлении Математическое обеспечение. Когда были специалисты, то выпускались именно математики-программисты.
          У нас дают очень хорошую математическую подготовку, равно как и учат программированию.
  • 0
    Вы попали в классическую ловушку: у вас есть «продакты» — они пишут на матлабе и говорят «вот что я хочу получить в конце-концов», но при этом нет «прожектов», который бы знал структуру разработки, и все хотелки доносили бы непосредственно до разработчиков в понятном им виде.

    Очень часто руководители компаний/разработки не совсем понимают, зачем эти «прожекты» нужны — им кажется, что эти странные люди только замедляют процесс и не дают транслировать напрямую, да еще чаще всего они не прогибаются под требования «продактов» и озвучивают реальные сроки. Однако, без «прожектов» не будет ни порядка, ни структуры.

    Я немного переиначу то, что вы говорили: вы утверждаете, что вместо одного «умного» программиста наняли двух «полуумных», и видимо чуть сожалеете, что не пошли по первому пути. Но дело в том, что на самом деле вместо одного «гениального» человека (который и математику бы понимал, и программил, и в структуре и направлении движения продукта бы разбирался) надо было нанять трех, причем не «полуумных», а «нормальных». Один бы ставил задачу (продакт), второй бы структурировал ее и сдерживал иногда неуемные хотелки первого (потому что первый, понятно, о процессе разработки имел бы не очень глубокое представление), а третий бы кодил. Можно, конечно, сожалеть о том, что не удалось найти гения, который бы все тянул сам, но это так маловероятно, и такое везение (равно как везением было бы, если бы вы отыскали прокачанного продакта, который бы понимал проектную часть, или мега-программиста, который взял бы на себя прожектные задачи).
    • 0
      А модель с продактом, проджектом и девелопером Ваша или где-то переняли? Мысль интересная, но для предпринимателя довольно крамольная… Без {100 грамм} добротного исследования не разберешься
      • 0
        Довольно стандартная, в ренике так ай ти был построен (и сейчас, наверное, то же).
  • 0
    Небольшой оффтопик: а какова реальная востребованность людей, сведущих и в программировании, и в математике одновременно?
    • 0
      Яндекс, например, таких ищет. Требуют глубокие знания C++ и обширный математический бэкграунд. В вакансии алгоритмиста на проект «Яндекс.Картинки» именно этого хотели.

      Ещё Samsung тоже хочет, чтобы математики сразу выдавали С++ код, со слов товарища, который там работает. Уж не знаю, переписывает ли его кто-то потом, но всё пишется на С++.
  • +1
    ИМХО рассматривать матлаб как инструмент прототипирования идея убыточная в любом случае, даже если на нем будут писать крутые спецы. В свое время я предпринимал попутки перенсоа кода с C# на matlab и наоборот но быстро убедился в бесперспективности. Слишком особенный подход у этого языка. Любые матричные операции работают потрясающе быстро, а вот привычные всем циклы и рекурсии тормозить будут безбожно. В результате приходится кардинально пересматривать сам алгоритм.
  • –2
    А почему прямо матлабом не вычисляли?
    • 0
      Почему вот такой кейз не используется:
      1. на языке общего назначения (например C#) готовим исходные данные для вычисления маткадом и записываем в файл
      2. в командной строке запускаем маткад для выполнения толькочто созданного файла
      3. по завершению считываем из файла (или из stdout) результаты работы алгоритма
      • +1
        А как вы будете использовать «такой кейз» в продакшене? У вас есть standalone ПО, которое что-то считает у клиента. Но у клиента нет матлаба, ему вообще наплевать на все эти ваши проблемы, ему надо получить результаты расчётов. Если вы хотите использовать ядро матлаба для расчётов, вам придётся заморочиться с Matlab Compiler Runtime (Matlab Engine тут не прокатит) и заморочить этим своих клиентов. А ещё на вас могут наехать, а купили ли вы матлаб той версии, какой MCR у клиентов?

        Мне кажется, вы не понимаете сути проблемы, что тут обсуждается.
        • 0
          Как использовать?
          а) поставлять матлаб с вашим ПО
          б) поставлять Maxima или аналог с вашим ПО (если цена матлаба окажется неподходящей)
          в) дать клиентам возможность выбора математического модуля

          Да, я не понимаю сути проблемы.
          «Автор» пишет часть функциональности на матлабе (потому что он быстрее вычисляет), а затем повторяет это на шарпе (потому что ПО на шарпе) и обнаруживает, что это дорого и медленно. А что он ожидал?!
          Матлаб быстрее, но в продакшене C# — поэтому медленнее.
          Разработчики пишут одну и ту же функциональность на двух языках — поэтому как минимум в 2 раза дороже.

          Используйте подходящий инструмент. Но не интегрируйте слишком глубоко. Запускайте М (матлаб или другой математический инструмент) в отдельном процессе, тогда:
          1) Вычисления могут быть какого угодно размера, вы же их в файл запишете, а М оттуда будет считывать (ваше ПО не упадет по OutOfMemory)
          2) М более рационально сможет использовать оперативную память (собственное адресное пространство)
          3) М сможет задействовать специализированные вычислительные устройства и возможности процессора
          4) Не потребуется переписывать код М на другой язык
          5) У ПО появится возможность замены М или выбора М на усмотрение клиента
          • +2
            Вы, наверное, никогда глубоко с Matlab не работали, а тем более не встраивали его в своё приложение.

            поставлять матлаб с вашим ПО

            Это невозможно. Можно поставлять только модули, скомпилированные с помощью Matlab Compiler. Для их исполнения у клиента должен быть установлен MCR той версии, в какой вы компилировали модули.

            … часть функциональности на матлабе (потому что он быстрее вычисляет)

            Нет, потому что прототип на матлабе пишется быстрее, эксперименты делаются проще за счёт интерактивности и богатого набора инструментов. Потом этот прототип алгоритма надо реализовать на чём-то более приближённом к «реальности». Так делается во многих компаниях. Есть люди, которые «придумывают математику», а есть люди, которые профессионально реализуют её в конечном продукте. Да, матлаб быстро перемножает матрицы, быстро их транспонирует, много чего быстро с ними делает, но ради этого его никто в продакшене использовать не будет, накладные расходы и заморочки с окружением/поддержкой сожрут всю выгоду.

            Запускайте М (матлаб или другой математический инструмент) в отдельном процессе

            MCR не позволят запускать матлабовский код даже в отдельном потоке! :)
            Можно написать плагинную архитектуру, кто ж спорит? Но это не избавит вас от монстроузного MCR для матлабовского модуля, у которого холодный старт занимает больше 10 секунд.

            Вычисления могут быть какого угодно размера, вы же их в файл запишете, а М оттуда будет считывать (ваше ПО не упадет по OutOfMemory)

            Да, матлаб упадёт с OutOfMemory. :))

            Всё остальное я не буду комментировать. Матлаб не может задействовать ничего специализированного, там используются все те же библиотеки, что в остальном научном по (Все эти ваши BLAS/LAPACK/FFTW и т.п.) Они сами ничего нового не придумали, кроме своего векторизованного M-Language и матричного типа данных и операций над ним. Matlab Array (MxArray), который.
            • –3
              Да, я с матлабом не работал. Но однажды делал с mathematica: math.exe < zadacha.txt > reshenie.txt

              Невозможно поставлять матлаб? Да вам еще за это комиссионные будут платить! В крайнем случае замените матлаб на другой продукт.

              Нет, потому что прототип на матлабе пишется быстрее, эксперименты делаются проще...

              Так вам удается написать решение на матлабе, или нет? Если НЕТ, то возможно следует подумать и как-то по другому выделить подзадачи, чтобы некоторые из них можно было решать специализированными инструментами?

              накладные расходы и заморочки с окружением/поддержкой сожрут всю выгоду

              Поддержку будет осуществлять поставщик матлаба (а возможно уже осуществляет, вы спрашивали клиентов об этом?).

              MCR не позволят запускать матлабовский код даже в отдельном потоке! :)
              Можно написать плагинную архитектуру, кто ж спорит? Но это не избавит вас от монстроузного MCR для матлабовского модуля, у которого холодный старт занимает больше 10 секунд.

              MCR — фтопку, плагины-модули — фтопку. Интегрируйте самым минимальным способом — файлы и отдельный процесс. Иначе не сможете сменить матлаб на какой-то другой аналог. А поддержку нескольких математических инструментов будет очень сложно сделать, а может и невозможно из-за лицензионных ограничений.
              10-секундный холодный старт тоже легко решается. Он либо не критичен для большинства клиентов, либо от него можно избавиться задав вопрос на stackoverflow, либо обратившись в поддержку матлаба (ну или заменой матлаба на что-то другое).

              Да, матлаб упадёт с OutOfMemory. :))

              Это же шутка? Если нет, то это из разряда «мы не можем решить задачу матлабом». Решение (уже писал) — замена инструмента, или выделить подзадачи по другому.

              Я так и не увидел серьезных аргументов для отказа использовать statndalone матлаб (или аналог). Я даже не понимаю, почему кто-то надеется, что переписывание решения со специализированного языка, на язык общего назначения окажется выгоднее хоть с какой-то точки зрения.
              • 0
                MathCad, Mathematica и Matlab все-таки несколько разные продукты.

                Аналоги у матлаба условно есть, но, во-первых это аналог базового языка, без тулбоксов, а во-вторых он не полный аналог. Я как-то разбирался с кодом из одной статьи и в octave и matlab оно работало по-разному.

                Ну и матлаб еще стоит очень прилично. Это же еще заказчику надо будет объяснять, что вот мол наш продукт, а к нему надо докупать матлаб. А матлаб может стоить и несколько десятков тысяч долларов.
  • +13
    После 7 лет работы с Matlab я его возненавидел. Столько костылей и legacy я мало где видел. Пока вы в рамках парадигмы Matlab-программирования вроде всё неплохо получается, но как только вы хотите сделать что-то большее, считайте, что вы застряли.

    Вот лишь несколько серьёзных недостатков Matlab:
    — Непомерная цена (если вы его купили). Со всеми тулбоксами стоит почти под сотню тысяч долларов. Обновление всего этого стоит ещё тысяч 20-30 (естественно не рублей).
    — Сама среда и редактор кода примитивны по сравнению с современными IDE. Никакой интроспекции, никакого рефакторинга, никаких проектов. Например, с PyCharm просто даже не сравнить
    — Тормозящая графика. Работать с большими объёмами данных и их визуализацией очень проблематично
    — Язык программирования не общего назначения, который силён только в операциях с матрицами. Соответственно в стандартной библиотеке очень всё плохо с функциями общего назначения, контейнерами и т. п.
    — Примитивные стандартные возможности создания GUI. Есть возможность писать на Java, но это костыль
    — Код алгоритма, написанный в векторизованном виде, очень сложно понимается и переписывается программистами на том же C#/C++. А по другому его часто не написать в Matlab, потому что не дождаться завершения его работы
    — Lambda-функции ужасающе медленные (особенно если используются внешние переменные)
    — Nested-функции ужасающе медленные (особенно если используются внешние переменные)
    — Про ООП можно сразу забыть. Гигантские накладные расходы, производительность кода снижается катастрофически (в десятки раз)
    — Невменяемый древний API для создания расширений на С (Mex functions, MxArray)
    — Под Windows есть, типа, прозрачная интеграция с .Net. Производительность такая же как у ООП, т.е. никакая
    — Если вы захотите сделать интеграцию в своё приложение на базе Matlab Compiler Runtime, готовьтесь к проблемам и головной боли, там очень много граблей, например, никакой обратной совместимости, невозможность совместной работы x86/x86-64, некоторые функции API глючат и не работают так как ожидается
    — Очень медленное развитие всего пакета в целом. Последние несколько лет ничего кардинально не меняется в лучшую сторону. Делают спорные изменения в GUI, при этом стабильность среды ухудшается (последние версии постоянно падают)

    Сейчас в научной и инженерной среде очень широко стал использоваться Python. И понятно почему. Стек библиотек scipy покрывает большую часть потребностей. Python-инфраструкутра и библиотеки очень быстро развиваются. Они открытые и свободные. Python — это язык общего назначения, на нём можно написать что угодно. Для него существует огромное количество библиотек. Поэтому, я считаю, что за этим будущее.

    Если вы хотите перейти на Python в своей научной/инженерной/исследовательской деятельности, то вот базовый набор инструментов:
    — IPython
    — Numpy
    — Scipy
    — Scikit-learn
    — Scikit-image
    — Sympy
    — Matplotlib
    — Pandas
    — Theano
    — Cython

    Есть целые сборки Python-пакетов для создания целостной инфраструктуры вроде Anaconda.

    Я не вижу никаких преград, чтобы использовать Python-инфраструктуру для разработки алгоритмов, прототипирования и экспериментов, забыть про Matlab, если вам, конечно, ещё не надоело мучиться с ним. Мне однажды осточертело есть этот M-кактус. :)
    • 0
      • 0
        А ещё Microsoft спонсирует развитие IPython, так как они его используют в Python tools for Visual Studio. :)
    • 0
      В защиту матлаба хотелось бы сказать, что, в частности, в моей области, в разработке систем управления, Matlab Simulink является мировым стандартом de-facto, и серьезных конкурентов у него нет. Ни по удобству, ни по распространенности.
      • 0
        Про Simulink я ничего не говорил, всё это относится только к матлабу.
        • 0
          У меня такое ощущение, что последние годы MathWorks развивают свой продукт именно в сторону Simulink и всего вокруг него. Я не уверен, что сейчас вообще можно отдельно купить лицензию только на matlab, а не на matlab+simulink.
          Я это к тому, что, возможно, сменилось ориентирование пакета и спектр решаемых задач. Соответственно, инструменты решения тех задач, которые выпали из фокуса, развивались медленно или вообще никак. Ведь, наверное, в начале вашего 7-летнего опыта матлаб вас устраивал, а недовольство накапливалось со временем?

          • 0
            Компания, в которой я работал, покупала лицензию без включения simulink. Он идет как отдельный тулбокс для которого требуется базовый пакет матлаб.

            Да, сначала я был просто в восторге от матлаба. Да и сейчас многие вещи мне в нём очень нравятся, те же тулбоксы для обработки изображений, сигналов, оптимизации и приближения кривых. Среда сама по себе очень продумана, не смотря на примитивность инструментов, привычных для программистов. Но и недовольства накопилось тоже достаточно. :)
  • 0
    Вообще восприятие зависит от того, какие конкретно вы задачи на MATLAB решаете. Если это обычные численные решения, то вероятно MATLAB подходит только для моделирования, а дальше либо ccode либо например вы пишете все как формулы а потом генерите из формул код.
  • 0
    В свою очередь, хочу сказать о достаточно успешном использовании связки Wolfram Mathematica и C++.
    Когда есть гора каких-то формул и алгоритмов, часто неполных и, как следствие, недостаточных для решения задачи, сесть за C++ и быстро все накатать крайне проблематично. Проще и быстрее набросать прототип в Wolfram Mathematica, прогнать через все возможные тестовые данные, убедиться в правильности результатов, а потом уже все переносить на C++.
    Я так делаю и считаю это эффективным.

    Но тут есть парочка моментов. Во-первых, Mathematica очень хорошо покрывает своими функциями наше направление разработки (геодезия), во-вторых, я достаточно хороший программист с неплохим математическим образованием.

    А вот Matlab… как-то он меня всегда не вставлял. Чтобы что-то на нем сделать, по сравнению с Mathematica и Maple, нужно было вывихнуть себе мозг. Да, там есть крутой Simulink, но вот заниматься именно математикой и алгоритмизации в продукте, имхо, неудобно.
    • +3
      Wolfram Mathematica

      Это ПО на голову (если не больше) превосходит Matlab c точки зрения архитектуры и продуманности. Функциональный язык, единая концепция, интерактивные блокноты… При этом его стоимость гораздо-гораздо ниже чем стоимость Matlab, пакет Standard Edition может себе позволить обычный человек (не корпорация и не университет). Мне кажется, тут дело в культуре самой компании Wolfram Research. Вы заглядывали в код функций матлабовских тулбоксов? Там же просто ад. Код абсолютно не читаемый, всё написано в разных стилях кодирования, никакой культуры. Такое ощущение, что тулбоксы пишет толпа студентов, либо прожжённых математиков, которые пишут write-only код, никак друг с другом не взаимодействуя.
  • +1
    Ну а денег-то сэкономили? Я так понял, ради этого все затевалось.
  • 0
    меня в матлабе расстраивает, если написать int(4.5) он вернет 5.
    • 0
      Да, надо писать int32(fix(4.5))

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