Занятие №12:

Центральные силовые поля

Постановка задачи

НО в общем виде сила это вектор!

F_G

Одномерная формулировка

=
\dfrac{GMm}{r^2}
F_K
=
\dfrac{kq_1q_2}{r^2}

Одномерные задачи

M, Q
m, q
F_G
F_K
r
O

Двумерная формулировка

F_G
=
\dfrac{GMm}{r^2}
|
\dfrac{\vec{r}}{r}
\cdot
r
=
|\vec{r}|
\vec{F}_G
\vec{F}_G
=
\dfrac{GMm}{r^2} \cdot \dfrac{\vec{r}}{r}
=
\dfrac{GMm}{r^3}\cdot \vec{r}
r
=
\sqrt{x^2 + y^2}
=
\left(x^2 + y^2\right)^{\frac{1}{2}}
\vec{F}_K
=
\dfrac{kq_1q_2}{r^3}\cdot \vec{r}

Аналогично тут и далее 

Модель центрального силового поля

\begin{cases} F_{Gx} = - \dfrac{GMm}{\left(x^2 + y^2\right)^{\frac{3}{2}}}\cdot x \\ \\ F_{Gy} = - \dfrac{GMm}{\left(x^2 + y^2\right)^{\frac{3}{2}}} \cdot y \end{cases}

Центральное поле

M, Q
\vec{r}
x
x
y
y
M
\ll
m
Q
\ll
q
m, q
\vec{F}_G
=
\{F_{Gx}, F_{Gy}\}

Дифференциальная задача

\vec{F}_G
=
\{ma_{x}, ma_{y}\}
\vec{F}_P
=
m\vec{a}
=
\begin{cases} m \cdot \dfrac{d^2x}{dt^2} = - \dfrac{GMm}{\left(x^2 + y^2\right)^{\frac{3}{2}}}\cdot x \\ \\ m \cdot \dfrac{d^2y}{dt^2} = - \dfrac{GMm}{\left(x^2 + y^2\right)^{\frac{3}{2}}} \cdot y \end{cases}
\begin{cases} a_{x} = \dfrac{d^2x}{dt^2} \\ \\ a_{y} = \dfrac{d^2y}{dt^2} \end{cases}
\begin{cases} \dfrac{dx}{dt} = v_x \\ \\ \dfrac{dv_x}{dt} = - \dfrac{GM}{\left(x^2 + y^2\right)^{\frac{3}{2}}} \cdot x \\ \dfrac{dy}{dt} = v_y \\ \\ \dfrac{dv_y}{dt} = - \dfrac{GM}{\left(x^2 + y^2\right)^{\frac{3}{2}}}\cdot y \\ \end{cases}

Дифференциальная задача

Начальные условия

y
M, Q
x
\vec{v}
\vec{v}
\vec{v}
\vec{v}
x_0
=
149\cdot10^9 \, \text{м}
y_0
=
0 \, \text{м}
v_{x_0}
=
0 \, \text{м/с}
v_{y_0}
=
30 000 \, \text{м/с}
x_0
=
0 \, \text{м}
y_0
=
-149\cdot10^9 \, \text{м}
v_{x_0}
=
30 000 \, \text{м/с}
v_{y_0}
=
0 \, \text{м/с}
x_0
=
-149\cdot10^9 \, \text{м}
y_0
=
0 \, \text{м}
v_{x_0}
=
0 \, \text{м/с}
v_{y_0}
=
-30 000 \, \text{м/с}
x_0
=
0 \, \text{м}
y_0
=
149\cdot10^9 \, \text{м}
v_{x_0}
=
-30000 \, \text{м/с}
v_{y_0}
=
0 \, \text{м/с}
earth
x

Алгоритм решения

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# Определяем переменную величину
frames = 365
seconds_in_year = 365 * 24 * 60 * 60
years = 1
t = np.linspace(0, years*seconds_in_year, frames)

# Определяем функцию для системы диф. уравнений
def move_func(s, t):
    x, v_x, y, v_y = s
    
    dxdt = v_x
    dv_xdt = - G * m * x / (x**2 + y**2)**1.5
    dydt = v_y
    dv_ydt = - G * m * y / (x**2 + y**2)**1.5
    
    return dxdt, dv_xdt, dydt, dv_ydt
  
