我在Matlab中派生并简化了一个方程式,并希望在c ++程序中使用它。 Matlab喜欢使用幂,^
符号,但c ++不喜欢它。如何让Matlab重写方程式,以便输出一个c ++友好方程?
答案 0 :(得分:2)
如果方程真的很长,以至于你不想手工完成,那么你可以考虑重新格式化方程以使其对C ++友好的一个选项是使用以下方法解析方程的MATLAB代码的文本。 MATLAB中的REGEXPREP函数。以下是如何使用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
的文本。
您还可以更改替换字符串,使用dynamic operators为您提供表单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 :(得分: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)