如何绘制极性微分方程的相平面

2024-06-16 14:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用极限圆画出一些相平面。我有极坐标形式的微分方程:

drdt=r(r^2-1)dθdt=1

有没有一种方法可以使用matplotlib从中绘制它们?通过使用原始系统,我能够绘制出一个我拥有原始系统形式的图,如下所示:

xvalues, yvalues = np.meshgrid(np.arange(-2, 2, 0.1), np.arange(-2, 2, 0.1))
xdot = xvalues + yvalues - xvalues * (xvalues ** 2 + yvalues ** 2)
ydot = -xvalues + yvalues - yvalues * (xvalues ** 2 + yvalues ** 2)


plt.streamplot(xvalues, yvalues, xdot, ydot)
plt.grid(); 
plt.show()

这个系统是 dxdt=x+y-x(x^2+y2) dydt=-x+y-y(x^2+y2) 其极性形式为: drdt=r(1-r^2)dθdt=1

但是,如果可能的话,将它们全部隐藏到原来的系统中是很乏味的。谢谢你给我的任何帮助

更新

所以我想出了一个方法,它非常接近于,用scipy解一个初始半径范围内的微分,然后用转换公式在X,Y上作图

    times = np.linspace(0, 10)
    r0s = np.arange(0, 3, 0.2)
    for r0 in r0s:
        z0 = [r0, r0] 
        solution = odeint(rmodel, z0, times)
        x = solution[:,0] * np.cos(solution[:,1])
        y = solution[:,0] * np.sin(solution[:,1])
        plt.plot(x, y)

现在这已经足够好了,但我真的想要一个更好的解决方案


Tags: 方法系统npdt绘制plt形式solution
1条回答
网友
1楼 · 发布于 2024-06-16 14:24:57

所以我想出了一个方法,它非常接近于,用scipy解一个初始半径范围内的微分,然后用转换公式在X,Y上作图

    times = np.linspace(0, 10)
    r0s = np.arange(0, 3, 0.2)
    for r0 in r0s:
        z0 = [r0, r0] 
        solution = odeint(rmodel, z0, times)
        x = solution[:,0] * np.cos(solution[:,1])
        y = solution[:,0] * np.sin(solution[:,1])
        plt.plot(x, y)

这对我来说已经足够好了

相关问题 更多 >