Я пытаюсь решить дифференциальное уравнение численно, и я пишу уравнение, которое даст мне массив решения для каждой точки времени.Разработка уравнения
import numpy as np
import matplotlib.pylab as plt
pi=np.pi
sin=np.sin
cos=np.cos
sqrt=np.sqrt
alpha=pi/4
g=9.80665
y0=0.0
theta0=0.0
sina = sin(alpha)**2
second_term = g*sin(alpha)*cos(alpha)
x0 = float(raw_input('What is the initial x in meters?'))
x_vel0 = float(raw_input('What is the initial velocity in the x direction in m/s?'))
y_vel0 = float(raw_input('what is the initial velocity in the y direction in m/s?'))
t_f = int(raw_input('What is the maximum time in seconds?'))
r0 = x0
vtan = sqrt(x_vel0**2+y_vel0**2)
dt = 1000
n = range(0,t_f)
r_n = r0*(n*dt)
r_nm1 = r0((n-1)*dt)
F_r = ((vtan**2)/r_n)*sina-second_term
r_np1 = 2*r_n - r_nm1 + dt**2 * F_r
data = [r0]
for time in n:
data.append(float(r_np1))
print data
Я не уверен, как решить уравнение для r_np1 каждый раз в диапазоне n. Я все еще новичок в Python и хотел бы, чтобы какая-то помощь поняла, как сделать что-то подобное.
Вы вычисляете r_np1 ровно один раз, перед циклом. Вы должны попробовать переместить эту строку в цикл for. – munk
@munkhd ahh, имеет смысл! Я получаю ошибку в строке 43: r_n = r0 * (n * dt): не может умножить последовательность на non-int типа 'float'. Должен ли я перемещать все под n в цикл? – GlassSeaHorse
Вместо того, чтобы писать собственный репозиторий ODE в чистом Python, я бы рекомендовал использовать ['scipy.integrate.odeint()'] (http://docs.scipy.org/doc/scipy-0.14.0/reference /generated/scipy.integrate.odeint.html#scipy.integrate.odeint). Он выполняет большую часть работы для вас, а также будет намного быстрее. –