Текущая версия |
Ваш текст |
Строка 13: |
Строка 13: |
| | | |
| ==Построение модели== | | ==Построение модели== |
− | Рассмотрим одномерный кристалл: цепочку одинаковых частиц массы ''m'', соединенных одинаковыми линейными пружинами с жесткостью ''C''.
| |
| | | |
− | Уравнения динамики кристалла имеют вид:
| |
− |
| |
− | <math> \ddot u_n = \omega_0^2 (u_{n-1} - 2u_n + u_{n+1}),\quad \omega_0 = \sqrt{\frac{C}{m}} ,</math><br>
| |
− |
| |
− | где <math> u_n </math> - перемещение <math>n</math>-й частицы; <math>n</math> - индекс, принимающий произвольные целые значения, <math>C</math> - жесткость связи между частицами, <math>m</math> - масса частицы.
| |
− |
| |
− | Кинетическая температура T определяется как: <math> T(x)= \frac{m}{k_{b}}<\ddot u_i^{2}> </math><br>, где <math>k_{b}</math> — постоянная Больцмана,
| |
| | | |
| ==Результаты== | | ==Результаты== |
− |
| |
− | При исследовании колебаний энергии в одномерных кристаллах рассматривается два метода осреднения случайных процессов:
| |
− |
| |
− | 1. По пространству: система рассчитывается для большого количества частиц, делится на 𝑛 отрезков по 𝑚 частиц, после чего находится среднее
| |
− | значение для каждого отрезка.
| |
− |
| |
− | 2. По ансамблю реализаций: осреднение производится по определенному количеству реализаций одной и той же системы (По ансамблю можно осреднять потому, что мы считаем один и тот же процесс, основанный на генерации случайных чисел).
| |
− |
| |
− |
| |
− | Осреднение по пространству проводится следующим образом: 𝑁 частиц делится на 100 отрезков по 𝑁/100 частиц в каждом отрезке. Для каждого отрезка
| |
− | находится среднее значение, которое и используется для построения графика.
| |
− | Для каждой системы рассматривается 𝑅 реализаций. Температура усредняется
| |
− | сначала по реализациям, а только потом по пространству
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | Рассматривается одномерный кристалл, состоящий из 𝑁 частиц. Исследуются
| |
− | два случая:
| |
− |
| |
− | 1) В первом случае в начальный момент времени первая половина кристалла нагрета с помощью задания случайных скоростей частиц, вторая половина находится в состоянии покоя
| |
− |
| |
− | * Число частиц <math>10^{4}</math>, число реализаций 200
| |
− | [[File:chain1.gif]]
| |
− |
| |
− | Распространение температуры в кристалле (по горизонтали длина кристалла, вертикали - температура)
| |
− |
| |
− |
| |
− | 2) Во втором случае в начальный момент времени всем частицам заданно случайное перемещение, при этом у первой половины перемещения в два раза больше
| |
− |
| |
− | * Число частиц <math>10^{4}</math>, число реализаций 200
| |
− | [[File:chain2.gif]]
| |
− |
| |
− | Распространение температуры в кристалле (по горизонтали длина кристалла, вертикали - температура)
| |
− |
| |
− |
| |
− | Сравнение двух случаев при числе частиц <math>10^{5}</math>, число реализаций 200
| |
− |
| |
− | [[File:download.png]]
| |
− | <div class="mw-collapsible mw-collapsed" style="width:100%" >
| |
− | '''Текст программы на языке Python:''' <div class="mw-collapsible-content">
| |
− | <syntaxhighlight lang="python" line start="1" enclose="div">
| |
− | import matplotlib.pyplot as plt
| |
− | import numpy as np
| |
− | import time
| |
− | from numpy import pi
| |
− | %matplotlib inline
| |
− |
| |
− | from matplotlib import cm
| |
− | from celluloid import Camera
| |
− | camera = Camera(plt.figure(figsize=(8, 8)))
| |
− |
| |
− | start = time.time()
| |
− | Np = 10**4 # mod 100
| |
− | Ns = 12000 # mod 2
| |
− | C = 1
| |
− | m = 1
| |
− |
| |
− | w0 = np.sqrt(C/m)
| |
− | dt = (2*pi/w0)/40
| |
− |
| |
− | T = np.zeros((int(Ns/2)-1,100))
| |
− | def calculation(random_number):
| |
− | global T
| |
− | np.random.seed(random_number)
| |
− | U = np.zeros((2, Np))
| |
− | V = np.zeros(Np)
| |
− | # first step
| |
− | # V[:(Np)//2] = (np.random.random((Np)//2) * 2 - 1)
| |
− | # U[1,:] = V*dt
| |
− |
| |
− | U[1,:Np//2] = (np.random.random(Np//2) * 2 - 1)*2*dt
| |
− | U[1,Np//2:] = (np.random.random(Np//2) * 2 - 1)*dt
| |
− |
| |
− | # next steps
| |
− | l = lambda x,y : (x[y-1] - 2*x[y] + x[y+1])
| |
− | for k in range(0,int(Ns/2)-1):
| |
− | U[0,:Np-1] = dt**2 * l( U[1],np.arange(0,Np-1) ) + 2*U[1,:Np-1] - U[0,:Np-1]
| |
− | U[1,:Np-1] = dt**2 * l( U[0],np.arange(0,Np-1) ) + 2*U[0,:Np-1] - U[1,:Np-1]
| |
− | # velosity and temperature:
| |
− |
| |
− | V_2 = ((U[1] - U[0])/dt)**2
| |
− | T[k,:] = T[k,:] + np.mean(V_2.reshape(100,int(Np/100)), axis=1)
| |
− |
| |
− | Number_of_realization = 200
| |
− | for i in np.random.random(Number_of_realization):
| |
− | calculation(int(i*100))
| |
− |
| |
− | x = np.arange(1,101)
| |
− | for k in range(59):
| |
− | y = T[k*100,:]/(Number_of_realization)
| |
− | y = y - np.mean(y[80:])
| |
− | plt.plot(x, y/np.mean(y[:20]), color='blue')
| |
− | camera.snap()
| |
− | anim = camera.animate(blit=True)
| |
− | anim.save('chain2.gif')
| |
− |
| |
− | end = time.time()
| |
− | print(end-start)
| |
− |
| |
− | </syntaxhighlight>
| |
− | </div>
| |
− | </div>
| |
− |
| |
− |
| |
− | === См. также ===
| |
− |
| |
− | *[[Метод динамики частиц]]
| |
− | *[[Механика дискретных сред]]
| |
− | *[[Введение в механику дискретных сред]]
| |
− | *[[Виртуальная лаборатория]]
| |
− | *[[Курсовые_работы_по_ТОМДЧ:_2012-2013| Курсовые работы 2012-2013 учебного года]]
| |
− | *[[Курсовые_работы_по_ТОМДЧ:_2013-2014| Курсовые работы 2013-2014 учебного года]]
| |
− | *[[Курсовые_работы_по_ВМДС:_2014-2015 | Курсовые работы 2014-2015 учебного года]]
| |
− | * [[ Курсовые_работы_по_ВМДС:_2016-2017 | Курсовые работы 2016-2017 учебного года]]
| |
− |
| |
− |
| |
− | [[Category: Студенческие проекты]]
| |
− | [[Category: Механика дискретных сред]]
| |