Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практикум по матлабу.pdf
Скачиваний:
156
Добавлен:
29.03.2015
Размер:
1.19 Mб
Скачать

Функции x(t)x(t + ξ) , x(t)vx(t + ξ) и т.п. зависят не только от ξ, но и от t, и мы их не рассматриваем. Для гармонического осциллятора, в отличие от свободной частицы, эти функции не зависят от t и их интересно изучать наряду с корреляционной функцией скоростей.

Задание 4. Получите корреляционную функцию скоростей для броуновских частиц.

Для усреднения можно рассматривать одновременно движение многих частиц или суммировать вклады, получаемые за разные интервалы времени для одной частицы.

Задание 5. Получите для гармонического осциллятора корреляционные функции x(t)x(t + ξ) , x(t)v(t + ξ) , v(t)v(t + ξ) .

При этом интересно рассмотреть случаи ωτ 1; ωτ 1; ωτ 1.

8.Шары

В этой работе будем изучать «газ», образованный шарами, которые двигаются без трения по плоскому квадратному столу и абсолютно упруго сталкиваются друг с другом и со стенками («идеальный биллиард»). Едва ли можно наблюдать такой газ где-нибудь, кроме экрана дисплея. Тем не менее, это хорошая модель настоящего газа.

Пожалуй, самое интересное, что можно увидеть в этой работе, – это возникновение «молекулярного хаоса» (даже при движении всего лишь двух шаров).

Кроме того, можно получать функции распределения по скоростям, наблюдая, как с ростом числа шаров распределения приближаются к максвелловскому. Можно изучать смесь газов с частицами разной массы, получать распределение по высоте в поле тяжести, получать так называемые стохастический нагрев и стохастическое охлаждение и т.д.

8.1.Расчет движения шаров

8.1.1.Алгоритм расчета

Движение шаров за время t рассчитывается довольно просто. Определим моменты столкновения для каждой пары шаров без учета возможных помех со стороны других шаров и стенок, а также моменты соударения каждого из шаров с каждой из стенок, неограниченно продолженной, и снова без учета всех помех.

53

Рис. 8. Схема «стола» и системы координат

Далее выберем самое раннее из числа этих столкновений (отбросив предварительно те, которые происходили в прошлом). Ясно, что именно это столкновение и произойдет, так как никакое другое не успеет ему помешать. Если промежуток времени до этого столкновения t больше, чем заданный интервал t, то в течение времени t не произойдет никаких столкновений, так что координаты в момент t определяются очевидным образом:

ri(t) = ri + vi t.

Если же t < t, то нужно рассчитать смещение шаров за время t ,– в результате этого смещения пара шаров (скажем, i-й и j-й) достигают соприкосновения. Затем рассчитываем изменение скоростей этой пары шаров, происходящее в результате столкновения. После этого задача сводится к предыдущей (только «контрольное время» стало меньше t → t − t ): нужно вновь найти ближайшее столкновение, сравнить время до него с новым значением t и т.д. – пока заданный интервал времени не будет исчерпан.

Момент столкновения шара, например, с правой стенкой (см. рис. 8) определяется из уравнения x + vxt = L − R, где L– размер стола, R – радиус шара. Изменение скорости при таком столкновении vx → −vx.

Момент столкновения пары шаров находится из квадратного уравнения (r + vt )2 = 4R2, где r = ri rj, v = vi vj.

54

Изменение скоростей при столкновении

vi vi ∆v, vj vj + ∆v,

где ∆v = n(nv), n = r/(2R) 25

Несложно «включить» также поле тяжести (иначе говоря, наклонить биллиардный стол). Скажем, если компонента ускорения, создаваемого силой тяжести в направлении против оси Y, равна g, то момент столкновения с «потолком» находится из уравнения y + vyt − gt 2/2 = L − R.

8.1.2.Процедура Balls

Описанный алгоритм запрограммирован в виде довольно сложной функции Balls. Для желающих глубже разобраться в алгоритме далее приведен текст процедуры Balls2 на языке MATLAB для 2 шаров.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Функция расчета соударения двух шаров balls2 %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function[r,v]=balls2(rin,vin,dt);

global rball lx ly ;

% Радиус шаров и размеры стола

a=rball; a2=4*a*a; eps=1E-10;

r=rin; v=vin;

% Координаты и скорости шаров

ldl=[a a; a a];

% Координаты левого нижнего края

 

