如何访问方程中的变量 x 和 y [已关闭]

问题描述 投票:0回答:1
from sympy import symbols, Eq, solve, Circle, Point, latex, simplify, sympify
x, y = symbols('x y')
m = Circle(Point(0, 0), Point(1, 0), Point(0, 2))
dt = m.equation()
dt = dt.subs(x,2)
print(dt)

答案应该是这样的

k=(x - 1/2)**2 + (y - 1)**2 - 5/4
k = k.subs(x, 2)
print(k)

我尝试复制 sympy lib 中的整个块,但它对“_symbol”感到困惑。

dt
的类型是
<class 'sympy.core.add.Add'>
但是当打开lib时,我找不到
sympy.core.add.Add

我希望更改方程内

x
y
的值,这样它就会给出像第二行一样的答案。

geometry sympy equation
1个回答
0
投票

问题是

x
和来自天真的
y
Circle.equation()
不是同一个符号,您应该传入您想要的符号

>>> dt.free_symbols
{y, x}
>>> [sym is x for sym in dt.free_symbols]
[False, False]

传入符号

>>> f = m.equation(x,y)  # quick access to docs via help(m.equation)
>>> f
(x - 1/2)**2 + (y - 1)**2 - 5/4
>>> f.subs({x:2, y:3})
5
>>> [sym is x for sym in f.free_symbols]
[False, True]

或者从中提取它们(丑陋)

>>> f = m.equation()
>>> f.free_symbols
{y, x}
>>> smb = {str(sym): sym for sym in f.free_symbols}
>>> smb
{'y': y, 'x': x}
>>> f.subs({smb["x"]:2, smb["y"]:3})
5

最后,你可以使用lambdaify它

>>> from sympy import lambdify
>>> f = m.equation()
>>> fn = lambdify(sorted(f.free_symbols, key=str), f)
>>> fn(x=1, y=3)
3.0
>>> fn(x=2, y=3)
5.0
© www.soinside.com 2019 - 2024. All rights reserved.