Построение поля потока под влиянием простой круговой орбиты - гиперболического аттрактора, заданного в полярных координатах, в декартовой системе координат - Python - PullRequest
0 голосов
/ 28 августа 2018

Я, возможно, откусил больше, чем могу прожевать для проекта, и мне, как указано в заголовке, нужно нарисовать поле потока или векторное поле, как показано в примере: Векторное поле, которое мне нужно создать, цвета не нужны ...

Динамика этой системы, приведенная в примере с полярными координатами: r '= 5 * r ^ 2 * (1-r) и φ' = r

Система имеет круговую периодическую орбиту с радиусом 1 и центрирована в начале координат. Орбита представляет собой гиперболический аттрактор с B = R ^ 2 \ {(0, 0)}. Период равен T = 2π, а асимптотическая фаза задается точно как θ (r, φ) = φ - 1 / 5r + 0,2.

Как указано на стр. 1511 настоящего документа PDF

Так вот, я уже несколько дней гуглю что-то похожее, но, похоже, не могу правильно определить орбиту, и все, что я нахожу, это учебники по планетарным орбитам или аттрактор Лоренца. Лучшее, что мне удалось придумать, это:

import numpy as np
import matplotlib.pyplot as plt

x, y = np.mgrid[2:-2:20j, 2:-2:20j]

r = np.sqrt(x**2 + y**2)
phi = np.arctan(y/x)

dr = 5*(r**2)*(1-r)
dphi = r

dx = (5*(r**2)*(1-r)*np.cos(phi)) - ((r**2)*np.sin(phi))
dy = (5*(r**2)*(1-r)*np.cos(phi)) + ((r**2)*np.sin(phi))

fig, ax = plt.subplots()
ax.quiver(x, y, dx, dy)
ax.set(aspect=1, title='NOT GOOD', xlabel='X', ylabel='Y')

plt.show()

Теперь, это возвращает плохой сюжет колчана, и я, честно говоря, не знаю, иду ли я даже в правильном направлении. Кто-нибудь захочет объяснить, как правильно решить эту проблему, чтобы даже такой придурок, как я, мог понять? Пожалуйста. Введу ли я его в качестве функции и выполнил ли это, я бы определил его до или после преобразования из полярности в декартову? Правильна ли моя математика?

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что матрица вращения для получения векторного поля в декартовых координатах была испорчена:

import numpy as np
import matplotlib.pyplot as plt

x, y = np.mgrid[2:-2:20j, 2:-2:20j]

r = np.sqrt(x**2 + y**2)
phi = np.arctan2(y, x)

dr = 5*(r**2)*(1-r)
dphi = r

dx = dr*np.cos(phi) - dphi*np.sin(phi)
dy = dr*np.sin(phi) + dphi*np.cos(phi)

norm_dr = np.sqrt(dx**2 + dy**2)

fig, ax = plt.subplots()
ax.quiver(x, y, dx/norm_dr, dy/norm_dr)
ax.set(aspect=1, title='GOOD?', xlabel='X', ylabel='Y')

plt.show()

векторы также нормированы на графике, поэтому все они имеют одинаковый размер

result graph

...