如何在 Python 中有限输入的二次函数中计算系数、解等

How to calculate coefficients, solutions etc. in quadratic function with limited inputs in Python

我有问题。我想计算二次函数中的所有内容。供参考的方程式:

ax^2 + bx + c
a(x-p)^2 + q

我在 tkinter 中做了 8 个可能的输入,我希望我的程序尽可能尝试计算所有内容。否则到return……好像数据不够。 方程式:

delta = b^2-4ac
p = -b/(2a)
p = (x1+x2)/2
q = -delta/(4a)
#if delta>0
x2 = (-b-sqrt(delta))/(2a)
x1 = (-b+sqrt(delta))/(2a)
#if delta=0
x0 = -b/(2a)
#if delta<0 no solutions
#a, b, c are the coefficients.
b = -2ap
c = p^2*a+q

示例:

Input:
p = 3
q = -9
x1 = 0.877868
a = 2

Output:
b = -12
c = 9
x2 = 5.12132
delta = 72

因此,例如,我给它 [x1, x2, a],它会尽可能计算 [q, p, b, c, 和 delta]。 是否有一个函数可以提供所有不同的公式并且它会尝试计算所有内容? 目前,我唯一的想法是在'try'或'ifs'中暴力破解它,但我觉得这需要几千行代码,所以我不会这样做。

我发现您可以使用 sympy 的解决方案。这是我的解决方案。我用 Eq 定义方程,然后求解。

def missingVariables(dictOfVariables):
    symbols = dict(a=sym('a'), b=sym('b'), c=sym('c'), p=sym('p'), q=sym('q'), x1=sym('x1'), x2=sym('x2'),
                   delta=sym('delta'))
    var = mergeDicts(symbols, dictOfVariables)

    deltaEQ = Eq((var['b'] ** 2 - 4 * var['a'] * var['c']), var['delta'])
    x1EQ = Eq(((-var['b'] - sqrt(var['delta'])) / (2 * var['a'])), var['x1'])
    x2EQ = Eq(((-var['b'] + sqrt(var['delta'])) / (2 * var['a'])), var['x2'])
    pEQ = Eq((-var['b']) / (2 * var['a']), var['p'])
    pEQ2 = Eq(((var['x1'] + var['x2']) / 2), var['p'])
    qEQ = Eq(((-var['delta']) / (4 * var['a'])), var['q'])
    bEQ = Eq((-2 * var['a'] * var['p']), var['b'])
    cEQ = Eq((var['a'] * var['p'] ** 2 + var['q']), var['c'])

    solution = solve((deltaEQ, x1EQ, x2EQ, pEQ, pEQ2, qEQ, bEQ, cEQ))
    solution = solution[0]
    new_dict = {}
    for k, v in solution.items():
        try:
            new_dict[str(k)] = round(float(v), 4)
        except TypeError:
            new_dict[str(k)] = v
    return new_dict