Я пытаюсь построить бесконечную серию, беря только конечное количество точек. В моем случае достаточно 3 и 10 баллов.Python: Построение бесконечной серии только за счет конечных точек
Уравнение представляет собой линейный ряд Лагранжа в e
эксцентриситет.
E = Me + \sum_{n = 1}^{\infty}a_n e ** n
где a_n
является
a_n = (1/2 ** (n - 1) * \sum_{k = 0}^{\lfloor n/2\rfloor} (-1) ** k/
((n - 2 * k)! * k!) * (n - 2 * k) ** (n - 1) * np.sin((n - 2 * k) * Me))
Так \lfloor n/2\rfloor
латекс для функции пола n/2
.
Независимая переменная E
и зависит Me
поэтому функция не написано как можно было бы нормальным столкнуться с такой функции, но я не вижу способа явно разрешить для Me
, чтобы мы могли написать Me(E)
Так что Я сделал до сих пор (см. Ниже), что неверно, поскольку он не работает. Что я могу сделать, чтобы получить код и график работы?
import numpy as np
import pylab as py
import math
from scipy.misc import factorial as fact
Me = np.linspace(0, 2 * np.pi, 50000.0)
e = 0.65
a = [1.0/2.0 ** (math.floor(n/2.0) - 1.0) *
sum([(-1.0) ** math.floor(n/2.0)/
(fact(math.floor(n/2.0) - k) * fact(k)) *
(math.floor(n/2.0) - 2.0 * k) ** (math.floor(n/2.0) - 1.0) *
np.sin((math.floor(n/2.0) - 2.0 * k) * Me)
for k in range(1, 4, 1)])
for n in range (1, 4, 1)]
print a
def E2(x):
return Me + sum(a[n] * e ** n for n in range(1, 4, 1)) - x
fig = py.figure()
ax = fig.add_subplot(111)
ax.plot(Me, E2(Me))
py.xlim((0, 2 * np.pi))
py.ylim((0, 2 * np.pi))
py.show()
С помощью этой программы, я получаю
In [2]: /usr/bin/ipython:17: RuntimeWarning: divide by zero encountered in double_\
scalars
/usr/bin/ipython:17: RuntimeWarning: invalid value encountered in multiply
/usr/bin/ipython:17: RuntimeWarning: invalid value encountered in add
[array([ nan, inf, inf, ..., -inf, -inf, -inf]), array([ nan, inf, inf, ..., -\
inf, -inf, -inf]), array([ nan, inf, inf, ..., -inf, -inf, -inf])]
Бесконечность не должна быть значением на всех, так что я не уверен, как это в настоящее время получено.
Конечная ошибка list of index out of range
/home/dustin/Documents/School/UVM/Engineering/OrbitalMechanics/lagrangeseries.py i\
n <genexpr>((n,))
17
18 def E2(x):
---> 19 return Me + sum(a[n] * e ** n for n in range(1, 4, 1)) - x
20
21 fig = py.figure()
IndexError: list index out of range
Как это вне диапазона? Все суммируется от 1 до 3?
много ошибок, для стартеров 1/2 ** (n-1) оценивается в 0, если n является целым числом. вам нужны квадратные скобки на встроенных петлях. google "pyhon tutorial" принесет тонны хорошей информации, чтобы вы начали .. – agentp
@george Я добавил десятичные точки ко всему, чтобы исправить целочисленную проблему. – dustin
@george Я не могу найти что-либо в линейных циклах. Он просто говорит, что '[]' are list и '()' являются кортежами, где список может быть изменен, а кортежи cant – dustin