2011-10-25 36 views
4

我需要将用Latex样式编写的数学公式转换为C/C++代码的功能。 例如: Y =的sin(x)^ 2将成为类似乳胶公式到C/C++代码转换器

double y = sin(x) * sin(x); 

double y = pow(sin(x), 2); 

其中X是之前的某处定义的变量。 我的意思是它应该将胶乳公式转换为C/C++语法。所以,如果有一个函数Y = G(X,Y)^ F(X)不要紧什么是G(X,Y)F(X), 这是一个问题的程序员来定义它。它只是将产生

double y = pow(G(x, y), F(x)); 

当公式太复杂,将需要一些时间来使包括它的C/C++公式,这就是为什么我需要这样一个转换器。有没有?

+3

鉴于其有限的用处,我很惊讶地发现这样的转换器存在。实践中使用的几个公式承认直接翻译成代码。 'x^2 + y^2 = 1'会变成什么? –

+0

不是所有可能的公式都可以转换成C/C++代码。 我的意思是那些定义某些东西的公式,比如某个东西等于某个公式,而不是像你这样的公式。 – maximus

回答

5

一个数学方程,如LaTeX中的数学方程和C表达式是不可互换的。前者描述了两个术语之间的关系,后者定义了一个可以评估的实体,明确地产生一个值。 C中的a = b表示'取变量b中的值并将其存储在变量a'中,在数学中,它表示'在当前上下文中,a和b相等'。第一个描述了一个计算过程,第二个描述了一个静态事实。因此,可以颠倒数学方程式:a = b相当于b = a,但对C方程式做同样的处理会产生不同的结果。

更糟的是,LaTeX公式只包含渲染方程所需的信息;通常,这不足以捕捉它们的意义。

当然,一些LaTeX公式,如您的示例,可以转换为C计算,但许多其他公式不能,所以任何自动化的方式只会产生有限的意义。

0

我不确定有一个简单的答案,因为数学公式(在LaTeX文档中)实际上是模棱两可的,所以要自动化他们的翻译到某些代码需要自动化他们的理解。

MathML标准有IIRC两种形式代表的公式(一个用于显示,另一个用于计算),这是有原因的。

+2

它们在什么意义上是模糊的? – aioobe

8

Emacs内置的计算器calc-mode可以做到这一点(还有更多)。你的例子可以转换是这样的:

把公式在一些emacs的缓冲

$ y = sin(x)^2 $ 

当光标在该式中,激活钙嵌入模式

M-x calc-embedded 

切换显示语言C:

M-x calc-c-language 

您现在的位置:

$ y == pow(sin(x), 2) $ 

请注意,它将胶乳中的'='符号解释为相等,导致C中的'=='。与Cs赋值运算符'='相当的胶乳将为'\ gets'。

更多关于这个话题上Turong's blog

+0

这个转换可以从命令行完成吗? – nightcod3r

2

我知道这个问题是太旧了,但我只是反正添加回复为认为这可能帮助别人之后。在我的搜索中,这个问题突然出现了。

我工作的一个工具,做类似的事情,在public git repo

你必须把你的乳胶输入一些人为限制,这是毫无疑问的。 目前我写的工具只支持mul,div,add,sub,sqrt,pow,frac和sum,因为这些是我需要处理的唯一一组操作,并且强加的限制可以通过提供预处理器请参阅preproc.l了解[可能不是那么好]的例子),它将清除原始胶乳输入。