我正在try 使用matplotlib绘制该函数.

Desmos version

正如您在Desmos应用程序中看到的那样,公式正确地将函数绘制为圆,但当我try 将其移植到Python时,我得到了以下结果:

import numpy as np
import matplotlib.pyplot as plt

def fungsi_r4(theta, theta0, r0, a):
  return r0 * np.cos(theta - theta0) + np.sqrt((a ** 2) - (r0 ** 2) * (np.sin(theta - theta0) ** 2))

theta = np.linspace(0, 2 * np.pi, 100)
r = fungsi_r4(theta, 2.4, 5.1, 2.6)

ax = plt.subplot(projection='polar')
ax.plot(theta, r)

Python version

我的感觉告诉我,这与函数返回的负值有关,但我不知道如何处理它.

推荐答案

不同之处在于这两个程序处理负半径的方式:Desmos将它们翻转回原点,而matplotlib将径向刻度扩展到负数.

下面是一些修改数据点的代码,就像Desmos所做的那样:

def flip_negative_radii(theta, r):
    flip_mask = r < 0
    r[flip_mask] *= -1
    theta[flip_mask] = (theta[flip_mask] - np.pi) % (2*np.pi)
    return theta, r

用法示例:

import numpy as np
import matplotlib.pyplot as plt

def fungsi_r4(theta, theta0, r0, a):
    return r0 * np.cos(theta - theta0) + np.sqrt((a ** 2) - (r0 ** 2) * (np.sin(theta - theta0) ** 2))

theta = np.linspace(0, 2 * np.pi, 100)
r = fungsi_r4(theta, 2.4, 5.1, 2.6)

ax = plt.subplot(projection='polar')
ax.plot(*flip_negative_radii(theta, r))
plt.show()

enter image description here

差距是由于平方根中的项变为负值并产生NaN.如果可能的话,我会试着想出函数的参数表示,这样可以避免这两个问题.

Python相关问答推荐

单击Cookie横幅错误并在Selenium中启用搜索栏

计算每月过go x年的平均值

如何使用scikit-learn Python库中的Agglomerative集群算法以及集群中声明的对象数量?

键盘.任务组

如何在矩阵上并行化简单循环?

使用Beautiful Soup获取第二个srcset属性

Python无法在已导入的目录中看到新模块

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

分组数据并删除重复数据

Pydantic 2.7.0模型接受字符串日期时间或无

时间序列分解

更改键盘按钮进入'

如何在solve()之后获得症状上的等式的值

导入...从...混乱

Pandas Loc Select 到NaN和值列表

如何更新pandas DataFrame上列标题的de值?

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

寻找Regex模式返回与我当前函数类似的结果

Python—转换日期:价目表到新行

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?