ЛЕКЦИЯ 12

ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ
ФИЗИЧЕСКИХ ПРОЦЕССОВ

Единичная реализация является основным элементом

случайного выбора (вынимание жетона из вращающегося барабана, поглощение частицы,…), называемый «единичным жребием»

Задача 1

Решение.

Выберем на оси х N точек . Пусть Т1 и Т2 – температуры на верхней и нижней поверхностях. Для каждой точки выполним следующий расчет температуры Т(х).

Напишем на языке Ruby следующую программу

x1= # задаем начальное значение координаты х

y1=0 # задаем начальное значение координаты у

N1=0 # задаем начальное значение числа частиц, достиг

ших верхней поверхности

N2=0 # задаем начальное значение числа частиц, достиг

ших нижней поверхности

for i in 1..100 # цикл для 100 частиц, вылетающих из точки (x1,0)

for k in 1…1000 # цикл для 1000 поворотов частицы

TT=rand(360) # случайное значение угла

x2=x1+s*sin(TT) # новое значение координаты х

y2=y1+s*cos(TT) # новое значение координаты у

if x2>0 and x2<а

end

end

if x2<0 N2=N2+1

end

if x2>a N1=N1+1

end

end

T=(N1*T1+N2*T1)/100

Таким образом мы рассчитали температуру Т(х) в точке (х,0). Теперь необходимо повторить расчет для каждой из точек на оси х и проверить формулу зависимости температуры от координаты.

Эта двумерная задача решается аналогичным способом.

Задаем начальные значения координат x1 и y1 на окружности, рассчитываем методом, описанным ранее число частиц N1, достигших правой стороны квадрата, температура в которой была равна Т1, N2- левой стороны с температурой Т2 , верхней N3 и Т3, нижней N4 и Т4 и вычисляем

НЕ нашли? Не то? Что вы ищете?

где NN число частиц, вылетевших из точки (х. у).

Задача 2

Решение.

Длина свободного пробега имеет непрерывное распределение, поэтому для получения значения случайной величины вначале ищем функцию распределения F(l).

Затем получаем случайную величину , равномерно распределенную на интервале (0,1) и ищем l по формуле

Координаты молекулы в каждый момент времени будем записывать как

N – число положений молекулы. Зная координаты частицы в различные моменты времени, нанеся их на плоскость и соединив линиями, получим траекторию движения. Таким образом, основная задача состоит в том, чтобы найти массивы .

Напишем на языке Ruby следующую программу

x(0)=0 # задаем начальное значение координаты х

y(0)=0 # задаем начальное значение координаты у

l=0.58*10**(-5) # задаем среднее значение длины свободного пробега

N=100 # задаем число положений частицы

for i in 1..100 # цикл для 100 положений частицы

z=rand # значение случайной величины

ll=-l*log(1-z) # значение случайной величины длины свободного пробега

TT=rand(360) # случайное значение угла

x(i+1)=x(i)+ll*sin(TT) # новое значение координаты х

y(i+1)=y(i)+ll*cos(TT) # новое значение координаты у

end

Массивы найдены.

Задача 3

Считая, что при числе нейтронов больше 500 реактор взрывается, найти критический размер реактора. Стенки реактора без отражающих свойств.

Решение.

Будем задавать размер реактора (а) и рассчитывать изменение числа нейтронов со временем. Если при данном размере число нейтронов растет и со временем превышает 500, считаем, что реактор взрывается. Изменяя а, найдем критический размер реактора,

Найдем вначале число нейтронов, вылетающих при делении атома урана. Будем считать, что может вылететь либо 2, либо 3 нейтрона. Найдем закон распределения случайной величины – числа вылетающих нейтронов:

Число вылетающих нейтронов

2

3

Вероятность события

Р1

Р2

Для того, чтобы найти Р1 и Р2 решим систему уравнений

Получим Р1 = 0.53 и Р2 = 0.47

Согласно правилам моделирования дискретной случайной величины, задаем случайную величину . Если считаем, что вылетело 2, а если , то 3 нейтрона.

