是否有任何方法可以求解任何奇异缺失变量的方程,而不必以不同的方式重写方程?我写这篇文章是为了表达我的意思:
def solve_drag(fd = None, p = None, v = None, cd = None, a = None):
"""Takes 4 inputs out of the 5 listed and returns what the other must equal."""
def drag(fd, p, v, cd, a):
return (0.5 * p * v**2 * cd * a) - fd
if fd == None:
return scipy.optimize.fsolve(drag, 25, args=(p, v, cd, a))
elif p == None:
return scipy.optimize.fsolve(lambda p, v, cd, a, fd: drag(fd, p, v, cd, a),
1, args=(v, cd, a, fd))
elif v == None:
return scipy.optimize.fsolve(lambda v, cd, a, fd, p: drag(fd, p, v, cd, a),
1, args=(cd, a, fd, p))
elif cd == None:
return scipy.optimize.fsolve(lambda cd, a, fd, p, v: drag(fd, p, v, cd, a),
1, args=(a, fd, p, v))
elif a == None:
return scipy.optimize.fsolve(lambda a, fd, p, v, cd: drag(fd, p, v, cd, a),
1, args=(fd, p, v, cd))
它可以工作,但感觉非常笨重,并且使用多个不同的功能会很长而且很烦人。有没有一种方法可以创建一个函数,该函数接受要求解的函数和已知变量以返回丢失的变量?
你可以这样做:
def solve_drag(fd = None, p = None, v = None, cd = None, a = None):
"""Takes 4 inputs out of the 5 listed and returns what the other must equal."""
def drag(fd, p, v, cd, a):
return (0.5 * p * v**2 * cd * a) - fd
args = [fd, p, v, cd, a]
i = args.index(None)
return scipy.optimize.fsolve(lambda x: drag(*args[:i], x, *args[i+1:]), 1)