% области, доступной центрам шаров,

 

% повторенные дважды - для каждого шара

lur=[lx-a ly-a ; lx-a ly-a];

% Правый верхний угол

t=dt;

% Контрольное время - время до выхода из "balls"

while (t> 0)

 

% Учтем возможное наличие очень малых компонент скоростей

vm=(v.*v < eps);

 

 

 

 

v1=v+vm;

 

 

 

 

 

 

 

tdl=(ldl-r)./v1;

 

% Моменты столкновения со стенками l и d

 

 

% учтем столкновения в прошлом и в очень нескорые)

 

 

 

 

 

 

 

25 Если массы шаров различны, то

 

 

 

 

 

vi vi

mj

 

vj vj +

mi

 

 

∆v,

 

∆v.

 

mi + mj

mi + mj

55

tdl=tdl+1E10*((tdl< =0)+vm);

tur=(lur-r)./v1;

% Столкновения со стенками r и u

tur=tur+1E10*((tur< =0)+vm);

%Выбор самого раннего столкновения со стенкой

[t1,j1]=min(tdl(:));

[t2,j2]=min(tur(:)); if(t1< t2)

t0=t1; j0=j1; else

t0=t2; j0=j2; end;

%Находим момент столкновения шаров друг с другом r0=r(:,1)-r(:,2); v0=v(:,1)-v(:,2);

rr=r0’*r0; vv=v0’*v0; rv=r0’*v0; d=rv*rv-(rr-a2)*vv; if (d> 0) & (rv< 0) & (vv> 1E-10)

tb=-(sqrt(d)+rv)/vv; else

tb=inf;

 

end;

% if

% Выбор самого раннего соударения

if(t< t0)&(t< tb)

 

r=r+v.*t;

% сдвиг шаров

elseif(t0< tb)

 

r=r+v.*t0;

 

% и изменение скорости при ударе о стенку v(j0)=-v(j0);

else t0=tb;

r=r+v.*t0; r0=r(:,1)-r(:,2); v0=v(:,1)-v(:,2); dv=r0’*v0/a2*r0; ddv=[-dv,dv];

% Изменение скоростей при столкновении шаров

v=v+ddv;

 

end;

% if

56

%После столкновения сделаем маленький сдвиг r=r+v*eps;

t=t-t0-eps;

end;

% while

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Подобная функция для произвольного числа шаров, написанная для ускорения счета на языке C, преобразована к виду, допускающему подключение ее к системе Matlab. Она вызывается из программы написанной на языке MATLAB как обычная функция. Ниже приведены необходимые для ее использования сведения. Функция

[xf,yf,vxf,vyf]= Balls(n,x,y,vx,vy,dt,R,Lx,Ly,m)

по известным значениям координат центров n шаров ri = [x(i), y(i)]) и компонент их скоростей vi = [vx(i), vy(i)]), (i = 1, 2, ..., n) определяет значения этих же величин через заданный интервал времени dt и присваивает переменным rf i = [xf(i), yf(i)] vf i = [vxf(i), vyf(i)]). Шары движутся по прямоугольному столу размером Lx × Ly , радиусы шаров одинаковы и равны R, значения масс заданы в массиве m и могут быть различными. 26

Начало координат расположено в левом «нижнем» углу стола, оси координат параллельны его сторонам (см. рис. 8).

Предусмотрено число шаров n ≤ nmax = 25. Переменные R, Lx, Ly, m можно не задавать. Тогда будут приняты значения R = 20, Lx = Ly = 256, а массы выбраны одинаковыми.

Начальные значения координат центров шаров должны быть выбраны в прямоугольнике R ≤ x(i) ≤ Lx − R, R ≤ y(i) ≤ Ly − R и притом так, чтобы расстояние между любыми центрами было не меньше, чем 2R. 27

Вычисления в процедуре Balls производятся по точным формулам. Программа, которая демонстрирует движение дисков на экране, приведена в

файле GAS.m.

26Во избежание недоразумений отметим, что в процедуре Balls не предусмотрена возмож-

ность одновременного столкновения более чем двух шаров, поскольку такое столкновение представляется совершенно невероятным. Если даже будут заданы условия, заведомо приводящие к тройному соударению, то в процедуре Balls такое соударение будет трактоваться как последовательность парных.

27В противном случае, т.е. при выборе нефизических начальных условий, возможны

неправильные результаты или сбой счета.

57