3

我目前正在尝试r = 4 * sin(2 * theta)使用 matplotlib 绘制极平面中的方程,基于链接的示例。这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
from math import sin, pi

def plot_polar(f, start=0, end=2*pi):
    theta = np.linspace(start, end, 1000)
    r = map(f, theta)

    ax = plt.subplot(111, polar=True)
    ax.plot(theta, r)
    ax.grid(True)

    plt.show()

plot_polar(lambda theta: 4 * sin(2 * theta))

这将产生以下输出:

不正确

然而,根据 Wolfram Alpha 的说法,正确的图表如下所示:

正确的

我的代码似乎缺少图表的很大一部分——它只有两个花瓣,而不是四个。我确保在 theta 从 0 到 2pi 时绘制两个方程,因此它们应该显示相同的内容。

有人知道我做错了什么吗?我不确定我是否只是误解了如何使用 matplotlib,或者我是否遗漏了一些明显的错误。

4

3 回答 3

2

看起来 matplotlib 令人窒息,因为你给它一个负数作为半径。

我尝试了您的代码并得到了相同的结果。我改变了你的线路

r = map(f, theta)

成为

r = map(abs(f), theta)

并得到了这个情节:

径向图

如果你问我,Wolfram 的“极地情节”有点误导。它的结构肯定不像 matplotlib 版本。

于 2014-04-21T21:42:15.203 回答
1

我运行了相同的确切代码并得到了这个。也许检查你的 numpy 和 matplotlib 版本。

>>> import numpy as np
>>> np.version.version
'1.7.1'
>>> import matplotlib
>>> matplotlib.__version__
'1.1.1'

在此处输入图像描述

于 2014-04-21T21:29:09.617 回答
-1

我认为极坐标函数的轨迹也存在问题。它应该跟踪 (x pos, y pos) 象限中的线,然后是 (xpos,yneg),到 (xneg, yneg),最后是 (xneg, ypos) 象限。

这就是这些情节背后的概念,它导致了人们理解物体在太空中的旅行。如果您将函数设置为 r = sin(4*theta),您将得到类似于 Wolfram 图的图。

从概念上讲,绘制极坐标图似乎存在问题,即使是在极坐标图上,并以笛卡尔坐标结尾。我怀疑对 f 的 abs 调用对问题进行了排序,但掩盖了您正在绘制反转的 r 值,从而使其成为不连续的函数,而事实并非如此。

就物体的运动关系而言,似乎类似于重力倒转!!

于 2014-10-02T06:59:40.487 回答