Решение 1 уравнения на основе входной переменной - PullRequest
0 голосов
/ 12 января 2020

Например, объем прямоугольной ячейки angular можно рассчитать как V = L * W * H

Предположим, что мы знаем V, L, W, тогда мы можем решить для H.

Предположим, что мы знаем V, H, W, тогда мы можем решить для V.

Предположим, что мы знаем L, W, H, тогда мы можем найти для V. И др. c

Есть ли способ решить в python (я сейчас пробую Sympy), чтобы решить его на основе заданного ввода? Конечно, я могу использовать случаи ifs, но мне нужно написать 4 уравнения, чтобы решить, и это для короткого уравнения.

Любые предложения приветствуются.

С уважением, Иван

1 Ответ

0 голосов
/ 12 января 2020

Этот ответ на аналогичный вопрос может вам помочь. По сути, вы можете определить общее уравнение, получить значения для всех, кроме одной переменной, подставить их в общее уравнение, а затем передать это выражение для решения (или просто передать все уравнения для решения, которые я покажу ниже):

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

дает

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