используя arctan / arctan2 для построения графика от 0 до 2π

Я пытаюсь повторить сюжет в «Орбитальной механике» Кертиса, но я просто могуне совсем понял. Тем не менее, я сделал главный путь, переключившись наnp.arctan2 от .np.arctan

Может быть, я реализуюarctan2 неправильно?

import pylab
import numpy as np

e = np.arange(0.0, 1.0, 0.15).reshape(-1, 1)

nu = np.linspace(0.001, 2 * np.pi - 0.001, 50000)
M2evals = (2 * np.arctan2(1, 1 / (((1 - e) / (1 + e)) ** 0.5 * np.tan(nu / 2) -
           e * (1 - e ** 2) ** 0.5 * np.sin(nu) / (1 + e * np.cos(nu)))))

fig2 = pylab.figure()
ax2 = fig2.add_subplot(111)

for Me2, _e in zip(M2evals, e.ravel()):
    ax2.plot(nu.ravel(), Me2, label = str(_e))

pylab.legend()
pylab.xlim((0, 7.75))
pylab.ylim((0, 2 * np.pi))
pylab.show()

На изображении ниже появляются разрывы. Предполагается, что функция должна быть плавной и соединяться при 0 и 2 пи в диапазоне y (0, 2pi), не касаясь 0 и 2pi.

Учебник сюжет и уравнение:

По просьбе Сулло Кастро мне сказали, что:

Проблема может заключаться в функции арктана, которая дает "Основные ценности » в качестве вывода.

Таким образом, arctan (tan (x)) не дает x, если x является углом во втором или третьем квадранте. Если вы построите график arctan (tan (x)) от x = 0 до x = Pi, вы обнаружите, что он имеет скачкообразный скачок при x = Pi / 2.

В вашем случае вместо написания arctan (arg), я полагаю, вы бы написали arctan2 (1, 1 / arg), где arg - аргумент вашей функции arctan. Таким образом, когда arg становится отрицательным, arctan2 даст угол во втором квадранте, а не в четвертом. "

 user62913217 мая 2013 г., 22:54
Я согласен с @ tom10, это похоже на случай неуместного закрытия парен. Или два.
 tom1017 мая 2013 г., 19:27
отличный! обратите внимание, что в уравнении из учебника арктан находится только над первым слагаемым, а не над всем уравнением.
 tom1017 мая 2013 г., 19:02
Чтобы правильно использовать arctan2, вам нужно уравнение для x и уравнение для y. Весь смысл arctan2 состоит в том, что отношение y / x неоднозначно относительно квадранта: - / - == + / + и - / + == +/-. Если вы введете y в качестве константы, вы все равно сможете занимать только два квадранта в результате. Так что тыговорит нене имеет смысла: это не можетt оба являются уравнением и заполняют сектора, которые вы говорите. (Так как все выговорят сейчас "У меня есть это уравнение, и оно нет работа "мы неу меня недостаточно информации, чтобы ответить на это, и этоне вопрос, на который можно ответить.)
 dustin17 мая 2013 г., 19:28
@ tom10 что ты имеешь в виду под этим?
 tom1017 мая 2013 г., 19:07
Еще вам'я не даю людям достаточно информации, яЯ хотел бы знать, куда вы идете, а не где вы начали. "Близко к правильному не особенно полезно. Это неКажется, это не вопрос acrtan2, а вопрос о том, чтов вашем учебнике.
 tom1018 мая 2013 г., 19:25
@SaultoCastro: это только в тангенциальной форме (ха-ха). Если вы хотите, чтобы это было тем, о чем этот вопрос, то я предлагаю вам ответить на него, с изображениями доменов, объясните, почему работает arctan2 (1,1 / x), что лучше, и т. Д. Вместо этого вы 'просто просить других ответить на это, пока вымы на самом деле ответили, о чем на самом деле вопрос ... делая фигуру, которая точно соответствует фигуре в ОП 'с учебником (то естьслишком локализован). (кстати, яЯ должен здесь ... это была пустая трата времени.)
 tom1018 мая 2013 г., 01:40
Этот вопрос должен быть просто закрыт, имхо. Это'просто опечатка в скобках со стороны OP и не проливает свет на что-либо еще (особенно не arctan vs arctan2 из-за неправильного направления). Поэтому закрыто какслишком локализован ".
 dustin18 мая 2013 г., 01:47
@ tom10 ну, я узнал, как убрать из него легенду, чтобы это было полезно.
 tacaswell18 мая 2013 г., 20:24
Это слишком локализовано, так как реальная проблема (и правильный ответ) не включает ниpythonnumpyниmatplotlib
 Saullo G. P. Castro18 мая 2013 г., 10:31
