所以我从一个等式和一个分数开始,我用它来解决x和y:
mrs = y/x
ratio = 2/5
x = sympy.solveset(sympy.Eq(mrs, ratio), x)
y = sympy.solveset(sympy.Eq(mrs, ratio), y)
最后,解决y回报:
{2*x/5}
哪个是FiniteSet
但是解决x返回:
{5*y/2} \ {0}
哪个是补语
我不明白为什么解决一个变量给我一个有限集合,当解决另一个不做同样的事情时?另外,是否有办法解决其他变量以获得FiniteSet而不是Complement?
答案 0 :(得分:1)
您对结果有何看法?你能用手解决这个问题并编写预期的解决方案吗?为什么你想要一个FiniteSet作为解决方案?
由于x=0
需要被排除在外,我自己无法提出一个比同情更好的符号。
当您继续使用解决方案时,sympy可以轻松地使用FiniteSet和Complement。在数学上,这些并不是完全不同的结构。不同之处在于,sympy需要在内部代表这些解决方案,并且不能对所有内容使用相同的构造,而是使用小构建块来创建解决方案。使用type(x)
获得的结果是使用的最后一个构建块。
编辑:这里有一些数学:x=0
无法解决任何y/x=2/5
的等式y
。所以这必须从解决方案集中排除。
如果您解决y
,则x=0
已被排除,因为y/0
定义不明确。
如果您解决y
,那么y=0
可能是先验的,因为0/x=0
来自x!=0
。因此,需要手动排除x=0
,这样做会从解决方案集中移除0
。
现在,既然我们知道x=0
永远不能成为方程的解,我们可以在尝试求解方程之前将其排除。因此,我们
x = sympy.symbols('x', real=True, nonzero=True)
就在示例的开头(在mrs的定义之前)。其余的可以保持不变。