SymPy 不评估 sin(-x) 或 sin(pi) 的 Latex2SymPy 转换
SymPy does not evaluate Latex2SymPy conversion for sin(-x) or sin(pi)
我一直在使用 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 直接来自 sympy 表达式:
trigsimp(sin(-x))
-sin(x)
这是我所期望的。即使 运行ning sin(-x) 没有 trigsimp() 命令 returns me -sin(x)。我检查了 process_sympy('\\sin{-x}') 调用的对象类型,它是 'sin'.
我认为这可能与 x 转换为 Symbol 类型的方式有关,但我随后尝试将 pi 放入 sin 函数中。
inputLatex = '\sin{\pi}'
trigsimp(process_sympy(inputLatex))
sin(pi)
如果我 运行 直接 sin(pi),无论是否使用 trigsimp(),我都会得到 0 作为答案。
你们中的任何人都可以阐明这一点吗?
我还没有解开整个谜团,但我找到了一个肮脏的解决方法,那就是使用 sympify()。因此,如果其他人遇到同样的问题,以下是我为使其正常工作所做的工作:
inputLatex = '\sin{-x}'
sympify(str(process_sympy(inputLatex)))
现在的答案是-sin(x),我想要的。
至于 sin(pi) 的问题,问题是 process_sympy() 无法区分作为符号的 pi 和作为数字的 pi。我在这里做了测试,输入的是(process_sympy('\pi')) returns 符号类型,而不是数字。同样的解决方案适用于此处。
虽然可能为时已晚,但您可以通过在从 process_sympy(inputLatex)
.
获得的 sympy
表达式中调用 doit()
方法来解决该问题
当调用 process_sympy
时,它生成一个 unevaluated sympy expression,而不是一个字符串。这个表达式不能仅通过调用 sympify
来求值,因为它有一个属性告诉它不要求值。
您通过将该表达式转换为字符串然后对其进行简化来解决问题,但更直接的方法是在表达式中使用 doit()
方法:
inputLatex = '\sin{-x}'
expr = process_sympy(inputLatex)
trigsimp(expr.doit())
会做这份工作。
我一直在使用 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 直接来自 sympy 表达式:
trigsimp(sin(-x))
-sin(x)
这是我所期望的。即使 运行ning sin(-x) 没有 trigsimp() 命令 returns me -sin(x)。我检查了 process_sympy('\\sin{-x}') 调用的对象类型,它是 'sin'.
我认为这可能与 x 转换为 Symbol 类型的方式有关,但我随后尝试将 pi 放入 sin 函数中。
inputLatex = '\sin{\pi}'
trigsimp(process_sympy(inputLatex))
sin(pi)
如果我 运行 直接 sin(pi),无论是否使用 trigsimp(),我都会得到 0 作为答案。
你们中的任何人都可以阐明这一点吗?
我还没有解开整个谜团,但我找到了一个肮脏的解决方法,那就是使用 sympify()。因此,如果其他人遇到同样的问题,以下是我为使其正常工作所做的工作:
inputLatex = '\sin{-x}'
sympify(str(process_sympy(inputLatex)))
现在的答案是-sin(x),我想要的。
至于 sin(pi) 的问题,问题是 process_sympy() 无法区分作为符号的 pi 和作为数字的 pi。我在这里做了测试,输入的是(process_sympy('\pi')) returns 符号类型,而不是数字。同样的解决方案适用于此处。
虽然可能为时已晚,但您可以通过在从 process_sympy(inputLatex)
.
sympy
表达式中调用 doit()
方法来解决该问题
当调用 process_sympy
时,它生成一个 unevaluated sympy expression,而不是一个字符串。这个表达式不能仅通过调用 sympify
来求值,因为它有一个属性告诉它不要求值。
您通过将该表达式转换为字符串然后对其进行简化来解决问题,但更直接的方法是在表达式中使用 doit()
方法:
inputLatex = '\sin{-x}'
expr = process_sympy(inputLatex)
trigsimp(expr.doit())
会做这份工作。