在C/C++、Python或Fortran编程时输入方程的方法

12 投票
4 回答
1661 浏览
提问于 2025-04-17 01:28

我正在写一段代码,这段代码里有很多复杂的数学公式,还有很多三角函数和其他的数学性质。请问有没有办法把这些公式用latex格式展示出来,并且把它转换成C语言或Python的表达式,或者反过来做?

我该如何输入和检查这些数学表达式,以确保括号等符号的位置正确,并且在latex文档中使用它们呢?

提前谢谢你!

4 个回答

2

我知道的最好的工具就是sage项目。它支持符号计算,可以把任何方程以ASCII格式或者LaTeX代码的形式漂亮地显示在终端上,甚至可以直接生成PDF文件。这个工具比其他一些建议更强大,因为它还可以和MATLAB、Mathmatica、Maple等软件进行连接。

enter image description here

3

编辑:看起来对于某些方程,确实可以自动化处理,具体情况见下文。原来的回答保持不变!


经过很多痛苦的时光,跟LaTeX的方程设置斗争,以及我自己在巨大的equation块中没注意到缺失的元素:虽然几乎可以肯定地说,把LaTeX转换成Python或者反过来是可能的,但这过程可能会比手动操作更麻烦,而且你可能还得花时间整理结果。

话虽如此,类似的问题已经被问过并且得到了回答,

也许你可以从这里开始。


编辑 我查看了之前的问题,并测试了一些评论的组合(1 2 3)。所有的功劳都归于那些评论的作者!

import sympy

def python_to_latex(expression, simplify=False):
    sym_expr = sympy.sympify(expression) 

    if simplify: sym_expr = sympy.simplify(sym_expr)

    return sympy.latex(sym_expr)

if __name__ == '__main__':
    print python_to_latex(raw_input("Enter a python math expression: "), simplify=True)
16

你有没有听说过Sympy?它有一个可以把Python代码转成LaTeX的模块,但其实功能远不止这些。

Sympy,从名字上你就能猜到,它是一个用于符号计算的Python库。

Sympy库还自带一个内置解释器(你可以在site-packages里的sympy目录下,打开命令行输入ipython)。

使用Sympy解释器,你可以做这样的事情:

In [1]: (1/cos(x)).series(x, 0, 10)
Out[1]: 

     2      4       6        8           
    x    5⋅x    61⋅x    277⋅x            
1 + ── + ──── + ───── + ────── + O(x**10)
    2     24     720     8064            

In [2]: ((x+y)**2).expand()
Out[2]: 

 2            2
x  + 2⋅x⋅y + y 

In [3]: (1/cos(x)).series(x, 0, 10)
Out[3]: 

     2      4       6        8           
    x    5⋅x    61⋅x    277⋅x            
1 + ── + ──── + ───── + ────── + O(x**10)
    2     24     720     8064            


# not quite LaTeX--but Sympy can easily generate LaTeX from python code: 
>>> from sympy import Integral, latex
>>> from sympy.abc import x
>>> latex(x**2)
    'x^{2}'

>>> latex(x**2, mode='inline')
    '$x^{2}$'

>>> latex(x**2, mode='equation')
    '\\begin{equation}x^{2}\\end{equation}'

我还想推荐一下Sympy库——它已经活跃开发了大约四年,每年都有很大进步;这是一个优秀、成熟的符号计算库,文档也很棒,还有一个活跃且乐于助人的社区。(除了提交过几个补丁,我并不是Sympy的开发者或维护者,只是个用户。)

撰写回答