python - 如何在 python 中替换数学方程式中的值?

标签 python python-3.x scipy sympy

我从数据库中获取字典形式的数据:

in_dict = {"x":2,"y":"x+2","z":"y+2"}

我得到字符串形式的数学方程式:

eqn = "(x+2)*y/z"

在方程中代入值并给出最终解的最简单方法是什么?

注意:人们应该知道字典中的值是随机出现的。

最佳答案

在之前的 sympy 答案的基础上,这里有一种方法,它在 in_dict 变量的大小和内容方面是动态的。最大的一步是将 sympy 符号(x、y、z 的 python 变量)映射到它们通过 in_dict

传递的符号表示
import sympy

def eval_eqn(eqn,in_dict):
    subs = {sympy.symbols(key):item for key,item in in_dict.items()}
    ans = sympy.simplify(eqn).evalf(subs = subs)

    return ans

原始输入:

in_dict = {"x":2,"y":"x+2","z":"y+2"}
eqn = "(x+2)*y/z"
print(eval_eqn(eqn,in_dict))

2.66666666666667

一组不同的输入:

in_dict = {"a":2, "b": 4, "c":"a+2*b","d":"4*b + c"}
eqn = "c**2 + d**2"
print(eval_eqn(eqn,in_dict))

776.000000000000

关于python - 如何在 python 中替换数学方程式中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017962/

相关文章:

python - 使用 Scikit-learn 进行 RBF 拟合时出现 MemoryError

scipy - sklearn DecisionTreeClassifier 更深度更准确?

python - scipy.interpolate.interpnd 提示 'Delaunay' 对象没有属性 'simplices'

python - 在每三个空格上拆分一个字符串

python - 计算非实数数据的增量熵

python - 为什么scipy中norm.cdf比norm.pdf更快?

python - 运行神经网络代码时出现值错误

python - 无法从 App Engine 中的 FTP 服务器下载 csv 文件

python - Keithley 2410 Pymeasure NotImplementedError : Please upgrade PyVISA to version 1. 8 或更高版本

python - 查找数据框列中以字符串开头的所有元素