因此,通过在线搜索,我找到了一个运行良好的程序,并将当前代码减少了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)
据我所知,这个特定的程序不会包含一个包含负数的等式,但是另一个尚未修改但尚未使用此函数的程序具有这样的等式。我该如何支持这一步或者我必须制作一个新功能?
答案 0 :(得分:1)
如果我错了,请纠正我,但你有PV-nRT这样表达,因为你需要表达式等于零才能使用solve()
?
一般来说,我们说PV = nRT,但减去nRT会留下PV - nRT = 0,看起来你已经为欧姆定律做了同样的事情。
因此,我的观察并不是因为你使用“ - ”作为“=”,而是你将一个等式重新排列为等于零。
即使用属性a = b iff a-b = 0
我是否正确陈述您的问题,建议您不能重新排列等式,使得f(x,y,z)= 0?我相信你不能用solve()
来解决一个不等于零的方程。
否则,这应该是一个理想的解决方案,您可以使用与您所示相同的方法。如果您分享您想要使用的等式,我们可能会提供帮助。