sympy.line.equation()
同样的价值和类型,但有什么区别呢?“
我怎么才能修好它?
z1和z2有什么区别?
from sympy import *
var('x y z1 z2')
z1=8*x+6*y+48
print("#z1",z1,type(z1))
z2=Line(Point(-6,0),Point(0,-8)).equation()
print("#z2",z2,type(z2))
if type(z1)==type(z2):
print("#","type==")
else:
print("#","type<>")
if z1==z2:
print("#","==")
else:
print("#","<>")
#z1 8*x + 6*y + 48 <class 'sympy.core.add.Add'>
#z2 8*x + 6*y + 48 <class 'sympy.core.add.Add'>
# type==
# <>我尝试在30分钟前添加.expand().simplify()
from sympy import *
var('x y')
print("#z1#",solve(8*x+6*y+ 48 ,y))
print("# ", Line(Point(-6,0),Point(0,-8)).equation().expand().simplify() )
print("#z2#",solve(Line(Point(-6,0),Point(0,-8)).equation().expand().simplify(),y))
#z1# [-4*x/3 - 8]
# 8*x + 6*y + 48
#z2# []谢谢。
from sympy import *
var('x y')
print("#z1#",solve(8*x+6*y+ 48 ,y))
print("# ", Line(Point(-6,0),Point(0,-8)).equation() )
print("#z2#",solve(sympify(str(Line(Point(-6,0),Point(0,-8)).equation())),y))
#z1# [-4*x/3 - 8]
# 8*x + 6*y + 48
#z2# [-4*x/3 - 8]发布于 2022-07-16 10:41:11
当您不告诉equation要使用哪些符号时,它就会创建自己的符号x和y,并附带适合于一条直线(即真实的)的假设。当您使用var创建符号时,符号创建时只使用可交换的假设。有不同假设的符号不相等。
>>> from sympy import Line, oo
>>> Line((0,0),slope=oo).equation()
x
>>> _._assumptions
{'real': True, 'commutative': True, 'infinite': False, 'extended_real': True,
'hermitian': True, 'complex': True, 'imaginary': False, 'finite': True}
>>> var('x')
x
>>> _._assumptions
{'commutative': True, 'zero': None}
>>> Line((0,0),slope=oo).equation(x) # supply value of x to use
x
>>> _ == x
True
>>> Line((0,0),slope=oo).equation() == x # no default given
FalseSo...if --您想要比较由Line构建的表达式和您自己构建的表达式--使用相同的符号(即向Line.equation提供默认值)。否则,隐藏的假设会引起问题。
>>> from sympy.abc import y
>>> Line(Point(-6,0),Point(0,-8)).equation(x,y)
8*x + 6*y + 48
>>> _==8*x + 6*y + 48
True发布于 2022-07-16 09:51:39
等式运算符(==)在SymPy中测试表达式是否具有相同的形式,而不是它们是否是数学上等效的。
如果您想确定非平凡表达式的数学等价性,则应该对方程的两边应用更高级的简化例程。在多项式的情况下,通过完全展开,可以将表达式重写为规范形式。这是使用.expand()方法在SymPy中完成的--在您的示例中:
print(bool(z1.expand()==z2.expand()))或
print((z1-z2).expand())在第一种情况下,对于等价表达式,将得到True。在第二种情况下,如果表达式是等价的,则得到0(零)。但是,您将使用False和8_x - 8_x - 6_y + 6_y代替.
如果您尝试使用simplify()来尝试更高级的转换,那么您将得到相同的结果:
print(simplify(z1-z2))这意味着表达式具有相同的类型和“值”,但在数学上并不等价于。详见这里。
https://stackoverflow.com/questions/73002593
复制相似问题