Возвращая r при разных значениях тета с помощью numpy - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно сгенерировать таблицу, основанную на том, что r равно при различных значениях тета.

Я легко смог построить график и показать уравнение с помощью matplotlib, и надеялся, что есть простой способ:

дать numy переменную тета, мое уравнение кривой и альт, вернуть значение r

Я пытался просмотреть документацию numpy, но мне трудно найти то, что мне нужно.

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

mpl.style.use('default')

# Number of Points Ploted
# Change this numer to affect accuracy of the graph
n = 3000

theta = np.linspace(0, 2.0*np.pi, n)

def show_grid():
  plt.grid(True)
  plt.legend()
  plt.show()

# Setting the range of theta to [0, 2π] for this specific equation
theta4 = np.linspace(0, 2*np.pi, n)

# Writing the equation
curve4 = 5*np.cos(64*theta)

ax1 = plt.subplot(111, polar=True)
ax1.plot(theta4, curve4, color='xkcd:cyan', label='CURVE 4: r = 5cos(64θ), [0, 2π)')
ax1.set_ylim(0,5)
ax1.set_yticks(np.linspace(0,5,6))
show_grid()

Приведенный выше код хорошо создает график, но:

Могу ли я использовать те же переменные для возврата r в тета?

1 Ответ

0 голосов
/ 22 апреля 2019

Обычно не гарантируется, что массив тэта-значений действительно содержит значение, которое вы хотите запросить.В качестве примера рассмотрим

theta = np.array([1,2,3,4])
r = np.array([8,7,6,5])

Теперь вы хотите узнать значение r в theta0 = 2.5, но, поскольку это значение не является частью theta, оно не имеет соответствующего значения в r.

Таким образом, вы можете решить найти значение r в тэте, которое следует после theta0, в этом случае 3 - это следующее значение в тета после 2,5, поэтому вы можете искать r == 6,

theta0 = 2.5
print(r[np.searchsorted(theta, theta0)])   # prints 6

Или, возможно, вы захотите интерполировать значения r на тета, в этом случае 2,5 находится на полпути между 2 и 3, поэтому вы ищете 6,5, что на полпути между 7 и 6,

theta0 = 2.5
print(np.interp(theta0, theta, r))    # prints 6.5

Или, в более общем смысле, у вас есть фактическая функция, которая определяет r(theta).Здесь

theta = np.array([1,2,3,4])
rf = lambda x: -x + 9

r = rf(theta)
print(r)                              # prints [8,7,6,5]

print(rf(theta0))                     # prints 6.5

Последний случай для вашего примера будет выглядеть как

theta = np.linspace(0, 2*np.pi, 3001)

# Writing the equation
r = lambda theta: 5*np.cos(64*theta)

ax1 = plt.subplot(111, polar=True)
ax1.plot(theta, r(theta), label='CURVE 4: r = 5cos(64θ), [0, 2π)')

print(r(np.pi/2))  # prints 5

plt.show()
...