gpt4 book ai didi

python - 自动简化冗余算术关系

转载 作者:行者123 更新时间:2023-12-03 16:09:35 25 4
gpt4 key购买 nike

我正在寻找一种自动确定例如(a < 12) & (a < 3) & (c >= 4)(a < 3) & (c >= 4)相同的方法。我在Python中研究了Matlab的符号工具箱和SymPy,但它们显然仅能简化纯粹的 bool 逻辑(例如simplify(a & b | b & a) -> ans=(a & b))
有没有办法使用上述符号数学工具?
编辑
正如@ user12750353答案的注释中所指出的那样,我还想简化与 bool OR(例如((a < 12) & (a < 3) & (c >= 4)) | (a < 1))串联的关系系统。

最佳答案

SymPy集可用于进行单变量简化,例如((x < 3) & (x < 5)).as_set() -> Interval.open(-oo, 3)和集可以转换回关系。下面的代码将复杂的表达式转换为cnf形式,针对自由符号分隔args,并简化单变量的args,同时保持多变量参数不变。

def f(eq):
from collections import defaultdict
from sympy import to_cnf, ordered
cnf = to_cnf(eq)
args = defaultdict(list)
for a in cnf.args:
args[tuple(ordered(a.free_symbols))].append(a)
_args = []
for k in args:
if len(k) == 1:
_args.append(cnf.func(*args[k]).as_set().as_relational(k[0]))
else:
_args.append(cnf.func(*args[k]))
return cnf.func(*_args)
例如:
>>> from sympy.abc import a, c
>>> f((a < 1) | ((c >= 4) & (a < 3) & (a < 12)))
(a < 3) & ((c >= 4) | (a < 1))

关于python - 自动简化冗余算术关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66714568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com