Как я могу численно решить уравнение с Sympy? - PullRequest
0 голосов
/ 18 апреля 2020

Меня интересует одно решение, а не все. В качестве примера возьмем

# Circle with radius 3, infinitely many solutions
x^2 + y^2 = 9

. Есть два хороших решения, потому что значения являются целыми числами (x = 3, y = 0 и x = 0, y = 3), но я бы согласился с любым решением .

То, что я пытался

from sympy import nsolve, Eq, symbols

x, y = symbols("x y")
eq = Eq(x**2 + y**2, 9)
print(nsolve(eq, [x, y], [0, 0]))

, но я получаю

ValueError: expected a one-dimensional and numerical function

Я также пытался

print(nsolve([eq], [x, y], [0, 0]))

, но получил

NotImplementedError: need at least as many equations as variables

Симпи не может делать то, что я хочу?

1 Ответ

0 голосов
/ 18 апреля 2020

Я не уверен, хотите ли вы произвольную точку для произвольной функции (в этом случае вы можете заменить все точки, кроме одной, произвольными точками)

>>> from random import randint
>>> xi = 1/randint(1, 10)
>>> yi = nsolve(eq.subs(x, xi), 0)
>>> (xi, yi)
(0.5, 2.95803989154981)

Или, если у вас есть второе отношение, которое Вы хотите удерживать значение от x до y, тогда вы можете использовать это с nsolve, например, вы хотите, чтобы x был в два раза больше y:

>>> nsolve((eq, x - 2*y), (x, y), (0, 1))
Matrix([
[2.68328157299975],
[1.34164078649987]])

Или, может быть, вам нужна произвольная точка на окружности:

>>> from sympy.abc import t
>>> from sympy import Circle
>>> Circle(eq)
Circle(Point2D(0, 0), 3)
>>> _.arbitrary_point(t)
Point2D(3*cos(t), 3*sin(t))
>>> pt = _

Итак, pt - произвольная однопараметрическая точка для этой окружности. Чтобы увидеть значения x, y для данного параметра, подставьте значение:

>>> ti = 1/randtint(1,100); ti
0.021739130434782608
>>> pt.subs(t, ti)
Point2D(299929114322911/100000000000000, 40757659112601/625000000000000)
>>> _.n()
Point2D(2.99929114322911, 0.0652122545801616)
>>> _.args
(2.99929114322911, 0.0652122545801616)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...