用Python求解复杂的多变量函数

用Python求解复杂的多变量函数,python,numeric,numerical-methods,approximation,Python,Numeric,Numerical Methods,Approximation,我有一个由两个变量组成的非常复杂的函数,我们把它们叫做x和y。我想创建一个Python程序,用户可以在其中输入两个值,a和b,其中a是x和y的复杂函数的值,b=math.atan(y/x)。然后,该程序应输出x和y的值 我不知道从哪里开始。我尝试将函数转换为一个变量,然后为x生成许多随机值,并选择最接近的一个,但我了解到这是非常低效的,并且产生的结果只能精确到大约2个有效数字,这非常可怕。有更好的方法吗?非常感谢 (P.S.)由于版权问题,这里没有显示函数。为了举例,您可以考虑函数 a = 4*

我有一个由两个变量组成的非常复杂的函数,我们把它们叫做
x
y
。我想创建一个Python程序,用户可以在其中输入两个值,
a
b
,其中
a
x
y
的复杂函数的值,
b=math.atan(y/x)
。然后,该程序应输出
x
y
的值

我不知道从哪里开始。我尝试将函数转换为一个变量,然后为
x
生成许多随机值,并选择最接近的一个,但我了解到这是非常低效的,并且产生的结果只能精确到大约2个有效数字,这非常可怕。有更好的方法吗?非常感谢

(P.S.)由于版权问题,这里没有显示函数。为了举例,您可以考虑函数

a = 4*math.atan(math.sqrt(math.tan(x)*math.tan(y)/math.tan(x+y)))
其中
y=x*math.tan(b)


编辑:使用
sympy
库的方法后,程序似乎忽略了我的第二个方程(复杂的方程)。我怀疑它太复杂了,
sympy
无法处理。因此,我要求采用另一种不使用sympy的方法

您可以使用Symphy并从Symphy导入三角函数

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对象)以获得可能的适当结果


如果这还不够清楚,你可以

功能可以受版权保护?你考虑过吗?@ReblochonMasque我从一位作者那里得到了这个问题,虽然我认为它在技术上不受版权保护,但我仍然不想在未经允许的情况下把他提出的东西放在这里。@Ruan不,我不知道如何使用它。如果你能用这个回答我会很感激的。谢谢您是否尝试过绘制函数,以查看beast的外观?当我运行此代码时,会得到输出
{(y/tan(5),y)}
。为什么这是在
y
方面,我该如何解决这个问题?事实上,程序似乎完全忽略了第二个等式!现在,我得到了这一:<代码>现在,我得到了这一点:<代码>现在,我得到了这一:<代码>现在,我得到了这一点:<代码>现在,我现在,我得到了这一:<代码>{{(条件集(y,y,Eq)(y,EY,Eq((Q)以及(y,y,Eq)的(y,E((y,y,y)E((y)的)以及(y)的,(,(我(y***(y+I*(5*5*I+I+I+I+I*I+I*I+I*I*I*I*I*I*I*I*I+exp(exp(5*I+5*I+I+5*I+I+5*I+5*I+5*I)++exp(-5*I)exp(-5*I)exp(-5*I+5*I+5*I)exp(-5*I)exp*(exp(5*I)+exp(-5*I))/(-exp(5*I)+exp(-5*I)))-exp(I*(y-I*y*(exp(5*I)+exp(-5*I))/(-exp(5*I)+exp(-5*I)))*(exp(2*y*(exp(5*I)+exp(-5*I))/(-exp(5*I)+exp(-5*I)))*(1+exp(2*I))/(1+exp(2*I))/(1+exp(2*I)),0),S.Reals),。还有问题吗?