我有两个变量的非常复杂的函数,我们称它们为x
和y
。我想创建一个Python程序,用户可以在其中输入两个值a
和b
,其中a
是x
和{{1 }}和y
。然后,该程序应输出b = math.atan(y/x)
和x
的值。
我不知道从哪里开始。我试图将函数变成一个变量,然后为y
生成许多随机值并选择最接近的一个,但是我了解到这效率极低,并且只能得到大约2个重要数字,这非常可怕。有一个更好的方法吗?非常感谢!
(请注意,由于版权问题,我在这里没有透露该功能。为便于举例,您可以考虑使用该功能
x
其中a = 4*math.atan(math.sqrt(math.tan(x)*math.tan(y)/math.tan(x+y)))
。)
编辑:使用y = x * math.tan(b)
库的方法后,程序似乎忽略了我的第二个方程式(复杂的方程式)。我怀疑sympy
处理起来太复杂了。因此,我要求另一种不使用sympy
的方法。
答案 0 :(得分:2)
您可以使用sympy并从sympy导入三角函数。
from sympy.core.symbol import symbols
from sympy.solvers.solveset import nonlinsolve
from sympy import sqrt, tan, atan
y = symbols('y', real=True)
a,b = 4,5 # user-given values
eq2 = a - 4*atan(sqrt(tan(y/tan(b))*tan(y)/tan((y/tan(b))+y)))
S = nonlinsolve( [eq2], [y] )
print(S)
它将返回一系列条件(ConditionSet对象),以获取可能的足够结果。
如果还不够清楚,可以read the docs for nonlinsolve。