绘制受简单圆形轨道影响的流场 - 双曲吸引子,在极坐标中给出,在笛卡尔坐标系中 - Python
Plotting flow field influenced by a simple circular orbit - hyperbolic attractor, given in polar coordinates, in Cartesian coordinate system - Python
对于一个项目,我可能已经忍无可忍了,不得不像标题所说的那样绘制示例中给出的流场或矢量场:
The vector field I need to create, no need for the colours...
极坐标示例中给出的该系统的动力学是:
r' = 5 * r^2 * (1-r) 和 φ' = r
系统有一个半径为1的圆形周期轨道,以origin.The为中心的轨道是一个双曲吸引子,B = R^2 \ {(0, 0)}。周期为 T = 2π,渐近相位由 θ(r, φ) = φ − 1/5r + 0.2 给出。
As given on page 1511 of this 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()
现在,这个 returns 一个糟糕的箭袋图,老实说,我什至不知道我的方向是否正确。有人愿意解释如何正确解决这个问题,这样即使像我这样的白痴也能理解吗?请。我是否将它作为一个函数输入并对其进行流图绘制,我会在从极坐标转换为笛卡尔坐标之前或之后定义它吗?我的数学正确吗?
我认为 rotation matrix 在笛卡尔坐标系中获取矢量场的方法搞砸了:
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()
向量在图中也被标准化,因此它们都具有相同的大小
对于一个项目,我可能已经忍无可忍了,不得不像标题所说的那样绘制示例中给出的流场或矢量场: The vector field I need to create, no need for the colours...
极坐标示例中给出的该系统的动力学是: r' = 5 * r^2 * (1-r) 和 φ' = r
系统有一个半径为1的圆形周期轨道,以origin.The为中心的轨道是一个双曲吸引子,B = R^2 \ {(0, 0)}。周期为 T = 2π,渐近相位由 θ(r, φ) = φ − 1/5r + 0.2 给出。
As given on page 1511 of this 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()
现在,这个 returns 一个糟糕的箭袋图,老实说,我什至不知道我的方向是否正确。有人愿意解释如何正确解决这个问题,这样即使像我这样的白痴也能理解吗?请。我是否将它作为一个函数输入并对其进行流图绘制,我会在从极坐标转换为笛卡尔坐标之前或之后定义它吗?我的数学正确吗?
我认为 rotation matrix 在笛卡尔坐标系中获取矢量场的方法搞砸了:
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()
向量在图中也被标准化,因此它们都具有相同的大小