如何从matlab重写方程式以便在c ++中使用

时间:2010-03-01 18:25:41

标签: c++ matlab

我在Matlab中派生并简化了一个方程式,并希望在c ++程序中使用它。 Matlab喜欢使用幂,^符号,但c ++不喜欢它。如何让Matlab重写方程式,以便输出一个c ++友好方程?

5 个答案:

答案 0 :(得分:2)

如果方程真的很长,以至于你不想手工完成,那么你可以考虑重新格式化方程以使其对C ++友好的一个选项是使用以下方法解析方程的MATLAB代码的文本。 MATLAB中的REGEXPREP函数。以下是如何使用x^2y.^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的文本。

您还可以更改替换字符串,使用dynamic operators为您提供表单x*xy*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 :(得分:1)

您可以使用pow系列。

答案 2 :(得分:1)

在C ++中,pow()函数为整数幂重载 - 它使用更快的算法^ 2,3等

答案 3 :(得分:1)

一种方法是使用ccode MATLAB函数,它将符号表达式转换为C代码。例如,ccode(sym('(x+y)^2'))会返回t0 = pow(x+y,2.0);。当然不要忘记C ++程序中的using namespace std(或者只用pow替换std::pow),否则它将无法编译。有关ccode的更多信息,您可以阅读MATLAB的帮助。

答案 4 :(得分:0)

有一个Matlab Clone Octave使用与Matlab相同的语法(我不知道支持多少语法)。既然它是开源的,也许你可以重用解析器(我从作者那里读到了一些关于它的东西“有点旧”thread)。

之后,您可以从语法树中创建C ++代码。

然后还有一个tool用于将Matlab转换为C代码。我还没有使用它,它不是免费的。