# Определяем начальные значения и параметры
G = 6.67 * 10**(-11)
m = 1.98 * 10**(30)

x0 = 149 * 10**9
v_x0 = 0
y0 = 0
v_y0 = 30000

s0 = (x0, v_x0, y0, v_y0)
# Решаем систему диф. уравнений
def solve_func(i, key):
    sol = odeint(move_func, s0, t)
    if key == 'point':
        x = sol[i, 0]
        y = sol[i, 2]
    else:
        x = sol[:i, 0]
        y = sol[:i, 2]
    return x, y
# Строим решение в виде графика и анимируем
fig, ax = plt.subplots()

ball, = plt.plot([], [], 'o', color='b')
ball_line, = plt.plot([], [], '-', color='b')
plt.plot([0], [0], 'o', color='y', ms=20)

def animate(i):
    ball.set_data(solve_func(i, 'point'))
    ball_line.set_data(solve_func(i, 'line'))
    
ani = FuncAnimation(fig,
                    animate,
                    frames=frames,
                    interval=30)
plt.axis('equal')
edge = 2*x0
ax.set_xlim(-edge, edge)
ax.set_ylim(-edge, edge)

ani.save('earth_sun.gif')

Несколько тел в центральном поле

Начальные условия

y
M, Q
x
\vec{v}
\vec{v}
earth
mercury
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# Определяем переменную величину
frames = 365
seconds_in_year = 365 * 24 * 60 * 60
years = 1
t = np.linspace(0, years*seconds_in_year, frames)
# Определяем функцию для системы диф. уравнений
def move_func(s, t):
    (x1, v_x1, y1, v_y1,
     x2, v_x2, y2, v_y2) = s

    dxdt1 = v_x1
    dv_xdt1 = - G * m * x1 / (x1**2 + y1**2)**1.5
    dydt1 = v_y1
    dv_ydt1 = - G * m * y1 / (x1**2 + y1**2)**1.5

    dxdt2 = v_x2
    dv_xdt2 = - G * m * x2 / (x2**2 + y2**2)**1.5
    dydt2 = v_y2
    dv_ydt2 = - G * m * y2 / (x2**2 + y2**2)**1.5

    return (dxdt1, dv_xdt1, dydt1, dv_ydt1,
            dxdt2, dv_xdt2, dydt2, dv_ydt2)
# Определяем начальные значения и параметры
G = 6.67 * 10**(-11)
m = 1.98 * 10**(30)

x10 = 149 * 10**9
v_x10 = 0
y10 = 0
v_y10 = 30000

x20 = 0
v_x20 = -47360
y20 = 0.387 * 149 * 10**9
v_y20 = 0

s0 = (x10, v_x10, y10, v_y10,
      x20, v_x20, y20, v_y20)
# Решаем систему диф. уравнений
def solve_func(i, key):
    sol = odeint(move_func, s0, t)
    if key == 'point':
        x1 = sol[i, 0]
        y1 = sol[i, 2]
        x2 = sol[i, 4]
        y2 = sol[i, 6]
    else:
        x1 = sol[:i, 0]
        y1 = sol[:i, 2]
        x2 = sol[:i, 4]
        y2 = sol[:i, 6]
    return ((x1, y1), (x2, y2))
# Строим решение в виде графика и анимируем
fig, ax = plt.subplots()

ball1, = plt.plot([], [], 'o', color='b')
ball_line1, = plt.plot([], [], '-', color='b')

ball2, = plt.plot([], [], 'o', color='r')
ball_line2, = plt.plot([], [], '-', color='r')

plt.plot([0], [0], 'o', color='y', ms=20)

def animate(i):
    ball1.set_data(solve_func(i, 'point')[0])
    ball_line1.set_data(solve_func(i, 'line')[0])

    ball2.set_data(solve_func(i, 'point')[1])
    ball_line2.set_data(solve_func(i, 'line')[1])
ani = FuncAnimation(fig,
                    animate,
                    frames=frames,
                    interval=30)

plt.axis('equal')
edge = 2*x10
ax.set_xlim(-edge, edge)
ax.set_ylim(-edge, edge)

plt.show()

Спасибо за понимание!

Лекция №12. Центральные силовые поля

By Alexey Baigashov

Лекция №12. Центральные силовые поля

  • 113