sympy решить круг пересечения линии ---> почему AttributeError: объект 'tuple' не имеет атрибута 'subs' - PullRequest
0 голосов
/ 06 мая 2020

Заранее спасибо и извините за плохой Engli sh!

#sympy solve intersection line circle---> AttributeError: 'tuple' object has no attribute 'subs'
from sympy import *
var('v0 x y x0 y0 r a b c')
v=solve([(x-x0)**2+(y-y0)**2-r**2,a*x+b*y+c],[x,y])
print(v[0].subs({x0:3.0,y0:2.0,r:5.0,aa:3.0,bb:2.0,cc:-16.0}))
print(v[1].subs({x0:3.0,y0:2.0,r:5.0,aa:3.0,bb:2.0,cc:-16.0}))
# Traceback (most recent call last):
#   File ""C:/xxx.py"", line 4, in <module>"
#     print(v[0].subs({x0:3.0,y0:2.0,r:5.0,aa:3.0,bb:2.0,cc:-16.0}))
# AttributeError: 'tuple' object has no attribute 'subs'

1 Ответ

1 голос
/ 06 мая 2020

Результат вызова, поэтому solve таким образом представляет собой список кортежей - Python кортежей - которые не понимают subs. Но если вы конвертируете их в Tuple, они будут:

>>> from sympy import Tuple
>>> Tuple(*v[0]).subs({x0:3.0,y0:2.0,r:5.0,a:3.0,b:2.0,c:-16.0})
(6.42713674378941, -1.64070511568412)

Знаете ли вы, что вы можете определять геометрические c объекты с помощью SymPy и находить их пересечения?

>>> from sympy import Circle, Line
>>> Circle((3,2),5).intersection(Line(3*x+2*y-16))
[Point2D(48/13 - 4*sqrt(79)/13, 32/13 + 6*sqrt(79)/13),
 Point2D(4*sqrt(79)/13 + 48/13, 32/13 - 6*sqrt(79)/13)]
>>> [i.n(2) for i in _]
[Point2D(0.96, 6.6), Point2D(6.4, -1.6)]

Этот второй пункт должен показаться знакомым: -)

...