找出是否使用了三角函数并跟踪符号variab

2024-04-29 20:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我将得到三角函数的度数

我将使用sympy,因为它使用三角函数的弧度,我想能够转换和使用度

但是,我不知道哪个符号变量被用作三角函数的输入

所以,我会有这样的东西:

import sympy
from sympy import mpmath

a = 2
b = 30
a,b = sympy.symbols('a b')
expr = 'sqrt(a + cos(b))'
expres = sympy.sympify(expr)

print(expres.atoms(sympy.cos))

b30,单位是度(因此,在cos(b)计算中,它必须是度,而不是sympy期望的弧度)

但是,如我所说,程序运行的另一次,它将使用另一个符号变量来表示三角函数,或者,多个三角函数

我想如果用atoms来找出表达式中是否有三角函数,然后,不知何故,在使用相应符号变量的地方,使用度而不是弧度

有办法吗


Tags: fromimport符号sqrtcossymbolssympyatoms
2条回答

可以将subs与函数一起使用,例如:

from sympy.abc import *
from sympy import sin, exp, pi, Lambda

sin_degree = Lambda(x, sin(x*pi/180))

expr = sin(a) + sin(b**d + exp(c))
print( expr.subs(sin,sin_degree) )

这将返回:

sin(pi*a/180) + sin(pi*(b**d/180 + exp(c)/180))

可以说,避免这个问题的最简洁的方法是告诉sympify对选定的符号/字符串使用自定义定义,例如:

from sympy.abc import *
from sympy import sin, pi, Lambda, sympify

sin_degree = Lambda(x, sin(x*pi/180))
degree_trigs = {"sin": sin_degree}

expr_string = "sin(a) + sin(b**d + exp(c))"
expr = sympify(expr_string, locals=degree_trigs)
print(expr)

这将返回:

sin(pi*a/180) + sin(pi*(b**d/180 + exp(c)/180))

相关问题 更多 >