Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用同情简化简单的不平等_Python_Math_Sympy_Inequalities - Fatal编程技术网

Python 用同情简化简单的不平等

Python 用同情简化简单的不平等,python,math,sympy,inequalities,Python,Math,Sympy,Inequalities,假设我知道x比y大,x和y都大于0 有人能帮我写一个函数,它只接受两个线性公式+/-,然后返回哪个更大的公式吗 例如: foo("x+y","2*x") #should return 2 foo("2*x","x+y") #should return 1 foo("x","2*y") #should return 0 (can't decide) 非常感谢 在SymPy中实现这一点的最佳方法是使用假设系统 首先,不要尝试进行标记化。如果必须以字符串形式输入,只需使用sympify,如果不需要,

假设我知道x比y大,x和y都大于0

有人能帮我写一个函数,它只接受两个线性公式+/-,然后返回哪个更大的公式吗

例如:

foo("x+y","2*x") #should return 2
foo("2*x","x+y") #should return 1
foo("x","2*y") #should return 0 (can't decide)

非常感谢

在SymPy中实现这一点的最佳方法是使用假设系统

首先,不要尝试进行标记化。如果必须以字符串形式输入,只需使用sympify,如果不需要,只需使用符号创建表达式,如

x, y = symbols('x y')
a = x - y
b = 2*x
有关更多信息,请阅读

假设系统还不直接支持不等式,所以要表示x>y,需要声明x-y为正。若要询问2*x>x-y,即如果2*x-x-y为正,假设x、y和x-y为正,请执行以下操作:

In [27]: ask(Q.positive((2*x) - (x - y)), Q.positive(x) & Q.positive(y) & Q.positive(x - y))
Out[27]: True
第一个要问的论点是你在问什么,第二个论点是你在假设什么是逻辑和,所以Q.positivex&Q.positivey&Q.positivex-y意味着假设所有这三件事

如果它知道它是假的,它将返回False;如果它不能确定,则返回None。请注意,SymPy在一个复杂的域中工作,所以不积极并不一定意味着消极。因此,如果没有得到否定表达式,您可能也应该调用ask,或者用否定而不是肯定再次调用它。如果要包含0,即使用>=而不是>,请使用非负而不是正,使用非正而不是负


它还没有那么聪明,所以当你知道答案的时候,你会得到很多“无”。特别是,我认为在这一点上它不会很好地使用x>y事实

参数是否应该是foo'x1+x2'、'2*x1'之类的字符串?@zhangxaochen:在Python中的含义相同。@hivert np在OP编辑之前;我已经修正了:-这是相当抽象的,x1是否表示x^1?此外,x1+x2谁可以小于2x1?