Как переписать уравнения из Matlab для использования в C ++ - PullRequest
1 голос
/ 01 марта 2010

Я вывел и упростил уравнение в Matlab и хочу использовать его в программе на c ++. Matlab любит использовать полномочия, знак ^, но c ++ не любит его один раз. Как я могу заставить Matlab переписать уравнение так, чтобы оно выводило дружественное для c ++ уравнение?

Ответы [ 5 ]

2 голосов
/ 02 марта 2010

Если уравнение действительно настолько длинное, что вы не хотите проходить вручную, один вариант, который вы могли бы рассмотреть для переформатирования уравнения, чтобы сделать его более удобным для C ++, - это проанализировать текст кода MATLAB для уравнения, используя REGEXPREP функция в MATLAB. Вот пример того, как можно заменить выражения вида x^2 или y.^3 на pow(x,2) или pow(y,3):

eqStr = 'the text of your equation code';  %# Put your equation in a string
expr = '(\w+)\.?\^(\d+)';                  %# The pattern to match
repStr = 'pow($1,$2)';                     %# The replacement string
newStr = regexprep(eqStr,expr,repStr);     %# The new equation string

Вам просто нужно взять код для вашего уравнения MATLAB и сначала поместить его в строковую переменную eqStr. Выходные данные REGEXPREP будут тогда текстом для вашего нового дружественного C ++ уравнения newStr.

Вы также можете изменить строку замены, чтобы получить результаты в форме x*x или y*y*y, используя динамические операторы . Например:

eqStr = 'the text of your equation code';  %# Put your equation in a string
expr = '(\w+)\.?\^(\d+)';                  %# The pattern to match
repStr = '${repmat([$1,''*''],1,$2-''0''-1)}$1';  %# The replacement string
newStr = regexprep(eqStr,expr,repStr);            %# The new equation string
1 голос
/ 25 апреля 2012

Подход состоит в том, чтобы использовать функцию ccode MATLAB, которая преобразует символические выражения в C-код. Например, ccode(sym('(x+y)^2')) возвращает t0 = pow(x+y,2.0);. Конечно, не забудьте using namespace std в вашей C ++ программе (или просто замените pow на std::pow), иначе он не скомпилируется. Подробнее о ccode вы можете прочитать в справке MATLAB.

1 голос
/ 01 марта 2010

В C ++ функция pow () перегружена для целочисленных степеней - она ​​использует более быстрый алгоритм для ^ 2,3 и т. Д.

1 голос
/ 01 марта 2010

Вы можете использовать pow family.

0 голосов
/ 01 марта 2010

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

После этого вы можете создавать код C ++ из дерева синтаксиса.

А также есть инструмент для преобразования Matlab в C-код. Я еще не использовал его, и он не доступен бесплатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...