diff --git a/README.md b/README.md deleted file mode 100644 index f1ec59983..000000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Базовый курс (моделирование на python) -Репозиторий для прохождения базового курса по языку программирования python, -в рамках общего цикла лекций "Моделирование на python". diff --git a/extratasks givs/lab_3_extratask1.gif b/extratasks givs/lab_3_extratask1.gif new file mode 100644 index 000000000..c53920f4c Binary files /dev/null and b/extratasks givs/lab_3_extratask1.gif differ diff --git a/extratasks givs/lab_3_extratask2_var_a.gif b/extratasks givs/lab_3_extratask2_var_a.gif new file mode 100644 index 000000000..eb86cbd91 Binary files /dev/null and b/extratasks givs/lab_3_extratask2_var_a.gif differ diff --git a/extratasks givs/lab_3_extratask2_var_b.gif b/extratasks givs/lab_3_extratask2_var_b.gif new file mode 100644 index 000000000..39e534f72 Binary files /dev/null and b/extratasks givs/lab_3_extratask2_var_b.gif differ diff --git a/extratasks givs/lab_3_extratask2_var_c.gif b/extratasks givs/lab_3_extratask2_var_c.gif new file mode 100644 index 000000000..3ab0f3222 Binary files /dev/null and b/extratasks givs/lab_3_extratask2_var_c.gif differ diff --git a/extratasks givs/lab_3_extratask3_h.gif b/extratasks givs/lab_3_extratask3_h.gif new file mode 100644 index 000000000..5b8ce4b7f Binary files /dev/null and b/extratasks givs/lab_3_extratask3_h.gif differ diff --git a/extratasks givs/lab_3_extratask3_v.gif b/extratasks givs/lab_3_extratask3_v.gif new file mode 100644 index 000000000..d0fb40d50 Binary files /dev/null and b/extratasks givs/lab_3_extratask3_v.gif differ diff --git a/extratasks givs/lab_3_extratask4.gif b/extratasks givs/lab_3_extratask4.gif new file mode 100644 index 000000000..f4e4156ab Binary files /dev/null and b/extratasks givs/lab_3_extratask4.gif differ diff --git a/extratasks givs/lab_3_extratask5.gif b/extratasks givs/lab_3_extratask5.gif new file mode 100644 index 000000000..5022703c1 Binary files /dev/null and b/extratasks givs/lab_3_extratask5.gif differ diff --git a/extratasks/lab_3_extratask1.py b/extratasks/lab_3_extratask1.py new file mode 100644 index 000000000..de0295285 --- /dev/null +++ b/extratasks/lab_3_extratask1.py @@ -0,0 +1,44 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 10000, 0.5) + +def decay_func(z, t): + A, B, C = z + dA_dt = - k1*A + dB_dt = k1*A - k2*B + dC_dt = k2*B - k3*C + return dA_dt, dB_dt, dC_dt + +k1 = 0.02 +k2 = 0.05 +k3 = 0.01 + +A0 = 500 +B0 = 0 +C0 = 0 +z0 = A0, B0, C0 + +sol = odeint(decay_func, z0, t) +A = sol[:, 0] +B = sol[:, 1] +C = sol[:, 2] + +def animate(i): + A_sum.set_data([t[:i]], [A[:i]]) + B_sum.set_data([t[:i]], [B[:i]]) + C_sum.set_data([t[:i]], [C[:i]]) + +fig, ax = plt.subplots() + +A_sum, = plt.plot([], [], '-', color='r') +B_sum, = plt.plot([], [], '-', color='g') +C_sum, = plt.plot([], [], '-', color='b') + +ax.set_xlim(0, 200) +ax.set_ylim(0, 500) + +ani = FuncAnimation(fig, animate, frames=300, interval=30) +ani.save('extratasks givs/lab_3_extratask1.gif') \ No newline at end of file diff --git a/extratasks/lab_3_extratask2_var_a.py b/extratasks/lab_3_extratask2_var_a.py new file mode 100644 index 000000000..b30af829d --- /dev/null +++ b/extratasks/lab_3_extratask2_var_a.py @@ -0,0 +1,46 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 2000, 0.05) + +def move_func(z, t): + y, v = z + + dy_dt = v + dv_dt = g - k*y/m + return dy_dt, dv_dt + +m = 0.5 + +delta_L = 0.08 +F_0 = 1 +k = F_0 / delta_L + +v0 = 0.5 +g = 9.8 +y0 = - delta_L + +z0 = y0, v0 + +sol = odeint(move_func, z0, t) +y = sol[:, 0] +print(y) + +def animate(i): + move.set_data([0], [y[i]]) + move_line.set_data(np.full(20, 0), np.linspace(y[i], 1, 20)) + +fig, ax = plt.subplots() + +move_line, = plt.plot([], [], '-', color='g') +move, = plt.plot([], [], 'o', color='r') +roof, = plt.plot(np.linspace(-1, 1, 20), np.full(20, 1), '-', color='0') + +edge = 2 +ax.set_xlim(-edge, edge) +ax.set_ylim(-edge, edge) + +ani = FuncAnimation(fig, animate, frames=300, interval=50) +ani.save('extratasks givs/lab_3_extratask2_var_a.gif') diff --git a/extratasks/lab_3_extratask2_var_b.py b/extratasks/lab_3_extratask2_var_b.py new file mode 100644 index 000000000..a25f669b1 --- /dev/null +++ b/extratasks/lab_3_extratask2_var_b.py @@ -0,0 +1,46 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 2000, 0.05) + +def move_func(z, t): + y, v = z + + dy_dt = v + dv_dt = g - k*y/m - 0.8*v + return dy_dt, dv_dt + +m = 0.5 + +delta_L = 0.08 +F_0 = 1 +k = F_0 / delta_L + +v0 = 0.5 +g = 9.8 +y0 = - delta_L + +z0 = y0, v0 + +sol = odeint(move_func, z0, t) +y = sol[:, 0] +print(y) + +def animate(i): + move.set_data([0], [y[i]]) + move_line.set_data(np.full(20, 0), np.linspace(y[i], 1, 20)) + +fig, ax = plt.subplots() + +move_line, = plt.plot([], [], '-', color='g') +move, = plt.plot([], [], 'o', color='r') +roof, = plt.plot(np.linspace(-1, 1, 20), np.full(20, 1), '-', color='0') + +edge = 2 +ax.set_xlim(-edge, edge) +ax.set_ylim(-edge, edge) + +ani = FuncAnimation(fig, animate, frames=300, interval=50) +ani.save('extratasks givs/lab_3_extratask2_var_b.gif') diff --git a/extratasks/lab_3_extratask2_var_c.py b/extratasks/lab_3_extratask2_var_c.py new file mode 100644 index 000000000..07fdef0e9 --- /dev/null +++ b/extratasks/lab_3_extratask2_var_c.py @@ -0,0 +1,48 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 2000, 0.05) + +def move_func(z, t): + y, v = z + + dy_dt = v + dv_dt = g - k*y/m - 5 * np.cos(omega*t) / m + return dy_dt, dv_dt + +m = 0.5 + +delta_L = 0.08 +F_0 = 1 +k = F_0 / delta_L + +omega = 1/2 + +v0 = 0.5 +g = 9.8 +y0 = - delta_L + +z0 = y0, v0 + +sol = odeint(move_func, z0, t) +y = sol[:, 0] +print(y) + +def animate(i): + move.set_data([0], [y[i]]) + move_line.set_data(np.full(20, 0), np.linspace(y[i], 1, 20)) + +fig, ax = plt.subplots() + +move_line, = plt.plot([], [], '-', color='g') +move, = plt.plot([], [], 'o', color='r') +roof, = plt.plot(np.linspace(-1, 1, 20), np.full(20, 1), '-', color='0') + +edge = 2 +ax.set_xlim(-edge, edge) +ax.set_ylim(-edge, edge) + +ani = FuncAnimation(fig, animate, frames=300, interval=50) +ani.save('extratasks givs/lab_3_extratask2_var_c.gif') diff --git a/extratasks/lab_3_extratask3.py b/extratasks/lab_3_extratask3.py new file mode 100644 index 000000000..cfce98e6e --- /dev/null +++ b/extratasks/lab_3_extratask3.py @@ -0,0 +1,63 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 1000, 1) + +def decay_func(z, t): + M, h, v = z + + if M > 0: + dM_dt = - dM0_dt + else: + dM_dt = 0 + + dh_dt = v + dv_dt = -u*dM_dt / (M+m) - G * M_earth/(R_earth + h)**2 + + return dM_dt, dh_dt, dv_dt + +h_0 = 0 +v_0 = 0 + +M_0 = 200 +m = 50 +u = 3 * 1000 +dM0_dt = 1 + +G = 6.67 * 10**(-11) +M_earth = 5.974 * 10**24 +R_earth = 6378.1 * 10**3 + +z0 = M_0, h_0, v_0 + +sol = odeint(decay_func, z0, t) +h_t = sol[:, 1] / 10**3 +v_t = sol[:, 2] + +def animate_h(i): + h_func.set_data([t[:i]], [h_t[:i]]) + +def animate_v(i): + v_func.set_data([t[:i]], [v_t[:i]]) + +fig_h, ax_h = plt.subplots() + +h_func, = plt.plot([], [], '-', color='r') + +ax_h.set_xlim(0, 1000) +ax_h.set_ylim(0, 800) + +ani_h = FuncAnimation(fig_h, animate_h, frames=1000, interval=30) +ani_h.save('extratasks givs/lab_3_extratask3_h.gif') + +fig_v, ax_v = plt.subplots() + +v_func, = plt.plot([], [], '-', color='g') + +ax_v.set_xlim(0, 1000) +ax_v.set_ylim(0, 3000) + +ani_v = FuncAnimation(fig_v, animate_v, frames=1000, interval=30) +ani_v.save('extratasks givs/lab_3_extratask3_v.gif') \ No newline at end of file diff --git a/extratasks/lab_3_extratask4.py b/extratasks/lab_3_extratask4.py new file mode 100644 index 000000000..bfb411bd5 --- /dev/null +++ b/extratasks/lab_3_extratask4.py @@ -0,0 +1,53 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 10, 0.01) + +def decay_func(z, t): + x, y, v = z + + dx_dt = -v + dy_dt = -v + dv_dt = g + + return dx_dt, dy_dt, dv_dt + +L = 2.5 +l = 0.1 +h = 1 +g = 10 + +x0 = L - l +y0 = l +v0 = 0 + +z0 = x0, y0, v0 + +sol = odeint(decay_func, z0, t) +x = sol[:, 0] +y = sol[:, 1] +print(x) +print(y) + +def animate(i): + if x[i] > 0: + x_func.set_data(np.linspace(0, x[i], 20), [np.full(20, l)]) + y_func.set_data([np.full(20, 0)], np.linspace(y[i], l, 20)) + else: + x_func.set_data([], []) + y_func.set_data([np.full(20, 0)], np.linspace(y[i], y[i] + L, 20)) + +fig, ax = plt.subplots() + +x_func, = plt.plot([], [], '-', color='r') +y_func, = plt.plot([], [], '-', color='r') +# table, = plt.plot(np.full(20, np.linspace(0, L, 20)), np.full(20, np.linspace(0, l, 20)), '-', color='0') + +edge = 5 +ax.set_xlim(-edge, edge) +ax.set_ylim(-edge, edge) + +ani = FuncAnimation(fig, animate, frames=100, interval=30) +ani.save('extratasks givs/lab_3_extratask4.gif') \ No newline at end of file diff --git a/extratasks/lab_3_extratask5.py b/extratasks/lab_3_extratask5.py new file mode 100644 index 000000000..6ee24b7a2 --- /dev/null +++ b/extratasks/lab_3_extratask5.py @@ -0,0 +1,46 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 50, 0.4) + +def decay_func(z, t): + T_1, T_2 = z + + dT1_dt = dT0_dt + alpha_1*(T_g-T_1) + 4*alpha_2*(T_e-T_1) + alpha_3*(T_2-T_1) + dT2_dt = 4*alpha_2*(T_e-T_2) + alpha_1*(T_1-T_2) + + return dT1_dt, dT2_dt + +T_g = 0 +alpha_1 = 0.05 +T_e = 20 +alpha_2 = 0.02 +alpha_3 = 0.01 + +T_10 = 10 +T_20 = 20 +dT0_dt = 5 + +z0 = T_10, T_20 + +sol = odeint(decay_func, z0, t) +T_1 = sol[:, 0] +T_2 = sol[:, 1] + +def animate(i): + T_1_func.set_data([t[:i]], [T_1[:i]]) + T_2_func.set_data([t[:i]], [T_2[:i]]) + +fig, ax = plt.subplots() + +T_1_func, = plt.plot([], [], '-', color='r') +T_2_func, = plt.plot([], [], '-', color='g') + +edge = 40 +ax.set_xlim(0, 40) +ax.set_ylim(0, 50) + +ani = FuncAnimation(fig, animate, frames=100, interval=30) +ani.save('extratasks givs/lab_3_extratask5.gif') diff --git a/less_1.gif b/less_1.gif new file mode 100644 index 000000000..3928d3bfd Binary files /dev/null and b/less_1.gif differ diff --git a/less_1.py b/less_1.py new file mode 100644 index 000000000..7850530a7 --- /dev/null +++ b/less_1.py @@ -0,0 +1,53 @@ +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, vx, y, vy = z + + dx_dt = vx + dvx_dt = 0 + dy_dt = vy + dvy_dt = - g + + return dx_dt, dvx_dt, dy_dt, dvy_dt + +# Определяем начальные значения и параметры +g = 9.8 +v = 15 +alpha = 80 * np.pi / 180 + +x0 = 0 +vx0 = v * np.cos(alpha) +y0 = 0 +vy0 = v * np.sin(alpha) + +z0 = x0, vx0, y0, vy0 + +sol = odeint(move_func, z0, t) +x = sol[:, 0] +y = sol[:, 2] + +def animate(i): + ball.set_data([x[i]], [y[i]]) + + ball_line.set_data([x[:i]], [y[:i]]) + +# Строим решение в виде графика и анимируем +fig, ax = plt.subplots() + +ball, = plt.plot([], [], 'o', color='r') +ball_line, = plt.plot([], [], '-', color='r') + +edge = 15 +ax.set_xlim(0, edge) +ax.set_ylim(0, edge) + +ani = FuncAnimation(fig, animate, frames=frames, interval=30) +ani.save('less_1.gif') diff --git a/tasks givs/lab_3_task1_var_a.gif b/tasks givs/lab_3_task1_var_a.gif new file mode 100644 index 000000000..ee89715f7 Binary files /dev/null and b/tasks givs/lab_3_task1_var_a.gif differ diff --git a/tasks givs/lab_3_task1_var_b.gif b/tasks givs/lab_3_task1_var_b.gif new file mode 100644 index 000000000..61dd3ea33 Binary files /dev/null and b/tasks givs/lab_3_task1_var_b.gif differ diff --git a/tasks givs/lab_3_task2.gif b/tasks givs/lab_3_task2.gif new file mode 100644 index 000000000..9029a23fd Binary files /dev/null and b/tasks givs/lab_3_task2.gif differ diff --git a/tasks givs/lab_3_task3.gif b/tasks givs/lab_3_task3.gif new file mode 100644 index 000000000..537801332 Binary files /dev/null and b/tasks givs/lab_3_task3.gif differ diff --git a/tasks givs/lab_3_task4.gif b/tasks givs/lab_3_task4.gif new file mode 100644 index 000000000..3eb6bf9c0 Binary files /dev/null and b/tasks givs/lab_3_task4.gif differ diff --git a/tasks/lab_3_task1_var_a.py b/tasks/lab_3_task1_var_a.py new file mode 100644 index 000000000..c66b26015 --- /dev/null +++ b/tasks/lab_3_task1_var_a.py @@ -0,0 +1,54 @@ +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, 4, frames) + +def move_func(z, t): + x, vx, y, vy = z + + ax = k * vx + ay = k * vy + + dx_dt = vx + dvx_dt = - ax + dy_dt = vy + dvy_dt = - g - ay + + return dx_dt, dvx_dt, dy_dt, dvy_dt + + +g = 9.8 +v0 = 20 +alpha = 60 * np.pi / 180 +k = 0.2 + +x0 = 0 +vx0 = v0 * np.cos(alpha) +y0 = 0 +vy0 = v0 * np.sin(alpha) + +z0 = x0, vx0, y0, vy0 + +sol = odeint(move_func, z0, t) +x = sol[:, 0] +y = sol[:, 2] + +def animate(i): + ball.set_data([x[i]], [y[i]]) + + ball_line.set_data([x[:i]], [y[:i]]) + +# Строим решение в виде графика и анимируем +fig, ax = plt.subplots() + +ball, = plt.plot([], [], 'o', color='r') +ball_line, = plt.plot([], [], '-', color='r') + +ax.set_xlim(0, 30) +ax.set_ylim(0, 20) + +ani = FuncAnimation(fig, animate, frames=frames, interval=30) +ani.save('lab_3_task1_var_a.gif') \ No newline at end of file diff --git a/tasks/lab_3_task1_var_b.py b/tasks/lab_3_task1_var_b.py new file mode 100644 index 000000000..90b735cda --- /dev/null +++ b/tasks/lab_3_task1_var_b.py @@ -0,0 +1,54 @@ +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, 2, frames) + +def move_func(z, t): + x, vx, y, vy = z + + ax = k * vx**2 + ay = k * vy**2 + + dx_dt = vx + dvx_dt = - ax + dy_dt = vy + dvy_dt = - g - ay + + return dx_dt, dvx_dt, dy_dt, dvy_dt + + +g = 9.8 +v0 = 20 +alpha = 60 * np.pi / 180 +k = 0.2 + +x0 = 0 +vx0 = v0 * np.cos(alpha) +y0 = 0 +vy0 = v0 * np.sin(alpha) + +z0 = x0, vx0, y0, vy0 + +sol = odeint(move_func, z0, t) +x = sol[:, 0] +y = sol[:, 2] + +def animate(i): + ball.set_data([x[i]], [y[i]]) + + ball_line.set_data([x[:i]], [y[:i]]) + +# Строим решение в виде графика и анимируем +fig, ax = plt.subplots() + +ball, = plt.plot([], [], 'o', color='r') +ball_line, = plt.plot([], [], '-', color='r') + +ax.set_xlim(0, 10) +ax.set_ylim(0, 8) + +ani = FuncAnimation(fig, animate, frames=frames, interval=30) +ani.save('lab_3_task1_var_b.gif') \ No newline at end of file diff --git a/tasks/lab_3_task2.py b/tasks/lab_3_task2.py new file mode 100644 index 000000000..63902a339 --- /dev/null +++ b/tasks/lab_3_task2.py @@ -0,0 +1,54 @@ +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, 2, frames) + +def move_func(z, t): + x, vx, y, vy = z + + ax = k * vx + ay = k * vy + + dx_dt = vx + dvx_dt = - gx - ax + dy_dt = vy + dvy_dt = - gy - ay + + return dx_dt, dvx_dt, dy_dt, dvy_dt + +gx = 10 +gy = 9.8 +v0 = 15 +alpha = 30 * np.pi / 180 +k = 0.2 + +x0 = 0 +vx0 = v0 * np.cos(alpha) +y0 = 0 +vy0 = v0 * np.sin(alpha) + +z0 = x0, vx0, y0, vy0 + +sol = odeint(move_func, z0, t) +x = sol[:, 0] +y = sol[:, 2] + +def animate(i): + ball.set_data([x[i]], [y[i]]) + + ball_line.set_data([x[:i]], [y[:i]]) + +# Строим решение в виде графика и анимируем +fig, ax = plt.subplots() + +ball, = plt.plot([], [], 'o', color='r') +ball_line, = plt.plot([], [], '-', color='r') + +ax.set_xlim(0, 10) +ax.set_ylim(0, 3) + +ani = FuncAnimation(fig, animate, frames=frames, interval=30) +ani.save('lab_3_task2.gif') \ No newline at end of file diff --git a/tasks/lab_3_task3.py b/tasks/lab_3_task3.py new file mode 100644 index 000000000..98329a55c --- /dev/null +++ b/tasks/lab_3_task3.py @@ -0,0 +1,46 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 10000, 0.5) + +def decay_func(z, t): + A, X, Y = z + if A > 0: + dX_dt = k1 * A + dY_dt = k2 * A + dA_dt = - dX_dt - dY_dt + return dA_dt, dX_dt, dY_dt + +A0 = 500 +k1 = 0.02 +k2 = 0.05 + +X0 = 0 +Y0 = 0 +z0 = A0, X0, Y0 + +sol = odeint(decay_func, z0, t) +X = sol[:, 1] +Y = sol[:, 2] +A = sol[:, 0] + +def animate(i): + X_el.set_data([t[:i]], [X[:i]]) + + Y_el.set_data([t[:i]], [Y[:i]]) + + A_el.set_data([t[:i]], [A[:i]]) + +fig, ax = plt.subplots() + +X_el, = plt.plot([], [], '-', color='r') +Y_el, = plt.plot([], [], '-', color='g') +A_el, = plt.plot([], [], '-', color='b') + +ax.set_xlim(0, 200) +ax.set_ylim(0, 500) + +ani = FuncAnimation(fig, animate, frames=200, interval=30) +ani.save('lab_3_task3.gif') \ No newline at end of file diff --git a/tasks/lab_3_task4.py b/tasks/lab_3_task4.py new file mode 100644 index 000000000..b719bbf12 --- /dev/null +++ b/tasks/lab_3_task4.py @@ -0,0 +1,43 @@ +import numpy as np +from scipy.integrate import odeint +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +t = np.arange(0, 200, 0.5) + +def move_func(z, t): + y, v = z + + dy_dt = -v + dv_dt = g + k*y/m + return dy_dt, dv_dt + +k = 500 +m = 0.8 +v0 = 5 +g = 9.8 +y0 = 0 + +z0 = y0, v0 + +sol = odeint(move_func, z0, t) +y = sol[:, 0] +print(y) + +def animate(i): + move.set_data([0], [y[i]]) + move_line.set_data(np.full(20, 0), np.linspace(y[i], 0.4, 20)) + +fig, ax = plt.subplots() + +move_line, = plt.plot([], [], '-', color='g') +move, = plt.plot([], [], 'o', color='r') +roof, = plt.plot(np.linspace(-0.4, 0.4, 20), np.full(20, 0.4), '-', color='0') + +edge = 0.5 +ax.set_xlim(-edge, edge) +ax.set_ylim(-edge, edge) + +ani = FuncAnimation(fig, animate, frames=300, interval=30) +ani.save('lab_3_task4.gif') +