Координаты нейтронов в каждый момент времени будем записывать как , где в начальный момент времени

Напишем на языке Ruby следующую программу

x(0)=0 # задаем начальное значение координаты х

y(0)=0 # задаем начальное значение координаты у

l=1.7 # задаем длинy свободного пробега

a=20 # задаем размер реактора

N=30 # задаем число нейтронов

for i in 1..300 # задаем число моментов времени

for i in 1..N # цикл для 30 координат нейтронов

x(i)=a*rand # начальное значение координаты х i-го нейтрона

y(i)=a*rand # начальное значение координаты y i-го нейтрона

end

for i in 1..N # цикл для N координат нейтронов

TT=rand(360) # случайное значение угла

x(i)=x(i)+ll*sin(TT) # новое значение координаты х

y(i)=y(i)+ll*cos(TT) # новое значение координаты у

if x(i)>a and x(i)<0 # поглощение нейтронов на стенках

N=N-1

все i больше данного заменяются на i-1

end

if y(i)>a and y(i)<0 # поглощение нейтронов на стенках

N=N-1

все i больше данного заменяются на i-1

end

z=rand # случайная величина, определяющая взаимодейст

вие нейтрона с ядром

# изотропное рассеяние нейтрона

end

and # поглощение нейтрона

N=N-1

все i больше данного заменяются на i-1

end

zz=rand # деление ядра

# деление ядра на 2 нейтрона

N=N+1

все i больше данного заменяются на i+1

x(i+1)=x(i)

y(i+1)=y(i)

end

# деление ядра на 3 нейтрона

N=N+2

все i больше данного заменяются на i+2

x(i+1)=x(i)

y(i+1)=y(i)

x(i+2)=x(i)

y(i+2)=y(i)

end

end

if N>500 print “взрыв” end

end

Для данного а определено, будет ли взрыв через 300 взаимодействий нейтронов с ядрами.

Задача 41

Решение.

Рисунок 1 Рисунок 2

Батарея состоит из 100 элементов, расположенных в 10 строках и 10 столбцах. Ток, получаемый с помощью элемента батареи, который находится в i – й строке и j - м столбце, можно вычислить по формуле , где -внутреннее сопротивление элемента, -внешнее сопротивление для этого элемента. Схема для этого элемента батареи представлена на рисунках 1 и 2. Здесь для элемента (i,j) - сопротивление остальных элементов столбца, а - сопротивление остальных столбцов.

В этом случае сопротивление внешней цепи записывается как

Мощность, выделяемая батареей, рассчитывается по формуле

Согласно условию, на батарею попадает одна частица в секунду.

Напишем на языке Ruby следующую программу

for i in 1..10 # задаем начальные значения сопротивлений

for j in 1.10

r(i,j)=100

end

end

for k in 1..100 # считаем изменение мощности за 100 секунд

i=rand # случайным образом выбираем i-ю строку

j=rand # случайным образом выбираем j –й столбец

r(i,j)=3*r(i,j)

Рассчитываем W

if W> 0.022 stop

end

end

print k

k – время, за которое батарея теряет работоспособность

Задача 5

Решение.

Пусть R(i) – сопротивления, включенные последовательно с источником тока, а R(10+i) – параллельно.

Рассмотрим элементарное звено, состоящее из сопротивлений R1, R2, R3. Тогда сопротивление RR этого звена можно рассчитать по формуле

Напишем на языке Ruby программу для получения 100 значений сопротивления цепи.

for k in 1…100

for i in 1..10

R(i)=2.7+0.6rand # задаем случайную величину R(i)

R(10+i)=2.7+0.6rand # задаем случайную величину R(10+i)

end

R3=R10+R20

for j in 1..9

R1=R(10-j)

R2=R(20-j)

RR(k)=R1+R2*R3/(R2+R3)

R3=RR(k)

end

print RR(k)

end

Теперь имея 100 значений сопротивления цепи строим гистограмму и вычисляем