@ tom10 Вопрос не должен быть закрыт. Это приводит к очень распространенной проблеме при обсуждении и предлагает использовать arctan2 (), чтобы избежать суммирования 2 * pi для негативов, полученных с помощью arctan ()
 dustin17 мая 2013 г., 19:11
@ tom10 добавив фотографии уравнения и затем построим сюжет.
 dustin17 мая 2013 г., 19:04
@ tom10 это очень близко к работе, если мы уберем .6 - .9, решение верное. Он падает выше 0,6, но, возможно, ниже, так как диапазон составляет 0,15
 tom1017 мая 2013 г., 19:30
Посмотрите на скобки прямо справа от tan ^ -1, где 'Соответствующая скобка. Это's после загара (тета / 2), а не в конце всего уравнения. В вашем уравнении выделаю арктан всего этого.

Ответы на вопрос(1)

Решение Вопроса

атах,arctan()что может быть сделано эффективно, ОП 'Предложение заменить arctan (x) на arctan2 (1,1 / x), также предложенное Maple 15 'Документация, указанная @ Yay295, дает те же результаты без необходимости суммировать 2 * пи. Оба показаны ниже:

import pylab
import numpy as np
e = np.arange(0.0, 1.0, 0.15).reshape(-1, 1)
nu = np.linspace(0, 2*np.pi, 50000)
x =  ((1-e)/(1+e))**0.5 * np.tan(nu/2.)
x2 = e*(1-e**2)**0.5 * np.sin(nu)/(1 + e*np.cos(nu))
using_arctan = True
using_OP_arctan2 = False

if using_arctan:
    M2evals = 2*np.arctan(x) - x2
    M2evals[ M2evals<0 ] += 2*np.pi
elif using_OP_arctan2:
    M2evals = 2 * np.arctan2(1,1/x) - x2

fig2 = pylab.figure()
ax2 = fig2.add_subplot(111)
for M2e, _e in zip(M2evals, e.ravel()):
    ax2.plot(nu.ravel(), M2e, label = str(_e))
pylab.legend(loc='upper left')
pylab.show()

 dustin17 мая 2013 г., 19:43
Если вы перейдете ко второму комментарию и перейдете от 0 до 2pi, он также будет в правильном месте от 0 до 2pi на оси x.
 Saullo G. P. Castro18 мая 2013 г., 11:41
@Dustin ссылка на доказательство того, что arctan (x) = arctan2 (1,1 / x)
 Saullo G. P. Castro18 мая 2013 г., 10:06
@ Dustin Не могли бы вы объяснить, откуда вы взяли arctan (x) = arctan2 (1,1 / x)? Потому что обычной практикой является использование arctan (x) и суммы2pi к отрицательным результатам
 Saullo G. P. Castro18 мая 2013 г., 01:25
@ tom10 Я вижу вашу точку зрения, изначально я предложил использоватьarctan от -пи до пи, но сarctan2(1,1/x) это дало тот же рисунок, что и учебник. Пожалуйста, не стесняйтесь применять любые исправления, используя arctan и получая те же результаты
 Saullo G. P. Castro17 мая 2013 г., 19:48
Я обновил, пока вы редактировали ... не стесняйтесь обновлять его сейчас
 Yay29510 сент. 2017 г., 02:47
@SaulloCastro - не доказательство, но в Maple 15, упрощающее выражениеarctan(1, 1/x) даетarctan(x) для неотрицательных чисел иarctan(x) + π для отрицательных чисел.
 dustin18 мая 2013 г., 11:46
@SaulloCastro Я добавил, что он сказал, но это не такДоказательство только догадка.
 dustin18 мая 2013 г., 11:18
@SaulloCastro физики предложили1, 1 / x использование вarctan2
 Saullo G. P. Castro18 мая 2013 г., 11:23
@ Dustin Было бы неплохо включить ссылку на это в вопросе или в ответе
 Saullo G. P. Castro10 сент. 2017 г., 14:01
@ Yay295 не могли бы вы дать ссылку на эту документацию?
 tom1018 мая 2013 г., 01:16
Использование arctan2 (1, 1 / x) вместо arctan (x) здесь просто смешно.
 Saullo G. P. Castro10 сент. 2017 г., 13:51
@ Yay295 очень ценю твой комментарий. Даже отредактировал ответ, чтобы включить его
 dustin18 мая 2013 г., 11:39
@SaulloCastro ссылка на что?
 dustin17 мая 2013 г., 19:50
Я добавил новый png-файл и изменил границы и arctan2. Благодарю.

Ваш ответ на вопрос