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

Matlab для C или С++

Я работаю над проектом обработки изображений с использованием Matlab. Мы должны запустить нашу программу (предназначенную для приложения) на сотовый телефон. Затем нас попросили преобразовать наш код на язык C или С++, чтобы мы поняли, сколько времени потребуется для его выполнения, а затем выберите платформу. До сих пор мы не определяли, как это сделать. Любые идеи о том, что делать, чтобы преобразовать Matlab в C или С++?

4b9b3361

Ответ 1

Matlab может выполнить код C для вас.

См: http://www.mathworks.com/products/featured/embeddedmatlab/

Сгенерированный код, однако, зависит от библиотек matlab. Поэтому вы, вероятно, не можете использовать его для мобильного телефона. Но в любом случае это может сэкономить вам время.

Ответ 2

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

Если вы занимаетесь обработкой изображений, я настоятельно рекомендую посмотреть что-то вроде ITK на http://www.itk.org - я написал свое изображение дважды обрабатывая программное обеспечение на С++, один раз без ITK (все кодирование самостоятельно) и один раз, а версия, использующая ITK, была быстрее завершена, работала лучше и была в 10 раз более интересной для работы. FWIW.

Ответ 3

Я также использовал MATLAB Coder, чтобы преобразовать некоторые функции, состоящие из нескольких сотен строк MATLAB в C. Это включало использование MATLAB для решения собственных значений и функции инверсии матрицы.

Хотя Кодер смог создать код С (который теоретически был идентичен), он был очень запутан, раздут, невозможно расшифровать и оказался крайне неэффективным. Он буквально создал около 10x столько строк кода, сколько им нужно было. Я закончил конвертировать все вручную, чтобы я мог наконец понять код C позже и внести дальнейшие изменения/обновления. Однако эта задача может быть очень утомительной/опасной, поскольку индексирование массива в Matlab основано на 1 и в C на 0. Вероятно, вы добавите ошибки в код, как я и испытал. вам также придется преобразовать любую векторную/матричную арифметику в циклы, которые обрабатывают скаляры (или используют некоторый тип пакета матричной алгебры C)

Ответ 4

В MathWorks представлен продукт под названием MATLAB Coder, который утверждает, что создает "читаемый и переносимый код C и С++ из кода MATLAB®". Я сам не пробовал, поэтому я не могу прокомментировать, насколько хорошо он выполняет эти цели.

Что касается Image Processing Toolbox, этот список (предположительно для R2016b) показывает, какие функции были включены для генерации кода и любых ограничений, которые они могут иметь.

Ответ 5

У Matlab есть инструмент под названием "Matlab Coder", который может преобразовать ваш файл в текстовый файл M или MX. Мой код относительно прост, так что он отлично работает. Ускорение увеличивается примерно в 10 раз быстрее. Это экономит время, кодируя несколько сотен строк. Надеюсь, что это тоже полезно для вас.

Краткое руководство для подтверждения MATLAB Coder

В ссылках описывается процесс преобразования кода в 3 основных этапа:

  • Сначала вам нужно сделать несколько упрощений в вашем нынешнем коде, чтобы он был достаточно прост для перевода кода.

  • Во-вторых, вы будете использовать инструмент для создания файла mex и тестирования, если все работает.

  • Наконец, вы измените некоторые настройки и сгенерируете код C. В моем случае код C содержит около 700 строк, включая весь исходный код (около 150 строк) в качестве комментариев. Я думаю, что это вполне читаемо и может быть улучшено. Тем не менее, я все равно получаю в 10 раз больше выигрыша от файла mex. Так что это определенно хорошая вещь.

Мы не можем быть уверены, что это будет работать во всех случаях, но это определенно стоит попробовать.

Ответ 6

Я помню, что есть инструмент для экспорта m файлов в виде c (++) файлов. Но я никогда не смог добиться этого. Вам нужно добавить некоторые неясные заголовки MATLAB в код c/С++, и я думаю, что это также не рекомендуется.

Если у вас запущен MATLAB-код, он не должен предпринимать слишком много усилий для преобразования "вручную". Я работал над несколькими проектами, в которых использовался MATLAB, и никогда не рассматривал использование каких-либо инструментов для преобразования кода в C/С++. Это всегда делалось "вручную".

Я считаю, что был единственным, кто когда-либо исследовал использование инструмента.

Ответ 7

Ну нет прямого преобразования из matlab в c/С++. Вам нужно будет понять язык и различия между matlab и c/С++, а затем начать кодирование в c/С++. Код немного немного испытайте, пока он не сработает.