Solving 1 equation based on input variable

For example, Volume of a rectangular box can be calculated as V = L * W * H

Suppose we know V, L, W, then we can solve for H.

Suppose we know V, H, W, then we can solve for V.

Suppose we know L, W, H, then we can solve for V. And e.t.c

Is there a way to solve in python (I am trying Sympy currently) to solve it based on the input given? Sure I can use cases of ifs, but I will need to write 4 equations to solve and that is for a short equation.

Any suggestion is appreciated.

Kind regards, Iwan

Upvotes: 1

Views: 176

Answers (1)

smichr
smichr

Reputation: 19029

This answer to a similar question may help you. Basically you can define the general equation, get values for all but one variable, substitution them into the general equation then pass that expression to solve (or else just pass all equations to solve, which I show below):

from sympy import Eq, solve, Tuple, S
from sympy.abc import v,l,w,h
eq = Eq(v, l*w*h)
variables = eq.free_symbols
got = []
vs = ', '.join(([str(i) for i in variables]))
print('enter 3 known values of {%s} as equality, e.g. h=2' % vs)
for i in range(3):
    if 0:  # change to 1 to get real input
        e = input()
    else:
        e = ['v=20','w=5','h=1'][i]
    got.append(Eq(*[S(j) for j in e.split('=')]))
x = ({v,l,w,h} - Tuple(*got).free_symbols).pop()
ans = solve([eq]+got)
print('consistent values: %s' % ans)
print('%s = %s' % (x.name, ans[0][x])

gives

enter 3 known values of {v, h, w, l} as equality, e.g. h=2
consistent values: [{v: 20, h: 1, w: 5, l: 4}]
l = 4

Upvotes: 1

Related Questions