首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >请告诉我关于line.equation()的事情

请告诉我关于line.equation()的事情
EN

Stack Overflow用户
提问于 2022-07-16 08:07:37
回答 2查看 34关注 0票数 0

sympy.line.equation()

同样的价值和类型,但有什么区别呢?“

我怎么才能修好它?

z1和z2有什么区别?

代码语言:javascript
复制
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()

代码语言:javascript
复制
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# []

谢谢。

代码语言:javascript
复制
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]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-16 10:41:11

当您不告诉equation要使用哪些符号时,它就会创建自己的符号xy,并附带适合于一条直线(即真实的)的假设。当您使用var创建符号时,符号创建时只使用可交换的假设。有不同假设的符号不相等。

代码语言:javascript
复制
>>> 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
False

So...if --您想要比较由Line构建的表达式和您自己构建的表达式--使用相同的符号(即向Line.equation提供默认值)。否则,隐藏的假设会引起问题。

代码语言:javascript
复制
>>> 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
票数 0
EN

Stack Overflow用户

发布于 2022-07-16 09:51:39

等式运算符(==)在SymPy中测试表达式是否具有相同的形式,而不是它们是否是数学上等效的

如果您想确定非平凡表达式的数学等价性,则应该对方程的两边应用更高级的简化例程。在多项式的情况下,通过完全展开,可以将表达式重写为规范形式。这是使用.expand()方法在SymPy中完成的--在您的示例中:

代码语言:javascript
复制
print(bool(z1.expand()==z2.expand()))

代码语言:javascript
复制
print((z1-z2).expand())

在第一种情况下,对于等价表达式,将得到True。在第二种情况下,如果表达式是等价的,则得到0(零)。但是,您将使用False和8_x - 8_x - 6_y + 6_y代替.

如果您尝试使用simplify()来尝试更高级的转换,那么您将得到相同的结果:

代码语言:javascript
复制
print(simplify(z1-z2))

这意味着表达式具有相同的类型和“值”,但在数学上并不等价于。详见这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73002593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档