Текущая версия |
Ваш текст |
Строка 12: |
Строка 12: |
| | | |
| ==Построение модели== | | ==Построение модели== |
− | Процесс моделируется как одномерные колебания цепочки частиц. | + | Процесс моделируется как одномерные колебания цепочки частиц. |
| + | Уравнение взаимодействия : (строчка с F) |
| + | |
| ==Теоретическая сводка== | | ==Теоретическая сводка== |
| | | |
− | Парное взаимодействие определяется формулой: | + | Парное взаимодействие: |
| + | Определяется формулой |
| | | |
− | :<math>F = c(x_{k+1}-x_{k})</math> | + | :<math>F = c(x_{k+1}-x_{k}-1)</math> |
| | | |
| где <math>F</math> — сила взаимодействия, <math>c</math> — жесткость связи, <math>x_k</math> — перемещение частицы, <math>k</math> — номер частицы. | | где <math>F</math> — сила взаимодействия, <math>c</math> — жесткость связи, <math>x_k</math> — перемещение частицы, <math>k</math> — номер частицы. |
| | | |
− | Уравнение скорости частиц <math>k</math> и <math>k+1</math>:
| + | ==Решение== |
− | :<math>V_{k}=\frac{F}{m}dt-2μV_{k}</math>
| + | При построении модели были приняты следующие значения параметров: |
− | :<math>V_{k+1}=-\frac{F}{m}dt-2μV_{k+1}</math>
| |
− | | |
− | где <math>F</math> — сила взаимодействия, <math>m</math> — масса частицы, <math>μ</math> — коэффициент вязкости, <math>V_{k}</math> — скорость частицы.
| |
− | | |
− | ===Граничные и начальные условия===
| |
− | Начальные условия нулевые
| |
− | | |
− | Периодические граничные условия:
| |
− | :<math>V_{N}=c(x_{1}+aN-x_{N}-1)\frac{dt}{m}-2μV_{N}+Qcos(ωt)</math>
| |
− | :<math>V_{1}=-c(x_{1}+aN-x_{N}-1)\frac{dt}{m}-2μV_{1}</math>
| |
− | где <math>Q</math> — амплитуда возмущающей силы, <math>ω</math> — частота возмущающей силы, <math>N</math> — количество частиц.
| |
− | | |
− | ==Визуализация==
| |
− | | |
− | | |
− | [[File:vksvt.gif]]
| |
− | <div class="mw-collapsible mw-collapsed" style="width:100%" >
| |
− | '''Текст программы на языке Python (среда разработки PyCharm):''' <div class="mw-collapsible-content">
| |
− | <syntaxhighlight lang="python" line start="1" enclose="div">
| |
− | import numpy as np
| |
− | import math
| |
− | import matplotlib.pyplot as plt
| |
− | from matplotlib.patches import Circle
| |
− | from matplotlib.collections import PatchCollection
| |
− | from celluloid import Camera
| |
− | | |
− | | |
− | def Plotting(X, rad, u):
| |
− | n = np.shape(X)[1]
| |
− | patches = []
| |
− | for it in range(n):
| |
− | circle = Circle((X[0, it], 0), rad)
| |
− | patches.append(circle)
| |
− | p = PatchCollection(patches)
| |
− | ax_1 = plt.subplot(2, 1, 1)
| |
− | plt.plot()
| |
− | ax_1.add_collection(p)
| |
− | | |
− | plt.xlim([-1, N])
| |
− | plt.ylim([-4, 4])
| |
− | plt.grid(True)
| |
− | | |
− | | |
− | ax_2 = plt.subplot(2, 1, 2)
| |
− | plt.plot(np.arange(0, N), u.T, '*-k')
| |
− | plt.xlim([-3, (n + 2) * a])
| |
− | plt.ylim([-1, 1])
| |
− | plt.grid(True)
| |
− | plt.xlabel("x_i")
| |
− | plt.ylabel("Amplitude")
| |
− | | |
− | plt.pause(0.01)
| |
− | plt.delaxes(ax_1)
| |
− | plt.delaxes(ax_2)
| |
− | | |
− | | |
− | | |
− | #Constants
| |
− | N = 20
| |
− | mu = 0.05
| |
− | c = 1
| |
− | a = 1
| |
− | dt = 0.2
| |
− | m = 1
| |
− | rad = 0.4
| |
− | q = -0.1
| |
− | ST = 1000
| |
| | | |
| + | <math>a=1</math> |
| | | |
− | #Creating arrays
| + | <math>D=1</math> |
− | X = np.zeros((1, N))
| |
− | U = np.zeros((N, ST))
| |
− | X0 = np.arange(N)
| |
− | X[0, :] = [it*a for it in range(N)]
| |
| | | |
− | V = np.zeros((1, N))
| + | <math>m=1</math> |
| | | |
− | #fig = plt.figure()
| + | <math>dt=0.001</math> -шаг по времени |
− | #fig, axes = plt.subplots(2)
| |
− | #camera = Camera(fig)
| |
| | | |
− | for st in range(ST):
| + | [[File:Пуля3.gif|500px|]] |
− | #print(st)
| |
− | for sp in range(0, N-1): #loop for springs
| |
| | | |
− | F = c*(X[0, sp+1] - X[0, sp] - 1)
| |
− | V[0, sp] += F / m * dt - 2*mu*V[0, sp]
| |
− | V[0, sp+1] += -F / m * dt - 2*mu*V[0, sp+1]
| |
| | | |
− | #Periodical Boundary cond
| |
− | V[0, N-1] += c * (X[0, 0] + a * N - X[0, N-1] - 1) * dt / m - 2*mu*V[0, N-1] + q*math.cos((st)*2*math.pi/100)
| |
− | V[0, 0] += -c * (X[0, 0] + a * N - X[0, N-1] - 1) * dt / m - 2*mu*V[0, 0]
| |
− | #Positions
| |
− | X[0, :] += V[0, :]*dt
| |
| | | |
− | Plotting(X, rad, X-X0)
| |
− | #camera.snap()
| |
− | #anim = camera.animate(blit=True)
| |
− | #anim.save('MDS.gif')
| |
− | </syntaxhighlight>
| |
− | </div>
| |
− | </div>
| |
| === См. также === | | === См. также === |
| | | |