- •Предисловие
- •Введение
- •Зачем нужен такой практикум?
- •О чем сказано далее
- •О системе MATLAB
- •Первые задачи
- •Фигуры Лиссажу
- •Биения
- •Волны
- •Основные графические объекты и их использование
- •Отрисовка движущихся кривых
- •Об использовании безразмерных переменных
- •Маятник
- •Свободные колебания
- •Вынужденные колебания
- •Переходные колебания
- •Резонанс
- •О случайном движении
- •Движение частиц в центральном поле
- •Траектория финитного движения
- •Влияние малого возмущения
- •Движение двух частиц
- •Случайные блуждания и диффузия
- •Закономерности случайных блужданий
- •Оценка параметров движения броуновской частицы в жидкости
- •Программа, изображающая случайные блуждания
- •Броуновские частицы в поле тяжести
- •Броуновское движение
- •Случайные силы
- •Корреляционные функции
- •Шары
- •Расчет движения шаров
- •Алгоритм расчета
- •Процедура Balls
- •Динамический хаос
- •Почему движение шаров становится непредсказуемым?
- •Как убедиться в появлении хаоса?
- •Функции распределения
- •Стохастический нагрев и стохастическое охлаждение
- •Потери пучка при прохождении через вещество
- •Эффективные сечения
- •Потери частиц пучка при прохождении слоя
- •Потери энергии
- •Распределение по углам и энергиям
- •Работа с сигналами и модель диодного выпрямителя
- •Работа с сигналами
- •Расчет простейших цепей
- •Статическая модель диода. Решение нелинейных уравнений
- •ПРИЛОЖЕНИЕ
- •Свободные колебания
- •Электрические и магнитные поля
- •Частица в магнитной ловушке
- •Фокусировка пучков частиц
- •Концентрация частиц
- •Приближенные методы решения систем дифференциальных уравнений
- •Моделирование распределения случайных величин
- •Компиляция файлов MATLAB
- •Список литературы
- •Работа в командном окне
- •Вход в систему MATLAB
- •Интерактивный доступ к справочной информации и документации
- •Команда hеlр
- •Команда lookfor
- •Меню Help
- •Редактирование и перевызов командной строки
- •Формат вывода
- •Копия протокола сессии
- •Введение матриц
- •Явное определение матриц
- •Функции построения матриц
- •Операции, выражения и переменные
- •Правила записи операторов
- •Матричные операции
- •Операции с массивами
- •Сохранение данных из рабочей области
- •Операторы for, while, if, case и операторы отношения
- •Цикл for
- •Цикл while
- •Условный оператор if
- •Оператор переключения case
- •Условия (операторы отношения)
- •Функция find
- •Функции MATLAB
- •Скалярные функции
- •Векторные функции
- •Матричные функции
- •M-файлы
- •Файлы-программы, или сценарии
- •Файлы-функции
- •Текстовые строки, сообщения об ошибках, ввод
- •Работа с m-файлами
- •Список путей доступа
- •Работа со списком путей доступа
- •Текущий каталог
- •Средство просмотра и редактирования путей доступа Path Browser
- •Использование редактора/отладчика
- •Отладка m-файлов
- •Сравнение алгоритмов: flops и etime
- •Графика
- •Плоские графики
- •Команда plot
- •Разметка графика и надписи
- •Управление осями при выводе графиков
- •Несколько графиков на листе
- •Специальные виды графиков
- •Столбиковые диаграммы
- •Ступенчатые кривые
- •Гистограммы
- •Изображение функций
- •Трехмерные изображения
- •Одномерная кривая
- •Сеточные поверхности
- •Изолинии
- •Дескрипторная графика (графика низкого уровня)
- •Графические объекты и их иерархия
- •Дескрипторы и работа с ними
- •Свойства графических объектов и работа с ними. Функции get и set
- •Движущиеся графики (анимация)
- •Разработка графического интерфейса пользователя
- •Создание внешнего вида интерфейса
- •Способы взаимодействия графического интерфейса с функциями пользователя
- •Общая структура функции NAME.M графического интерфейса
- •Функционирование графического интерфейса
- •Разработка функции Run
- •Разработка функции Exit
- •Разработка функции Edit
постоянной скоростью, естественно, в системе отсчета, связанной с ним. Используя эту процедуру, можно найти движение шаров, если скорость «ящика» изменяется скачками.
Задание 5 Рассмотрите периодическое движение ящика вдоль одной из стенок, при котором ящик половину периода движется со скоорстью U, а второю – со скоростью −U. Постройте график зависимости энергии шаров от времени. Будет ли расти средняя энергия (температура) газа шаров?
Для исследования столкновений протонов с антипротонами на ускорителях со встречными пучками необходимо сделать летящие навстречу друг другу сгустки частиц очень концентрированными, а для этого нужно ослабить относительное движение частиц внутри каждого из сгустков.
Один из способов сделать это – это так называемое стохастическое охлаждение. Можно добиться замедления относительного движения частиц, если по-разному воздействовать на сгусток в зависимости от движения частиц в текущий момент. Такое воздействие достигается благодаря тому, что информация о текущем состоянии частиц, движущихся по дуге, успевает опередить сгусток, двигаясь по более короткому прямому пути. При этом можно фактически оперировать лишь информацией, относящейся только к сгустку в целом.
Управляя движением «ящика», можно смоделировать стохастическое охлаждение.
Задание 6 Получите стохастическое охлаждение газа шаров, запрограммировав выбор той или иной величины скорости «ящика» в зависимости от скорости центра масс шаров.
9. Потери пучка при прохождении через вещество
В этой работе можно познакомиться с основным методом моделирования, применяемым при исследовании прохождения пучков частиц через вещество – методом статистического моделирования (называемым методом Монте-Карло). При этом «судьба» каждой частицы «разыгрывается» с помощью случайного выбора, а полученные для множества частиц результаты подвергаются статистической обработке. Метод применяется, например, при проектировании ядерных реакторов, детекторов частиц на ускорителях и обработке получаемых результатов (а также во многих других случаях, скажем, при исследовании распространения мутаций в среде живых организмов).
64
Мы будем изучать, естественно, очень простой вариант задачи – прохождение пучка тяжелых частиц (A) через слой газа, состоящего из легких (O). К тому же будем полагать скорости частиц газа до столкновения с частицами пучка равными нулю. Не будем также учитывать изменений, происходящих в газе вследствие прохождения пучка. Это не ограничивает существенно общности задачи.
9.1. Эффективные сечения
Частицы можно представлять шариками радиусов RA и RO. Пусть частица A летит так, что центр ее должен пролететь на расстоянии ρ от центра частицы O. Столкновение произойдет, если ρ < R, где R = RA + RO. Фактически частица O образует для частиц A «преграду», площадь которой σ = πR2. Эта величина называется эффективным сечением столкновения32. В зависимости от величины ρ (называемой прицельным параметром) определяются угол отклонения, передача энергии от частицы A частице O и т.п. Соответственно можно определить величины эффективных сечений, например, для потери частицей A определенной энергии от ε1 до ε2, отклонения на угол, больший данного и т.п. Определяются и дифференциальные эффективные сечения, например, дифференциальное эффективное сечение потери энергии частицей A
dσdε = f(ε)
определяется так, что величина площадки dσ = f(ε)dε отвечает потере энергии в интервале от ε до ε + dε (при достаточно малой величине dε). Подробнее об этом сказано в работе[7, §18], мы будем использовать взятые оттуда формулы.
Характерные размеры пучка частиц – сантиметры или даже микроны – во много раз превосходят характерные прицельные параметры. Именно поэтому здесь уместен статистический подход. Пусть концентрация газа-мишени составляет nO частиц O на 1 см3. Тогда в очень тонком слое (толщины dx ) на площадь S приходится nOS dx частиц O, а перекрываемая ими площадь равна dS = σnOSdx. Можно сказать также, что dW = dS/S = σnO dx представляет долю площади, перекрытую частицами O в слое dx. Иначе говоря, это вероятность столкновения частицы в данном слое. Имея в виду возможность выбрать достаточно тонкий слой, мы можем пренебречь возможностью, что какая-то из частиц O будет «затенена» другими. Фактически для этого достаточно условия dW 1.
32Для столкновений атомов характерные величины эффективных сечений имеют порядок 10−16 см2, для нейтронов и атомных ядер – 10−26 см2, на современных ускорителях изуча-
ются сечения еще на 10 - 12 порядков меньшие.
65
9.2. Потери частиц пучка при прохождении слоя
Начнем с простейшей задачи о выбывании частиц из пучка. Пусть любое столкновение ведет к выбыванию частицы – сечение выбывания равно σ. Задача об ослаблении пучка легко решается в таком случае аналитически. Пусть количество частиц A в исходном пучке равно NA0 . После прохождения слоя dx это число уменьшится на dNA = NAdW . Введя число частиц, оставшихся в пучке, NA(x), имеем
dNA(x) = −NA(x)nOσdx. |
(1) |
Решение этого дифференциального уравнения, удовлетворяющее условию NA(0) =
NA0,
NA(x) = NA0 exp(−bx), |
(2) |
где b = nOσ. Величина 1/b определяет толщину слоя, в котором пучок потеряет значительное число частиц (ослабнет в e =2.7 раза). Приведенное решение задачи относится к средним значениям числа частиц.
Теперь покажем, как решается эта задача методом Монте-Карло. Будем «пропускать» частицу через тонкие слои толщиной dx, пока она не пройдет слой x (или поглотится). «Розыгрыш» для слоя dx состоит в том, что мы выбираем случайное число с равномерным распределением от 0 до 1 (функция rand в MATLAB) и сравниваем с величиной dW ; если rand< dW , то частица выбывает, в противном случае перемещается в следующий слой. Пропустив Na частиц через слой толщины x, мы можем получить число оставшихся частиц Na(x).
Приведем отрезок программы, в котором через слой толщины Xmax «пропускается» Na частиц. При реализации этой части программы предполагается, что для всех частиц заведены два вектора - вектор координат, достигнутых каждой из частицей к текущему моменту времени, и вектор состоящий из 0 и 1. Каждая 1 соответствует еще не выбывшей частице, а 0 - уже выбывшей из потока.
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Программа расчета потерь пучка %
%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear; |
|
Na=250; k=(1:Na)’; |
|
no=100; Section=0.05; |
|
dx=0.01; |
|
x=zeros(size(k)); |
% Начальный вектор координат |
sc=ones(size(k)); |
% Начальный вектор-счетчик |
66
dW=no*Section*dx; |
% Вероятность поглощения на шаге dx |
hl=line(x,k); |
% Подготовка Na точек для рисования |
set(hl,’Marker’,’o’,’MarkerSize’,3); |
|
axis([0 1 0 Na+1]); |
% Масштабирование осей |
pause; |
% Пауза перед запуском основного цикла |
%Далее выполняется цикл, на каждом шаге которого
%координата x возрастает на dx до тех пор, пока
%частица не пройдет путь Xmax или не поглотится while (any(sc)> 0)
ra=rand(size(k)); |
% Расчет вероятностей с помощью |
|
% датчика случайных чисел для |
|
% всех частиц |
k1=find(ra-dW< 0); |
% Определение номеров частиц |
|
% подлежащих отбраковке |
sc(k1)=0; |
% Зануление счетчика отбракованной частицы |
x=x+sc*dx; |
% Продвижение на dx остальных частиц |
set(hl,’XData’,x); |
% Рисование |
end; |
% Конец цикла while |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Программа Beam1 содержит моделирование выбывания частиц из пучка. Заметим, что отклонения от (2) делают найденную зависимость более похо-
жей на наблюдаемую экспериментально, поскольку здесь моделируется не только среднее, но и наличие флуктуаций относительно среднего. Величина же флуктуаций зависит от числа проходящих частиц и тоже может быть определена с помощью моделирования.
Число частиц Nf , прошедших через достаточно толстый слой, оказывается малым и сильно флуктуирует (изменяется от запуска к запуску). Распределение вероятностей для доли прошедших частиц p = Nf /Na – это распределение Бернулли.
Задание 1. Постройте согласно формуле (2) зависимость Na(x) в масштабе, удобном для сравнения с модельной зависимостью (гистограммой).
Постройте распределение для доли частиц, прошедших толстый слой. Наблюдайте изменение этого распределения при изменениях числа частиц в запуске.
Подобным же образом моделируются более сложные процессы. Пусть, например, при столкновении с частицей газа частица пучка A может не только поглотиться, но и превратиться в частицу B, летящую в том же направлении, причем
67
эффективное сечение такого превращения равно σAB, а эффективное сечение поглощения частиц A равно σA.
Приведем участок программы, моделирующей «судьбу» частиц в этом случае.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Моделирующая часть программы с поглощением A |
% |
% и превращением A -> B |
% |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%SecA - сечение поглощения A
%SecAB - сечение превращения A в B
%scA - счетчик числа частиц типа A
%scB - счетчик числа частиц типа B
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear; |
% Очистка рабочей области |
Na=25; |
% Начальное число частиц A |
L=5; k=(1:Na)’; no=100;dx=0.01; |
|
SecA=0.1; SecAB=0.15; |
|
x=zeros(size(k)); |
% Начальный вектор координат |
scA=ones(size(k)); |
% Вектор-счетчик частиц A |
scB=zeros(size(k)); |
% Вектор-счетчик частиц B |
dWa=no*dx*SecA; |
% Вероятность поглощения A на шаге dX |
dWab=no*dx*SecAB; |
% Вероятность A -> B на шаге dX |
.......................................
%Имитация поглощения и превращения частиц
%Пока есть частицы A и не пройден путь L while (any(scA)> 0 & all(x)< L)
ra=rand(size(k));
ka=find(ra-dWa< 0); |
% Номера поглощенных частиц A |
scA(ka)=0; |
% Выбывание частиц типа A |
kb=find(dWa< ra & ra< dWa+dWab) |
|
scB(kb)=scA(kb); |
% Превращение A в B |
scA(kb)=0; |
% Исчезновение этих A |
x=x+scA*dx+scB*dx; |
|
pause(1);
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
68