Занятие №11:
Задачи физики сводящиеся к системам диф. уравнений
Второй закон Ньютона
Постановка задачи
\vec{F}_p
=
Некоторая среда, оказывающая сопротивление движению
Двигающееся тело
Сила, "разгоняющая" тело
Сила, како-го нибудь внешнего поля (гравитации, электричества, ...)
\vec{F}_{\text{тяжести}}
+
\vec{F}_{\text{тяги}}
+
\vec{F}_{\text{сопротивления}}
\vec{F}_p
=
m\vec{a}
+
...
...
Ускорение
=
\vec{a}
\dfrac{d\vec{v}}{dt}
=
\dfrac{d^2\vec{r}}{dt^2}
\vec{r} = \{x, y\}
\vec{a} = \{a_x, a_y\}
\begin{cases}
a_x = \dfrac{d^2x}{dt^2}\\
\\
a_y = \dfrac{d^2y}{dt^2}
\end{cases}
\vec{a}
Конечный вид
\begin{cases}
\dfrac{dx}{dt} = v_x\\
\\
\dfrac{dv_x}{dt} = a_x
\end{cases}
\dfrac{d^2x}{dt^2}:
\begin{cases}
\dfrac{dy}{dt} = v_y\\
\\
\dfrac{dv_y}{dt} = a_y
\end{cases}
\dfrac{d^2y}{dt^2}:
\cdot m
=
F_{px}
\cdot m
=
F_{py}
=
=
F_{1x}
+
F_{2x}
+
...
F_{1y}
+
F_{2y}
+
...
Пример - задача
Тело брошено под углом в 80 градусов к горизонту со скоростью 15 м/с. Определите закон изменения положения тела и смоделируйте его динамику.
\vec{F}_p
=
m\vec{g}
m\vec{a}
m\vec{g}
=
\vec{a}
\vec{g}
=
\{0, -g\}
\dfrac{dx}{dt} = v_x
\dfrac{dv_x}{dt}
\dfrac{dy}{dt} = v_y
\dfrac{dv_y}{dt} = -g
=
0
\vec{a}
=
Решение и анимация
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# Определяем переменную величину и количество кадров
frames = 200
t = np.linspace(0, 5, frames)
# Определяем функцию для системы диф. уравнений
def move_func(z, t):
x, v_x, y, v_y = z
dxdt = v_x
dv_xdt = 0
dydt = v_y
dv_ydt = - g
return dxdt, dv_xdt, dydt, dv_ydt
# Определяем начальные значения и параметры
g = 9.8
v = 15
alpha = 80 * np.pi / 180
x0 = 0
v_x0 = v * np.cos(alpha)
y0 = 0
v_y0 = v * np.sin(alpha)
z0 = x0, v_x0, y0, v_y0
# Решаем систему диф. уравнений
def solve_func(i, key):
sol = odeint(move_func, z0, 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='r')
ball_line, = plt.plot([], [], '-', color='r')
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)
edge = 15
ax.set_xlim(0, edge)
ax.set_ylim(0, edge)
plt.show()
Спасибо за понимание!
Лекция №11. Задачи физики сводящиеся к системам диф. уравненийи
By Alexey Baigashov
Лекция №11. Задачи физики сводящиеся к системам диф. уравненийи
- 132