如何在方程式中找到特定变量但使用减法

时间:2017-05-04 19:04:33

标签: python sympy

因此,通过在线搜索,我找到了一个运行良好的程序,并将当前代码减少了80多行。

import sympy as sp    

P, V, n, R, T = sp.symbols('P V n R T')
IDEAL_GAS_EQUATION = P*V - n*R*T   

def f(x, values_dct, eq_lst):
    lst = []
    lst += eq_lst
    for i, j in values_dct.items():
        lst.append(sp.Eq(i, j))
    try:
        return sp.solve(lst)[0][x]
    except IndexError:
        print('This equation has no solutions.')

-用作等号。我实际上有一些函数包括加法和减法,并且在我的实验中,在第一个被反转之后的任何+-符号,而不是添加它减去,反之亦然。有没有办法解决这个问题并不能让我完全把这个代码分开? 我如何修改这个程序就是这样。

from sympy import symbols, Eq, solve
# declaring symbols
V, I, Ω = symbols('V A Ω')
# declaring equations
ohms_law = V - I*Ω
# list of all equations
equ_lst = [ohms_law]
# list of all vars
var_lst = [V, I, Ω]
# dictionary that stores vars and their values
var_dict = {}
# solving function
def f(x, values_dct, eq_lst):
    lst = []
    lst += eq_lst
    for i, j in values_dct.items():
        lst.append(Eq(i, j))
    try:
        return solve(lst)[0][x]
    except IndexError:
        print('This equation has no solutions.')
# getting known variables
for key in var_lst:
  tempvar1 = input(str(key) + ': ')
  if tempvar1 != '':
    var_dict[key] = tempvar1
  print (var_dict)
# Solve for unknown variables
for key in var_lst:
  if key not in var_dict:
    f(key, var_dict, equ_lst)

据我所知,这个特定的程序不会包含一个包含负数的等式,但是另一个尚未修改但尚未使用此函数的程序具有这样的等式。我该如何支持这一步或者我必须制作一个新功能?

1 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我,但你有PV-nRT这样表达,因为你需要表达式等于零才能使用solve()? 一般来说,我们说PV = nRT,但减去nRT会留下PV - nRT = 0,看起来你已经为欧姆定律做了同样的事情。

因此,我的观察并不是因为你使用“ - ”作为“=”,而是你将一个等式重新排列为等于零。 即使用属性a = b iff a-b = 0

我是否正确陈述您的问题,建议您不能重新排列等式,使得f(x,y,z)= 0?我相信你不能用solve()来解决一个不等于零的方程。

否则,这应该是一个理想的解决方案,您可以使用与您所示相同的方法。如果您分享您想要使用的等式,我们可能会提供帮助。