了解是否使用了三角函数和追踪符号变量



我将有使用度数作为三角函数的数据。

我将使用 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来查找表达式中是否有三角函数。然后,不知何故,在使用相应的符号变量的地方使用度而不是弧度。

有没有办法做到这一点?

可以

说,避免此问题的最干净方法是告诉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))

您可以将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))

最新更新