找到缺失值来求解方程

问题描述 投票:0回答:1

是否有任何方法可以求解任何奇异缺失变量的方程,而不必以不同的方式重写方程?我写这篇文章是为了表达我的意思:

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))

它可以工作,但感觉非常笨重,并且使用多个不同的功能会很长而且很烦人。有没有一种方法可以创建一个函数,该函数接受要求解的函数和已知变量以返回丢失的变量?

python scipy solver
1个回答
0
投票

你可以这样做:

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)
© www.soinside.com 2019 - 2024. All rights reserved.