我已经制作了一个函数来计算LaTeX表达式: 以下是代码

from sympy import latex, sympify
from sympy.parsing.latex import parse_latex
from sympy import latex, parse_expr

# ------->> Example LaTeX string
latex_string = r'\frac{30}{2}'

# ------->> Convert LaTeX string to a sympy expression
expr = parse_latex(latex_string)

# ------->> Evaluate the expression
result = expr.evalf()

# ------->> Print the result
print(result)

但是当我向该函数发送\sin(30)时,它返回-0.988031624092862而不是0.5.我已经在Stackoverflow和聊天GPT中搜索了很多,并得到了这个来生成罪恶的价值

import sympy as sp

# Calculate the sine of 30 degrees
result = sp.sin(sp.rad(30))

# Print the result
print(result)

但我想以\sin(30)(LaTeX)格式发送输入.有人能告诉我怎样才能做到这一点吗?

推荐答案

Sympy的三角函数自动计算最重要的弧度值.例如,sin(pi / 4)的计算结果为sqrt(2)/2.由于您提供的是学位Angular ,因此不应进行判断.例如:

from sympy import *
from sympy.parsing.latex import parse_latex
s = r"\sin(30) + \cos\left(45\right)"
expr = parse_latex(s)
expr
# out: sin(30) + cos(45)

此时,您可以对expr进行后处理,以将三角函数的参数从度转换为弧度:

from sympy.functions.elementary.trigonometric import TrigonometricFunction

# finds all trigonometric functions
trigs = expr.find(TrigonometricFunction)

# loop over each match, replace it with a new trig function with angle in radians
for t in trigs:
    expr = expr.replace(t, t.func(t.args[0] * pi / 180))
expr
# out: 1/2 + sqrt(2)/2

编辑:您可能只想在三角函数的参数为数字时应用替换.如果是这样的话:

s = r"\sin(30) + \cos\left(45\right) + \cos(x)"
expr = parse_latex(s)
for t in trigs:
    if t.args[0].is_Number:
        expr = expr.replace(t, t.func(t.args[0] * pi / 180))
expr
# out: cos(x) + 1/2 + sqrt(2)/2

最终编辑:要考虑反三角函数,请执行以下操作:

from sympy.functions.elementary.trigonometric import InverseTrigonometricFunction

s = r"\arcsin(0) + \arccos(1/2)"
expr = parse_latex(s)

inverse_trigs = expr.find(InverseTrigonometricFunction)

# loop over each match, replace it with a new inverse trig function
for t in inverse_trigs:
    expr = expr.replace(t, t * 180 / pi)
expr
# out: 180*asin(0)/pi + 180*acos(1/2)/pi

Python相关问答推荐

比较两个二元组列表,NP.isin

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

如何标记Spacy中不包含特定符号的单词?

将数据框架与导入的Excel文件一起使用

Telethon加入私有频道

django禁止直接分配到多对多集合的前端.使用user.set()

删除字符串中第一次出现单词后的所有内容

Pre—Commit MyPy无法禁用非错误消息

递归访问嵌套字典中的元素值

Matplotlib中的字体权重

如何创建引用列表并分配值的Systemrame列

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

递归函数修饰器

如何用FFT确定频变幅值

如何将列表从a迭代到z-以抓取数据并将其转换为DataFrame?

奇怪的Base64 Python解码

将Pandas DataFrame中的列名的长文本打断/换行为_STRING输出?

ValueError:必须在Pandas 中生成聚合值

基于2级列表的Pandas 切片3级多索引