如何将Latex公式转换为C/C++代码?

6

我需要将用Latex格式编写的数学公式转换为C/C++代码的函数形式。 例如: y = sin(x)^2 可能会变成类似以下的形式:

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

或者

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

其中 x 是在之前某处定义的变量。 我的意思是,它应该将 LaTeX 公式转换为 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”会变成什么呢? - Fred Foo
当然,并非所有可能的公式都可以转换为C/C++代码。我指的是那些作为某个定义的公式,例如某个东西等于某个公式,而不是像你的那个方程式一样。 - maximus
4个回答

12
Emacs内置的计算器calc-mode可以完成这个任务(以及更多)。您可以按照以下方式转换示例:
将公式放入某个emacs缓冲区中。
$ y = sin(x)^2 $

当光标位于公式中时,激活嵌入式计算模式

M-x calc-embedded

将显示语言切换为C:

M-x calc-c-language

你在这里:

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

请注意,它将latex中的'='符号解释为相等,这导致C中的'=='。Cs赋值运算符'='的latex等效物将是'\gets'。
有关此主题的更多信息,请访问Turong的博客

5
我知道这个问题已经很老了,但我还是想回复一下,因为我认为它可能会帮助其他人。在我的搜索中,我经常看到这个问题。
我正在开发一个类似的工具,在公共git仓库中。
您需要对latex输入进行一些人为限制,这是不可避免的。 目前,我编写的工具仅支持mul,div,add,sub,sqrt,pow,frac和sum作为我需要处理的操作集,并且可以通过提供一个预处理器(请参见preproc.l,作为一个[也许不太好的]示例),来放宽一些限制以清除原始latex输入。

4
一种数学方程,比如LaTeX中的方程,和C语言表达式并不可互换。前者说明了两个术语之间的关系,而后者定义了一个可以被计算的实体,其结果会明确地呈现出一个值。C中的a = b表示“将变量b中的值存储到变量a中”,而在数学上这意味着“在当前情况下,a和b是相等的”。前者描述了计算过程,而后者描述了静态事实。因此,数学方程可以翻转:a = b等价于b = a,但对C方程进行同样的操作得到的结果则大不相同。
更糟糕的是,LaTeX公式只包含绘制公式所需的信息;通常,这并不足以捕获它们的意义。
当然,某些LaTeX公式(如你的例子)可以转换为C计算,但其他许多公式则无法转换,因此任何自动化的方式都只能有限地理解它们的意义。

0
我不确定是否有简单的答案,因为数学公式(在LaTeX文档中)实际上是含糊不清的,所以要自动将它们翻译成代码需要自动化它们的理解。
而MathML标准有两种形式表示公式(一种用于显示,另一种用于计算),这其中有一些原因。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接