SymPy不评估sinx(-x)或sin(pi)的Latex2SymPy转换

时间:2018-04-05 22:07:51

标签: sympy symbolic-math

我一直在使用Latex2SymPy成功处理各种LaTeX输入,但是我遇到了一些功能问题。例如:

from latex2sympy.process_latex import process_sympy
from sympy import *

inputLatex = '\\sin{-x}\\sin{-x}'
trigsimp(process_sympy(inputLatex))

的sin(x)** 2

效果很好:trigsimp很好地处理了简化。现在,如果我尝试:

inputLatex = '\\sin{-x}'
trigsimp(process_sympy(inputLatex))

SIN(-x)

即使这显然是正确的,我希望trigsimp()给我-sin(x)作为答案。事实上,如果我直接从一个表达式表达式运行trigsimp:

trigsimp(sin(-x))

-sin(x)

这就是我的期望。即使在没有trigsimp()命令的情况下运行sin(-x)也会返回-sin(x)。我检查了我的process_sympy(' \\ sin {-x}')电话的对象类型,它是“罪恶”。

我认为这可能与x转换为Symbol类型的方式有关,但我尝试将pi放入sin函数中。

inputLatex = '\\sin{\\pi}'
trigsimp(process_sympy(inputLatex))

罪(PI)

如果我直接犯罪(pi),我得到0作为答案,有或没有trigsimp()。

你们中的任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

尽管可能为时已晚,但您可以通过在从B获得的doit()表达式中调用sympy方法来解决该问题。

调用process_sympy(inputLatex)时,它会生成unevaluated sympy expression,而不是字符串。该表达式不能仅通过调用process_sympy来求值,因为它具有告诉您不要求值的属性。

您可以通过将表达式转换为字符串然后再进行表示来解决该问题,但是更直接的方法是通过在表达式中使用sympify方法:

doit()

会做这份工作。

答案 1 :(得分:0)

我还没有解决整个谜团,但我找到了一个肮脏的解决方法,即使用sympify()。因此,如果其他任何人面临同样的问题,我将采取以下措施来实现这一目标:

inputLatex = '\\sin{-x}'
sympify(str(process_sympy(inputLatex)))

答案现在是-sin(x),我想要的。

对于sin(pi)事物,问题是process_sympy()不能将pi作为符号与pi区分为数字。我在这里做了测试,并且输入(process_sympy(' \ pi'))返回符号类型,而不是数字。同样的解决方案适用于此。