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
的值,这样它就会给出像第二行一样的答案。
问题是
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