Вы находитесь на странице: 1из 180

КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ

УНИВЕРСИТЕТ
ФИЗИЧЕСКИЙ ФАКУЛЬТЕТ

ПРОШИН Ю.Н., ЕРЕМИН И.М.

ВЫЧИСЛИТЕЛЬНАЯ ФИЗИКА

(Практический курс)

Казань 2009
УДК 519.63

Печатается по решению Редакционно-издательского совета ГОУ


ВПО «Казанский государственный университет им. В.И. Ульянова-Ленина»

Редакционно-издательского совета физического факультета


Протокол № 9 от 9 декабря 2009 г.

заседания кафедры теоретической физики


Протокол № 15 от 20 ноября 2009 г.

Авторы-составители
доктор физ. мат. наук, проф. Ю.Н. Прошин,
канд. физ. мат. наук И.М. Еремин

Научный редактор
доктор физ.-мат. наук, проф. Прошин Ю.Н.

Рецензент
доктор физ.-мат. наук, проф. Сушков С.В. (ТГГПУ)

Вычислительная физика (Практический курс): Учебно-


методическое пособие / Ю.Н. Прошин, И.М. Еремин. – Казань: Казанский
государственный университет, 2009. – 180 с.

Пособие написано для студентов, магистрантов, аспирантов физиче-


ского факультета и предназначено для развития навыков работы в среде
MatLab. В пособии достаточно подробно разбираются математические мо-
дели, алгоритмы конкретных вычислительных задач, приводятся листинги
программ, реализующих указанные алгоритмы. Акцент сделан на рассмот-
рение практических задач, возникающих во многих разделах физики. Посо-
бие рассчитано на читателей, имеющих хотя бы небольшой опыт работы с
MatLab или другим вычислительным пакетом. Поскольку в каждой из работ
имеется большой набор контрольных заданий, пособие будет полезно и
преподавателям, которые смогут варьировать задания между студентами.

© Казанский государственный
университет, 2009

2
Введение

В сборнике собраны семь лабораторных работ по вычислительной


физике с использованием программы MatLab®, разработанной фирмой
MathWorks для численных и символьных вычислений, визуализации
результатов (заметим, что дополнительные программные средства к
MatLab – toolboxes – многократно увеличивают возможности этой сис-
темы и покрывают очень широкий спектр приложений [1-8]).
Для удобства сделано так, что все главы – лабораторные работы –
могут быть использованы независимо друг от друга. Для этого в каж-
дой главе проводится своя нумерация формул, рисунков, глава закан-
чивается списком литературы, использование которой было бы полез-
но для более глубокого изучения данной темы. В тексте каждой главы
достаточно подробно разбираются математические модели, алгоритмы
конкретных вычислительных задач. Приводятся подробные листинги
программ, реализующих указанные алгоритмы. В каждой из работ
имеется большой набор контрольных заданий, позволяющий препода-
вателю варьировать задания между студентами.
Приведем список работ:
Работа 1. Решатели систем дифференциальных уравнений в пакете
MatLab, стр. 7;
Работа 2. Цепочка связанных гармонических осцилляторов:
свободные колебания, стр. 44;
Работа 3. Цепочка связанных гармонических осцилляторов:
вынужденные колебания, стр. 63;
Работа 4. Волновые пакеты, движущихся в среде с дисперсией: Фурье-
анализ , стр.74;
Работа 5. Стационарное уравнение Шредингера: моделирование
квантовых систем , стр.95;
Работа 6. Моделирование случайных систем, стр. 123;
Работа 7. Метод Монте-Карло для статистических систем. Модель
Изинга, стр.137.
Предполагается, что читатель обладает основными навыками ра-
боты в системе MatLab: интерактивным диалогом в командном окне,
написанием файлов-функций и файлов-программ, обращением к спра-
вочной системе и демо-примерам MatLab, и так далее – или может

3
этому легко научится. Пособие не является введением в MatLab, по
вопросам применения программных систем следует обращаться к до-
кументации MatLab и многочисленным учебникам по MatLab [1-8] и
по вычислениям с его помощью [9-23], некоторые из них бесплатно
размещены в Интернет, другие до сих пор можно купить или через
Интернет, или в настоящих книжных магазинах. Большинство же из
них по тем или иным причинам могут оказаться недоступными для
студентов. Поэтому при составлении лабораторных работ были ис-
пользованы не только оригинальные задачи, но и материалы и алго-
ритмы, изложенные в книгах [11,12,19,20,24-29], при этом все про-
граммы были заново написаны и протестированы.
Все программы, приведенные в книге, можно найти в разделе
"Методические материалы" на сайте кафедры теоретической физики
КГУ (http://www.ksu.ru/f6/k2). Если говорить о материалах, доступных
через Интернет, отметим образовательный сайт www.exponenta.ru, на
котором можно найти много интересных материалов на русском языке, в
том числе замечательную книжку Коткина и Черкасского [9] , которая мо-
жет быть рекомендована не только как дополнительный сборник практиче-
ских заданий по вычислительной физике, но и как изложение необходимых
и полезных сведений о работе и программировании в среде MatLab. При-
ведем также ссылку на сайт разработчика системы MatLab
(http://www.mathworks.com). Сайт англоязычный и на нем, в частности,
можно найти классическую книгу Молера по вычислениям в MatLab [21] и
многие другие материалы.
Составители благодарны студентам и магистрантам кафедры тео-
ретической физики КГУ за детальную проверку многих заданий.
Настоящий сборник написан при поддержке гранта № 2.1.1/2985
Министерства образования и науки Российской Федерации в рамках
программы "Развитие научного потенциала высшей школы".

Литература
1. Потемкин В. Г. Система инженерных и научных расчетов
MATLAB 5.х. В 2 т. – М.: ДИАЛОГ-МИФИ, 1999.
2. Мартынов Н.Н., Иванов А.П. MATLAB 5.x. Вычисления, визуа-
лизация, программирование. – М.: Кудиц-образ, 2000. – 336 с.
3. Дьяконов В.П. MATLAB 6. Учебный курс. – СПб.: Питер, 2001. –
592 с.
4
4. Дьяконов В.П. MATLAB 7.*/R2006/R2007: Самоучитель. – М.:
ДМК Пресс, 2008. – 768 с.
5. Ануфриев И.Е., Смирнов А.Б., Смирнова Е.Н. MatLab 7. - СПб.:
БХВ-Петербург, 2005. – 1104 c.
6. Половко А. М., Бутусов П. Н. MatLab для студента. — СПб.:
БХВ-Петербург. 2005. – 320 с.
7. Davis T.A., Sigmon K. MATLAB® Primer. Seventh Edition. –
Chapman & Hall/CRC, 2005. – 230 с.
8. Kalechman M. Practical MATLAB® for Engineers. –Taylor & Fran-
cis Group, LLC. CRC Press, 2009. – 736 с.
9. Коткин Г.Л., Черкасский В.С. Компьютерное моделирование фи-
зических процессов с использованием MatLab. - Новосибирск:
НГУ, 2001. – 173 с.
(http://www.exponenta.ru/educat/systemat/cherkassky/main.asp)
10. Харланова Ю.В. MATLAB 6.1: вычисления, визуализация, програм-
мирование. – Тула: ТГПУ, 2006. – 23 c.
(http://www.exponenta.ru/educat/systemat/harlanova/ index.asp)
11. Кетков Ю.Л., Кетков А.Ю., Шульц М.М. MatLab 7: программи-
рование, численные методы. – СПб.: БХВ-Петербург, 2005. – 752 с.
12. Поршнев С.В. Компьютерное моделирование физических процес-
сов в пакете MatLab. М.: Горячая линия – Телеком, 2003. – 592 с.
13. Потемкин В. Г. Вычисления в среде MATLAB. – М.: ДИАЛОГ-
МИФИ, 2004. – 720 с.
14. Чен К., Джиблин П., Ирвинг А. MATLAB в математических ис-
следованиях. – М.: Мир, 2001. – 346 с.
15. Лазарев Ю. Моделирование процессов и систем в MATLAB: Учеб-
ный курс. – СПб.: Питер; Киев: Изд. группа BHV, 2005. – 512 с.
16. Говорухин В., Цибулин В. Компьютер в математических иссле-
дованиях: Учебный курс. – СПб.: ПИТЕР, 2001. – 633 с.
17. Бозиев С.Н. MATLAB 2006a в примерах. – РГУ нефти и газа им.
И.М. Губкина, 2006 – 150 с.
18. Дащенко А.Ф., Кириллов В.Х., Коломиец Л.В., Оробей В.Ф.
MATLAB в инженерных и научных расчетах. – Одесса: Астро-
принт, 2003. – 214 с.
19. Hahn B.D., Valentine D.T. Essential MATLAB for Engineers and
Scientists. Third edition. – Elsevier Ltd., 2007. – 449 с.
5
20. Yang W.Y., Cao W., Chung T.S., Morris J. Applied numerical me-
thods using MATLAB – A John Wiley & Sons, Inc., 2005. – 520 с.
21. Moler С. Numerical Computing with MATLAB. Society for Industri-
al & Applied Mathematics (http://www.mathworks.com/moler)
22. Алексеев Е.Р., Чеснокова О.В. Решение задач вычислительной
математики в пакетах Mathcad 12, MATLAB 7, Maple 9. - М. : НТ
Пресс, 2006. - 496 с.
23. Шампайн Л. Ф., Гладвел И., Томпсон С. "Решение обыкновенных
дифференциальных уравнений с использованием MATLAB:
Учебное пособие. 1-е изд. –СПб.: Лань, 2009. – 304с.
24. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. Т.
1-2, 1990, М.: Мир.
25. Деминов Р.Г., Сайкин С.К., Прошин Ю.Н. Вычислительные ме-
тоды в теоретической физике. 2000, Казань: КГУ. – 35 с.
26. Левицкий А.А. Информатика. Основы численных методов: Лабо-
раторный практикум. – Красноярск: ИПЦ КГТУ, 2005. – 111 с.
(http://www.exponenta.ru/educat/systemat/levitsky/index.asp)
27. Федоренко Р.П. Введение в вычислительную физику: Учеб. по-
собие для вузов. – М.: Изд-во Моск. физ,-техн, инта, 1994. – 528 с.
28. Ильина В.Л., Силаев П.К. Численные методы для физиков-теоре-
тиков. I. — Москва-Ижевск: Институт компьютерных исследова-
ний, 2003. – 132 с.
29. Лоскутов А.Ю., Михайлов А.С. Основы теории сложных систем. –
М.–Ижевск: Институт компьютерных исследований, 2007. – 620 с.

6
Работа 1. Решатели систем дифференциальных уравне-
ний в пакете MatLab

Простой пример
Для решения систем обыкновенных дифференциальных уравнений
(ОДУ) (Ordinary Differential Equation – ODE) существует несколько
встроенных процедур (см. ниже раздел "Приложение 1. Решатели сис-
тем обыкновенных дифференциальных уравнений в MatLab" на стр.
35). В качестве самого простого примера приведем решение следую-
щего уравнения
dy
= −2 xy (1)
dx
с начальным условием
y (0) = 1 (2)
и аналитическим решением
2
y ( x) = e − x . (3)
Рассмотрим применение процедуры ode45. Как один из возмож-
ных форматов вызова, можно предложить такой:
[T,Y]=ode45(@DiffEquatFunc,[Tstart,Tfinal],StartVector).
Приведем снимок экрана, который соответствует численному реше-
нию этой задачи (1)-(3) в системе MatLab.

Здесь показана часть командного окна (Command Window), где была


вызвана стандартная процедура ode45 с заранее написанной и сохра-
ненной функцией func1, которая на рисунке воспроизведена в окне
7
Редактора (Editor). Результат с помощью команды plot выведен в
графическое окно (Figure 1).
Файл-функция, описывающая правую часть уравнения (1), – тек-
стовый файл с расширением func1.m – содержит всего две строки
function dd=func1(x,y) % название
dd=-2*x*y; % правая часть ДУ
Знаком % начинаются комментарии. Вызываться такая функция может
из другой программы, функции, или, как в этом случае, из командного
окна
>> [T,Y]=ode45(@func1,[0,2],1);
Здесь задан временной интервал от Tstart=0 до Tfinal=2 и началь-
ное значение функции (2) StartVector=1. Знак ";", заканчивающий
строку, подавляет вывод результата в командном окне (посмотрите
сами, что получится без него!). График полученной таким образом
функции Y(T) воспроизводится вызовом встроенной функции plot
>> plot(T,Y);
Следующей строкой мы кружочками нарисовали на том же графике
точное решение (3) в точках полученного вектора-столбца T:
>> hold on; plot(T,exp(-T.^2),'ro'); hold off
Отметим, что для данного примера относительной точности 10-3, зало-
женной по умолчанию в процедуре ode45, более чем достаточно.
В общем случае, процедура ode45 может решать систему уравне-
ний следующего вида:
⎛ x1 (t ) ⎞
⎜ ⎟
d x (t )
X(t ) = F(t , x1 , x2 ,..., xn ) , где X (t ) – вектор-столбец ⎜ 2 ⎟.
dt ⎜ ... ⎟
⎜ ⎟
x
⎝ n ⎠ ( t )

F(t, x1, x2, …, xn) – функция-столбец, зависящая от времени и компо-


нент вектора x.
Заметим, что уравнение (1) можно решить в MatLab и символьно
(см. ниже "Приложение 2. Решение систем дифференциальных урав-
нений в символьном виде в системе MatLAB" на стр. 41). Приведем
часть командного окна, где была вызвана стандартная процедура
dsolve

8
Здесь также использовано начальное условие (2). Видим, что с точно-
стью до переобозначения x → t результат совпадает с (3).
Наличие символьного решения очень полезно, так как оно позво-
ляет проверить результаты численных расчётов. В случае отсутствия
точного символьного решения необходимо проанализировать полу-
ченный численный результат на его "физичность", выполнение извест-
ных предельных случаев, а также проследить, как меняется результат в
зависимости от изменения точности.

Метод Рунге-Кутта
В последующем мы будем часто ссылаться на различные численные
методы решения дифференциальных уравнений. В MatLab они заданы
в виде стандартной процедуры, как, например, ode45, однако нелишне
напомнить принципиальное свойство хотя бы одного из этих методов,
например, метода Рунге-Кутта, различные модификации которого ча-
ще всего используются при решении ОДУ.
Наиболее распространённая задача в физике – это определение
временной эволюции какой-либо физической величины. Данная эво-
люция описывается дифференциальным уравнением в различные про-
межутки времени и имеет вид
d
x (t ) = f ( x, t )
dt
с начальными условиями x(0)=x0. Раскладывая функцию x(t) в ряд
Тейлора в окрестности точки t, мы получаем
dx 1 d 2x
2 (
Δt ) + ... .
2
x (t + Δt ) = x (t ) + Δt +
dt 2 dt
Предполагаем, что функция x(t) является достаточно гладкой, и за от-
носительно малый интервал Δt мы можем проследить эволюцию
функции от x(t) к x(t+Δt) с любой требуемой точностью при условии,
что нам известны производные от x(t). В методе Рунге-Кутта второго
порядка точное выражение, приведённое выше, заменяется на при-
9
ближённое
x (t + Δt ) = x (t ) + f ( x ', t ' ) Δt ,

где
1
x' = x + f ( x (t ), t ) Δt ,
2
1
t ' = t + Δt .
2
Легко видеть, что в данном случае производная функции определяется
как величина самой функции в середине временного интервала Δt и
точке x', соответствующей ожидаемому положению в линейном при-
ближении. Можно убедиться, что данное приближенное решение об-
ладает точностью до членов порядка (Δt)2.
В случае метода Рунге-Кутта четвертого порядка приближенное
решение ОДУ для точки x(t+Δt) имеет вид
1
x (t + Δt ) = x (t ) + ⎡⎣ f ( x1' , t1' ) + 2 f ( x2' , t2' ) + 2 f ( x3' , t3' ) + f ( x4' , t4' ) ⎤⎦ Δt ,
6
где
x1' = x (t ), t1' = t ,
1 1
x2' = x (t ) + f ( x1' , t1' ) , t2' = t + Δt ,
2 2
1 1
x3' = x (t ) + f ( x2' , t2' ) , t3' = t + Δt ,
2 2
1
x4' = x (t ) + f ( x3' , t3' ) , t4' = t + Δt.
2
В данном случае точность приближённого решения – (Δt)5. Нетрудно
увидеть, что при этом необходимо четыре раза оценить функцию f(x',t')
в линейном приближении. Это примерно в четыре раза увеличивает и
время расчёта. Однако за счёт увеличения точности мы можем выби-
рать интервал Δt существенно бóльшим. Это и дает значительное уве-
личение скорости расчетов. Следует отметить, что метод Рунге-Кутта
легко обобщается на ОДУ второго и более высокого порядка, а также
на системы ОДУ. Перейдём теперь к примерам.

10
Два примера (механика)

Движение заряженной частицы. Закон Кулона


Рассмотрим пример, иллюстрирую- Q2
щий создание исходной функции m,q V
DiffEquatFunc для вызова ее про- r2
цедурой ode45. Пусть некоторая
точка массы m с зарядом q движется R
Q1
в электрическом поле двух непод- r1
вижных зарядов Q1 и Q2 (см. рис. 1).
На заряженную частицу со стороны Рис. 1 Движение заряженной
зарядов Q1 и Q2 будет действовать частицы в поле двух не-
кулоновские силы, и ее движение подвижных зарядов
будет описываться следующим
уравнением (для простоты используем систему СГС и предполагаем,
что движение происходит в вакууме):
qQ1 qQ2
mR = 3 (R − r ) +
1 3 (R − r ).
2 (4)
R − r1 R − r2

Как видим, данное дифференциальное уравнение имеет второй поря-


док. Но его можно свести к системе дифференциальных уравнений
первого порядка:
⎧R = V
⎪⎪
⎨V = Q1 ⋅ R − r + Q2 ⋅ R − r .
⎪ 3 1 ( 3 2 ) ( ) (5)

⎩⎪
R − r1 R − r2

Без ущерба для сути решения массу частицы m примем равной 1, так-
же поступим и с ее зарядом q. Кроме того, для простоты сразу перей-
дем к безразмерным единицам, и будем считать, что данная задача яв-
ляется "плоской". Введем следующие обозначения: R = ( x1 , x2 ) ,
r1 = (C1 x , C1 y ) , r2 = (C2 x , C2 y ) и V = ( x3 , x4 ) . Тогда систему дифференци-
альных уравнений, описывающих движение частицы в поле двух не-
подвижных зарядов можно представить следующим образом:

11
⎧ x1 = x3
⎪x = x
⎪ 2 4

⎪ Q1 ( x1 − C1 x ) Q2 ( x2 − C2 x )
⎪ x3 = 3 +
⎨ ( 1 1x ) ( 1 2x )
2 2 . (6)
3

( x − C ) 2
+ ( x − C ) 2 2
( x − C ) 2
+ ( x − C )
⎪ 2 1y 2 2y

⎪ Q1 ( x1 − C1 y ) Q2 ( x2 − C2 y )
⎪ x4 = 3 +

( ( x1 − C1x ) + ( x2 − C1 y ) ) ( ( x1 − C2 x ) + ( x2 − C2 y ) )
3

⎪⎩ 2 2 2 2 2 2

Рассмотрим простейший случай финитного движения с Q1 = –50,


Q2 = 0, С1 = (5,0) и С2 = (0,10). При таких начальных параметрах (Q2 = 0
и Q1 < 0) наша точка движется в притягивающем поле только первого
заряда и, как мы помним из классической механики, должна описывать
вокруг него эллипс. Проверим, запишем правую часть системы уравне-
ний как файл-функцию, назвав ее pointq12(t,x).
function f=pointq12(t,x)
global Q1 Q2 C1x C1y C2x C2y
f=[x(3);x(4);...
Q1*(x(1)-C1x)/(sqrt((x(1)-C1x)^2+(x(2)-C1y)^2))^3+...
Q2*(x(1)-C2x)/(sqrt((x(1)-C2x)^2+(x(2)-C2y)^2))^3;...
+Q1*(x(2)-C1y)/(sqrt((x(1)-C1x)^2+(x(2)-C1y)^2))^3+...
Q2*(x(2)-C2y)/(sqrt((x(1)-C2x)^2+(x(2)-C2y)^2))^3];
Напомним, что "..." – означает перенос-продолжение на следующую
строку. Решим систему дифференциальных уравнений, вызвав проце-
дуру ode45 из "пустой" файла-функции pointDyn.m.
function pointDyn()
clear all
global Q1 Q2 C1x C1y C2x C2y
Q1=-50; Q2=-0.; C1x=5; C1y=0; C2x=0; C2y=10;
x0=0; y0=0; vx0=0; vy0=4.3; T1=4000;
[t,h]=ode45(@pointq12,[0,T1],[x0,y0,vx0,vy0]);
x=h(:,1); y=h(:,2); x1=C1x; y1=C1y; x2=C2x; y2=C2y;
plot(x,y,'b-'); % отрисовка траектории
hold on
% отрисовка положения неподвижных зарядов
plot(x1,y1,'r+',x2,y2,'r*','MarkerSize',15);
plot(x1,y1,'ro',x2,y2,'ro','MarkerSize',15);
% comet(x,y); % отрисовка "движения"
12
hold off;
Передача дополнительных параметров в функцию происходит через
описание констант с помощью global.
Что мы получили? Движение – финитное, но полученная траекто-
рия лишь отдаленно напоминает эллипс (рис. 2, левая панель). Осо-
бенно хорошо это видно, если проследить за траекторией с помощью
процедуры comet(x,y). Тогда мы увидим, как происходит движение
(снимите знак комментария в предпоследней строке pointDyn и зано-
во запустите программу).
Для данного примера относительной точности 10-3, заложенной по
умолчанию в процедуре ode45, недостаточно. Придется либо умень-
шать этот параметр, либо пробовать другие процедуры.
Изменим относительную точность решения на три порядка → 10-6,
это делается с помощью определения новой относительной точности и
изменения вызова процедуры ode45:
tol = 1e-6;
[t,h]=ode45(@pointq12,[0,T1],[x0,y0,vx0,vy0], ...
odeset('RelTol',tol));
Время расчета увеличилось, но теперь мы получили вполне прием-
лемый результат. (рис. 2, правая панель).
Теперь можно поэкспериментировать с начальными условиями и
зарядами тел (например, можно убедиться, что при последовательном
увеличении на единицу заряда Q1 с –50 до –46 движение становится
инфинитным). Естественно, что движение станет также инфинитным,
если взять заряды одного знака, т.е. Q1 > 0.
20 20

15 15

10 10

5 5

0 0

-5 -5

-10 -10

-15 -15

-20 -20
-10 0 10 20 30 40 50 60 70 -10 0 10 20 30 40 50 60 70

Рис. 2 Траектория заряженной частицы в поле неподвижного заряда: левая


– с точностью по умолчанию, правая – с повышенной точностью.
Крестиком и звездочкой на графике отмечены положения зарядов
Q1 и Q2, соответственно
13
40
Попробуем немного поэкс-
30 периментировать и со вторым
20
зарядом и введем значение
Q2 = –0.2. Это внесет возмуще-
10
ние в орбиту движущейся точ-
0
ки. Траектория изменит свою
-10 форму (рис.3, верхняя панель).
-20 Посмотрим, что будет, если мы
0 10 20 30 40 50 60 70

20
поменяем взаимодействие со
вторым зарядом на отталкива-
10
ние, Q2 = +0.2. Траектория ста-
0
новится незамкнутой (рис.3,
-10
средняя панель).
-20
Красивый вариант движе-
-30
ния тела можно увидеть, если
-40
рассмотреть, например, случай
-50
-10 0 10 20 30 40 50 60 70 с Q1 = –50 и Q2 = –1.5. Эта тра-
50 ектория представлена на ниж-
ней панели рис.3 (T1 = 8000).
Следует подчеркнуть, что мы
использовали модель точечных
0
зарядов, т.е. пренебрегали воз-
можностью "попадания" заря-
дов друг в друга. Дальнейшее
улучшение программы связано
-50
-60 -40 -20 0 20 40 60
с контролем в ходе решения
Рис. 3 Траектория заряженной час- выполнения закона сохранения
тицы в поле двух неподвиж- энергии (особенно это сущест-
ных зарядов Q1 = –50 и разны- венно при решении задачи мно-
ми Q2: верхняя панель – Q2 = – гих тел). Теперь можно экспе-
0.2; средняя – Q2 = 0.2; риментировать самостоятельно
нижняя – Q2 = –1.5 ("Задание 4. Движение заряда в
кулоновском поле" на стр .27).

14
Движение под действием сил тяжести и трения
Поскольку решение систем дифференциальных
уравнений является очень важным моментом, y
V
то мы не ограничимся одним примером [2].
F
Рассмотрим следующую задачу, опять же
из механики. Рассмотрим траекторию движе- G x
ния пули под действием силы тяжести. При Рис. 4 Движение пули
отсутствии сопротивления воздуха это будет под действием
парабола. При скорости пули больше скорости силы тяжести
звука сила сопротивления воздуха пропорцио- G = mg и соп-
нальна квадрату скорости и противоположна ротивления во-
направлению движения. Уравнение движения здуха F ~ -VV
пули массой m будет следующим:
mw = mr = G + F = mg − kVV . Не вдаваясь в сложные вопросы балли-
стики, примем для простоты, что коэффициент пропорциональности k
в силе трения зависит от плотности воздуха ρ, которая, в общем слу-
чае, может меняться с высотой y, площади поперечного сечения пули S
и некоторого постоянного безразмерного параметра b порядка едини-
цы, учитывающего форму пули. Из соображений размерности k = bρS.
Учитывая то, что ускорение – производная скорости по времени, за-
пишем это уравнение в векторном виде:
2 V
mV = mg − k V ⋅ , k = bρ ( y) S . (7)
V

Распишем это уравнение по координатам:


⎧ k
⎪⎪Vx = − m Vx Vx + Vy
2 2

⎨ . (8)
k
⎪V = − g − V V + V 2 2
⎪⎩ y m
y x y

В таком виде система дифференциальных уравнений готова для


того, чтобы попытаться решить ее при помощи процедуры ode45. С
такими данными мы составим файл-функцию bullet.m.
function u= bullet(t,v)
global g rho s m b
k= b*rho*s/m;
u=[-k*sqrt(v(1)^2+v(2)^2)*v(1); ...
-g-k*sqrt(v(1)^2+v(2)^2)*v(2)];
15
Таким образом, мы найдем скорость пули в зависимости от вре-
мени. Полученные массивы точек Vxi, Vyi, ti можно в дальнейшем обра-
ботать. Произвести интерполяцию, аппроксимацию и т.д. Попробуем
найти координаты точек простым интегрированием
⎧ t

⎪ x (t ) = x0 + ∫ Vx (τ )dτ
⎪ t0
⎨ t
. (9)
⎪ y (t ) = y + V (τ )dτ
⎪ 0 ∫ y
⎩ t0

Для простоты интегрирование заменим суммированием 1:


⎧ i

⎪ xi = x0 + ∑ Vxk (tk − tk −1 )
⎪ k =2
⎨ i
. (10)
⎪ y = y + V (t − t )
⎪⎩ i 0 ∑
k =2
yk k k −1

В этом случае начальный момент времени равен 0, пуля находится в


точке (x0, y0). Создадим файл-функцию bulletDyn, в которой вызовем
процедуру ode45. Информацию о массе пули, ее диаметре (калибре),
возможных скоростях легко найти в Интернете. Возьмем те из них, ко-
торые на слуху. Пусть масса пули, в соответствии с известной песней –
"девять граммов в сердце…" – m = 9 грамм, поперечное сечение
S = 0.5 см2 (примерно соответствует калибру 7.62 мм). Пусть плот-
ность воздуха не зависит от высоты и равна ρ = ρ(0) = 1.22 кг/м3, уско-
рение свободного падения g = 9.8 м/с2, коэффициент b = 0.5. Переве-
дем все в систему Си и обезразмерим. В начальный момент времени
пуля находилась в начале координат, а скорость пули по горизонтали
составляла 800 м/с, по вертикали – 100 м/с.
function bulletDyn()
clear all
global g rho s m b
g=9.8;
rho=1.22;
s=0.00005;
m=0.009;
b=0.5;

1
Заметим, что для интегрирования можно было бы воспользоваться и стандарт-
ной процедурой MatLab, например, quad(…)
16
V0x=800;V0y=100;
x0=0; y0=0;
T=6.5; % подобранное время расчета
[t,h]=ode45(@bullet,[0 T],[V0x V0y]);
vx=h(:,1); vy=h(:,2);ll=length(t);
x(1)=x0; y(1)=y0;
for i=2:ll
x(i)=x(i-1)+vx(i-1)*(t(i)-t(i-1));
y(i)=y(i-1)+vy(i-1)*(t(i)-t(i-1));
end;
figure;
plot(x,y,'b-','LineWidth',4);
grid on
Результаты представлены 60

сплошной линией на рис. 5, 40

верхняя панель. Следует от-


20
метить, что диапазон време-
ни [0, 6.5] был эмпириче- 0
0 100 200 300 400 500 600 700 800 900
ским путем подобран так,
60
что траектория движения
отображена от момента вы- 40

лета до падения. Уровень


20
"земли" соответствует зна-
чению ординаты 0. Момент 0
0 100 200 300 400 500 600 700 800 900
прикосновения к "земле"
можно и подсчитать (попро- Рис. 5 Траектория пули под действием
буете?). В m-файле силы тяжести и сопротивления
воздуха: верхняя панель –
bulletDyn.m может быть
bulletDyn, нижняя –
вызвана не только процеду-
bulletDyn1 (синяя линия – ре-
ра ode45, но и ode113, на-
зультат ode45, красные символы –
пример, вместо трех по-
ode113). По осям величины изме-
следних строк запишем ряются в метрах

[t1,h1]=ode113(@bullet,[0 T],[V0x V0y]);


vx1=h1(:,1); vy1=h1(:,2);
ll1=length(t1); x1(1)=x0; y1(1)=y0;
for i=2:ll1
x1(i)=x1(i-1)+vx1(i-1)*(t1(i)-t1(i-1));
y1(i)=y1(i-1)+vy1(i-1)*(t1(i)-t1(i-1));

17
end;
figure; plot(x,y,'b-','LineWidth',4);
hold on
plot(x1,y1,'ro','MarkerSize',10);
grid on;
hold off
Вы можете сравнить результаты на верней панели рис. 5: из-за простой
аппроксимации (10), результаты для двух решателей отличаются.
Решим задачу (7) более последовательно. Мы решали систему
дифференциальных уравнений (8) относительно компонент скорости
движения пули, но можно решить ее и относительно координат:
⎧ x = Vx
⎪y =V
⎪ y

⎨Vx = − k Vx Vx 2 + Vy 2 . (11)
⎪ m
⎪ k
⎪Vy = − g − Vy Vx 2 + Vy 2
⎩ 2m
Произведем небольшие изменения и напишем файл-функцию
bullet1.m :
function u= bullet1(t,v)
global g rho s m b
k= b*rho*s/m;
u=[x(3);x(4);...
-k*sqrt(x(3)^2+x(4)^2)*x(3);...
-g-k*sqrt(x(3)^2+x(4)^2)*x(4)];
Для решения системы четырех дифференциальных уравнений, которая
записана файлом-функцией bullet1.m, создадим файл-функцию
bulletDyn1.m
function bulletDyn1()
clear all
global g rho s m b
g=9.8;
rho=1.22;
s=0.0001;
m=0.009;
b=0.5;
V0x=800;V0y=100; x0=0; y0=0;
T=4.8; % подобранное время расчет
[t,h]=ode45(@bullet1,[0 T],[x0 y0 V0x V0y]);
18
x=h(:,1); y=h(:,2);
[t1,h1]=ode113(@bullet1,[0 T],[x0 y0 V0x V0y]);
x1=h1(:,1); y1=h1(:,2);
figure;
plot(x,y,'b--','LineWidth',4);
hold on
plot(x1,y1,'r+','MarkerSize',12);
grid on
hold off
Это более точный подход и в этом случае практически нет различий
между решениями ode45 (синяя штриховая линия) и ode113 (красные
крестики), см. рис 5, нижняя панель. Обратите внимание, что время
полета и расстояние уменьшились по сравнению с ранее разобранным
случаем.
Теперь можно проводить компьютерные "эксперименты", меняя
параметры задачи. Например, можно учесть изменение плотности
воздуха с высотой, или даже осевое вращение пули, возникающее в
нарезном стрелковом оружии и оценить как это влияет на точность
стрельбы (см. "Задание 2. Полет пули", на стр. 26).

Осциллятор Ван дер Поля. Жесткость системы ОДУ


Выше мы применяли одношаговый метод Рунге-Кутта высокого
порядка ode45. Это классический, достаточно быстрый метод, реко-
мендуемый для начальной пробы решения. Во многих случаях он дает
хорошие результаты. Разберем, однако, известный пример осциллято-
ра Ван дер Поля и увидим, что применение ode45 либо сильно удлиня-
ет время решения, либо, вообще, не может привести к решению. Итак
ДУ, описывающее осциллятор Ван дер Поля, выглядит следующим
образом
d2x 2 dx

dt 2
− μ (1 − x ) dt + x = 0 , (12)

здесь μ – параметр. Перепишем это уравнение второго порядка в виде


системы ОДУ первого порядка. Пусть x1 = x, x2 = x1 = x , тогда
dx1
= x2
dt
. (13)
dx2
= μ (1 − x1 ) x2 − x1
2

dt
19
Используем в качестве функции, описывающей систему ДУ (13),
функцию vanderpoldemo, входящую в стандартный демонстрацион-
ный пример MatLab – odedemo.
function dydt = vanderpoldemo(t,y,Mu)
%VANDERPOLDEMO Defines the van der Pol equation
%for ODEDEMO.
% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 1.2 $ $Date: 2002/06/17 13:20:38 $
dydt = [y(2); Mu*(1-y(1)^2)*y(2)-y(1)];
Для малых μ порядка единицы практически любой MatLab реша-
тель ОДУ сможет эффективно решить уравнение Ван дер Поля. Для
больших значений μ > 100 система ОДУ становится жесткой. Для бы-
строго и эффективного интегрирования таких систем должны быть ис-
пользованы специальные метолы, реализованные в ode15s, ode23s,
ode23t, ode23tb. Сравним работу двух процедур ode45 (синяя сплош-
ная линия на графиках) и ode15s (прерывистая красная) при разных
значениях μ. Немного изменим программу odedemo. Начальные ус-
ловия x10 = x0 = 0.5 и x20 = x10 = x0 = 0 .
tspan = [0, 100];
x0 = [0.5; 0];
Mu = 0.0;
disp(['Fig0 tspan = [0, 100]; mu=', num2str(Mu)])
tic % Засекаем время
[t,x] = ode45(@vanderpoldemo, tspan, x0,[],Mu);
toc % Останавливаем и печатаем время
% Plot of the solution
plot(t,x(:,1),'b','LineWidth',4)
xlabel('t'); ylabel('solution x')
title(['van der Pol Equation, \mu = ', num2str(Mu)])
hold on; tic
[t,x] = ode15s(@vanderpoldemo, tspan, x0,[],Mu);
toc;
plot(t,x(:,1),'r--','LineWidth',4);
hold off
При этом используем функции tic и toc для того, чтобы оценить
время работы каждого из решателей. На первых четырех графиках
(рис. 6) μ = 0, 0.1, 1, 10 временной интервал решения tspan=[0,100]
– одинаковый. Время работы ode15s в несколько раз больше. Дейст-
вительно, верхний график соответствует следующим данным:

20
tspan = [0,100]; mu=0 van der Pol Equation, μ = 0
3
ode45 => 0.103 sec. 2
ode15s => 0.284 sec. 1

solution x
0
При μ = 0 мы получаем перио- -1
дическое решение для гармони- -2

ческого осциллятора с амплиту- -3


0 20 40 60 80 100
дой 0.5 (рис. 6, верхняя панель). t

Посмотрим, что будет про- 3


van der Pol Equation, μ = 0.1

исходить при увеличении μ. 2

tspan = [0,100]; mu=0.1 1

solution x
ode45 => 0.112 sec. 0

-1
ode15s => 0.447 sec.
-2
и -3
0 20 40 60 80 100
tspan=[0,100]; mu=1 t

ode45 => 0.191 sec. van der Pol Equation, μ = 1


3
ode15s => 0.796 sec.
2
Для μ ≠ 0 амплитуда постепенно 1
solution x

увеличивается до 2. См. рис. 6, 0

две средние панели. -1

C увеличением вклада не-


-2

-3
линейного слагаемого, время 0 20 40
t
60 80 100

расчета тоже увеличивается, но


van der Pol Equation, μ = 10
пока незначительно 3

tspan=[0,100]; mu=10 2

1
ode45 =>0.450 sec.
solution x

0
ode15s => 1.07 sec. -1
При росте параметра μ до 10 -2

происходит существенное уве- -3


0 20 40 60 80 100
личение периода колебаний и t

изменение их характера (рис. 6, Рис. 6 Решение уравнения Ван дер


нижняя панель). Система стано- Поля (12) при μ = 0, 0.1, 1, 10
вится жестче – малое изменение
параметра, приводит к сильному изменению функции. Хотя по-
прежнему ode45 быстрее ode15s.

При увеличении μ до 175 происходят интересные вещи:

21
3
van der Pol Equation, μ = 175 tspan =[0,2000];
2 mu = 175
1 ode45 => 190.4 sec.
solution x

0 ode15s => 2.631 sec.


-1

-2
Система становится все более
-3
жесткой: период, по сравнению
0 500 1000
t
1500 2000
с предыдущим случаем, увели-
3
van der Pol Equation, μ = 1000 чился больше чем на порядок
2
(обратите внимание, что вре-
1 менной диапазон увеличился в
solution x

0 20 раз). И, самое главное, вре-


-1 мя расчета по ode45 увеличи-
-2
лось катастрофически: почти
-3
0 2000 4000 6000 8000 10000 на 2 порядка по сравнению с
t
ode15s. ode45 пытается дос-
Рис. 7 Решение уравнения Ван дер тичь заданной точности на вер-
Поля (12) при μ = 175 и
тикальных участках кривой –
μ = 1000
уменьшает шаг, но при пере-
ходе к участка с плавным изменению функции достигнутый шаг очень
замедляет работу!
При μ = 1000 ode45 отказывается работать, а время работы ode15s
увеличился только на треть при увеличении временного диапазона
почти в 5 раз:
tspan=[0,10000]; mu=1000
ode45 => Not solved!
ode15s > 3.166 sec.
Причина в том, что при увеличении параметра μ начинают сильно
различаться порядки коэффициентов при разных слагаемых. Именно
степень этого различия чаще всего и определяет жесткость системы
d
ОДУ X(t ) = F(t , X) . В качестве соответствующей характеристики
dt
выбирают матрицу Якоби (якобиан) векторной функции F(t,X), опре-
деляющей правую часть системы ОДУ. Чем сильнее вырождена мат-
рица Якоби, т.е. функциональная матрица, составленная из производ-
ных F(t,X), тем жестче система уравнений.

22
Отображение Пуанкаре
Разберем простой пример гамильтоновой системы с двумя степе-
нями свободы. Для нее фазовое пространство имеет 4 измерения
(q1, q2, p1, p2). При сохранении энергии можно исключить одну из пе-
ременных: p2 = p2(q1, q2, p1, E). Таким образом, усеченное фазовое про-
странство исходной системы при условии, что дополнительные инте-
гралы движения отсутствуют, будет трехмерным. Выберем в этом усе-
ченном пространстве (q1, q2, p1) некоторую двумерную поверхность S и
рассмотрим ее последовательные пересечения фазовой траекторией
только в одном направлении (рис. 8). В результате движения некоторая
точка пересечения A выбранной секущей поверхности S с фазовой тра-
екторией переходит в другую точку B = Ф(A) на этой же поверхности.
Функция Ф, последовательно переводящая точки пересечения одна в
другую, A → B = Ф(A) → C = Ф(B) → A. (рис. 8а), называется функци-
ей наследования, или отображением Пуанкаре.
Часто в качестве секущей поверхности S выбирают некоторую
плоскость. Тогда задача изучения поведения траекторий в трехмерном
фазовом пространстве сводится к анализу отображения Ф двумерного
куска плоскости S в себя. Удобным способом наглядного представле-
ния поведения системы являются проекции полученного сечения на
фазовые плоскости (qi, pj) (рис. 8б).
Понятие отображения Пуанкаре можно обобщить и на системы с
числом степеней свободы n > 2. Если, помимо интеграла энергии, су-

Рис. 8 Построение отображения Пуанкаре в фазовом пространстве авто-


номной гамильтоновой системы с двумя степенями свободы
23
ществуют k дополнительных интегралов движения, то все пересечения
необходимо брать с гиперповерхностью S, размерность которой равна
2n – (k + 1) – 1. Затем, для наглядности, можно спроецировать получен-
ные точки пересечения на одну из фазовых плоскостей (qi, pj). Тогда
анализ динамики исходной системы сведется к исследованию проекций
найденных пересечений.
Использование отображения Пуанкаре существенно упрощает
описание поведения соответствующей системы дифференциальных
уравнений. Однако сведение динамической системы к отображению в
большинстве случаев удается сделать только численно. Тем не менее,
если функция последования Ф построена или если известна структура
следов фазовых кривых на секущей S, это дает возможность наглядно
представить динамику происходящих в системе процессов.
Действительно, когда отображение Пуанкаре представляет собой
конечное число точек, последовательно переходящих друг в друга, т. е.
A → B → C → A →. (рис. 8а), в фазовом пространстве этому будет соот-
ветствовать движение по замкнутой траектории и, таким образом, пове-
дение системы будет пе-
риодическим. Если множе-
ство точек отображения
Пуанкаре плотно заполняет
определенную замкнутую
кривую, то этому будет от-
вечать квазипериодическое
движение (рис. 9).
Наконец, существуют
системы, для которых при
некоторых условиях тра-
ектория на секущей по-
Рис. 9 Отображение Пуанкаре для квазипе-
риодического движения
верхности S представлена
"случайным" множеством
точек в том смысле, что точки последовательных пересечений нерегу-
лярным образом распределены на S. Следовательно, в этом случае фа-
зовая траектория хаотически блуждает по фазовому пространству.
Это указывает на то, что режим эволюции таких систем не является ни
периодическнм, ни квазипериодическим (см. ниже "Задание 11. Мо-
дель Эно-Эйлеса и отображение Пуанкаре" на стр. 30).

24
Задания на дифференциальные уравнения

ЗАДАНИЕ 1. ДВИЖЕНИЕ СПУТНИКА ПО ОРБИТЕ


Рассмотрите движение спутника вокруг Земли, положение и ско-
рость которого получаются из решения следующей системы уравне-
ний:
x1 ( t ) = x3 ( t )
x2 ( t ) = x4 ( t )

x3 ( t ) = −GM E x1 ( t ) / ( x12 ( t ) + x22 ( t ) )


3/2

x4 ( t ) = −GM E x2 ( t ) / ( x12 ( t ) + x22 ( t ) )


3/2

где ME = 5.97 × 1024 кг – масса Земли, G = 6.672 × 10−11 м3/кг с–2 – гра-
витационная постоянная. Заметим, что (x1, x2) and (x3, x4) обозначают
положение и скорость, соответственно, спутника в плоскости коорди-
нат, в начале которых располагается Земля.
(а) Составьте программу, которая использует два стандартных реша-
теля ode45 и ode23s, чтобы найти орбиты спутников со следующи-
ми начальными положениями/скоростями в течение одних суток:
(i) (x10, x20) = (4.223 107, 0)[м] и (x30, x40) = (v10, v20) = (0, 3071)[м/с].
(ii) (x10, x20) = (4.223 107, 0)[м] и (x30, x40) = (v10, v20) = (0, 3500)[м/с].
(iii) (x10, x20) = (4.223 107, 0)[м] и (x30, x40) = (v10, v20) = (0, 2000)[м/с].
Запустите программу и отрисуйте траектории всех трех спутников
(см. рис. 10, левая панель).
(б) Увеличив в полученном графическом окне с помощью стандарт-
ного инструмента "zoom" (лупа со знаком плюс) область вблизи
старта, убедитесь, что решение ode45 отличается от решения
ode23s. И оба не являются периодическими, это хорошо видно на
примере спутника (iii) (см. правую панель рис. 10).
Повторите вычисления меньшим допуском относительной ошиб-
ки RelTol => 1e-6, как это сделано в разобранном примере
"Движение заряженной частицы. Закон Кулона", чтобы найти траек-
тории спутников. Как Вы думаете, какое из полученных ранее ре-
шений более близко к истинному решению, полученному в (a)?

25
7 6
x 10 x 10
6 6

4
4
2
2
0

0 -2

-4
-2
-6
-4
-8
3.9 3.95 4 4.05 4.1 4.15 4.2 4.25 4.3
-8 -6 -4 -2 0 2 4
7
7 x 10
x 10

Рис. 10 Верхняя панель: орбиты трех спутников за сутки (приведены все


решения). Нижняя панель: траектория только третьего спутника
вблизи точки старта (сплошная линия – "точное" решение с повы-
шенной точностью; линия точек (ode45) и штриховая линия с кре-
стиками (ode23s) отвечают решениям со стандартной точностью)
(в) Напишите собственную программу для решения уравнений дви-
жения с использования метода Рунге-Кутта четвёртого порядка и
сравните с результатами решений, полученных в (а) и (б). Кроме
того, дополните программу, включив в неё расчёт потенциальной,
кинетической энергии и, наконец, полной энергии (и отслеживай-
те ее постоянство!), а также моментов импульсов Mi = [ri · pi] ка-
ждого из тел и их суммы.
Цель этой задачи состоит не в сравнении стандартных решателей
ОДУ в MatLab, а в предупреждении пользователей относительно опас-
ности злоупотребления ими. У встроенных процедур MatLab есть мно-
го хороших особенностей и нужно уметь ими пользоваться. Установка
параметров решения, в частности допуск относительной ошибки (Rel-
Tol), иногда очень важна для получения разумного решения.

ЗАДАНИЕ 2. ПОЛЕТ ПУЛИ


Использовать программы bullet1.m и bulletDyn1.m (см. раз-
дел "Движение под действием сил тяжести и трения", стр. 15), чтобы
исследовать движение пули (дальность полета, время полета, зависи-
мость от угла вылета, диаметра пули, ее массы от других параметров).
Ответить на следующие вопросы.
I. Как изменится траектория пули с учетом распределения плотно-
сти воздуха по высоте. Построить аппроксимацию ρ(y) по сле-
дующим данным: в Европе плотность воздуха у поверхности Зем-
ли равна 1.258 кг/м3, на высоте 5 км – 0.735 кг/м3, на высоте 20 км
26
– 0.087 кг/м3, на высоте 40 км – 0.004 кг/м3
II. При каком угле вылета пуля достигает максимальной дальности?
III. Если одну пулю выстрелить горизонтально из ствола, а другую
пулю бросить с той же самой высоты в тот же самый момент, упа-
дут ли обе из них в одно и то же время?
IV. Если пулю выстрелить из винтовки вертикально вверх, какой бу-
дет ее окончательная скорость, когда она попадет в макушку чьей-
то головы во время своего полета вниз? Построить фазовую диа-
грамму (y, Vy) при разных параметрах задачи.
V. Зависит ли дальность от массы пули? Какая пуля улетит дальше,
более тяжелая или более легкая?
VI. Учесть осевое вращение пули, возникающее в нарезном стрел-
ковом оружии. Как это влияет на дальность и точность стрель-
бы?

ЗАДАНИЕ 3. УРАВНЕНИЕ ВАН ДЕР ПОЛЯ


Использовать программы, разобранные выше в разделе
"Осциллятор Ван дер Поля. Жесткость системы ОДУ" (стр. 19) и ис-
следовать движение системы в зависимости от значения различных
параметров. Пусть начальные условия [ x(0) x(0)] = [ x10 x20 ] = [ x10 x10 ] =
[0.5 0]; [−1 2] и [2 0] для временных интервалов [0, 20] и [0 100].
Построить и исследовать зависимости x(t ), x(t ) = x1 (t ), x2 (t ) , а
также фазовый портрет системы, т.е. зависимость скорости от коорди-
наты x( x) = x2 ( x1 ) .

ЗАДАНИЕ 4. ДВИЖЕНИЕ ЗАРЯДА В КУЛОНОВСКОМ ПОЛЕ


Использовать программы, разобранные выше в разделе "Движение
заряженной частицы. Закон Кулона" (стр. 11), чтобы исследовать дви-
жение системы от значения различных параметров (начальных усло-
вий, величин и знаков зарядов, и т.д.). Проверить выполнение закона
сохранения энергии. Учесть в программе появление диссипативной
силы, линейной по скорости F = −kV = −kr .

ЗАДАНИЕ 5. СИЛА АРХИМЕДА


Привязанный у дна шарик с воздухом отпускают, и он начинает
всплывать. Объем шарика увеличивается по мере того, как уменьшает-
27
ся окружающее давление. Первоначальный диаметр шарика 0.5 метра.
Закон изменения объема в зависимости от давления, считать таким:
P −P
V ( P ) = V0 (1 + 2λ ( P )) . Где λ ( P ) = H . Шарик находится на глуби-
PH − Patm
не H = 500m . PH - давление на глубине H . Patm – атмосферное давле-
ние. Считать, что плотность воды от глубины не изменяется. Оценить
время всплытия. Масса шарика – 500 грамм. При расчете движения
учитывать только силу тяжести, силу Архимеда и силу сопротивления
ρ v2
водной среды. Величина силы сопротивления водной среды F = S,
2
где ρ – плотность воды, v – скорость движения шарика, S – площадь
поперечного сечения.

ЗАДАНИЕ 6. ПАДЕНИЕ ШАРИКА В ВОДУ


Уровень воды в сосуде составляет 10 метров (относительно дна
сосуда). Свинцовый шарик диаметром 1 см падает с высоты 5 см над
уровнем воды. Оценить время, за которое шарик упадет на дно сосуда.

ЗАДАНИЕ 7. ЗАДАЧА ТРЕХ ТЕЛ


Написать программу, описывающее плоское движение трех тел,
связанных гравитационным взаимодействием. Попробовать найти ус-
тойчивые финитные траектории. Сначала рассмотреть простейший
случай одинаковых масс.
Рассмотреть реалистичную ситуацию, взяв, например, массы
Юпитера, Земли, и Солнца. Так как все три тела в данном случае нахо-
дятся в движении, выберите центр масс трёх тел в качестве начала ко-
ординат. Кроме того, выберете начальную скорость Солнца таким об-
разом, чтобы полный импульс системы был нулевым. Исследуйте
движение Земли для различных начальных условий. Потом попробуй-
те изменить массу Юпитера в 10, 100, и 1000 больше его реальной
массы и исследуйте результат. Здесь удобно воспользоваться астроно-
мическими единицами, где 1 а.е. = 1.5 · 1011 м приблизительно равна
среднему расстоянию между центрами масс Земли и Солнца, время
определять в годах, а скорость определяется в единицах
2π(1 а.е.)/(1 год). Масса Солнца, Юпитера и Земли 2.99×1030 кг

28
1.9×1027 кг и 6.0×1024 кг соответственно, а средний радиус орбиты
Юпитера равен 5.2 а.е.
Следите за сохранением интегралов движения – полной энергии и
момента импульса.

ЗАДАНИЕ 8. БРУСОК НА ПРУЖИНЕ


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

ЗАДАНИЕ 9. ФОНОННАЯ ЛАВИНА


В случае двухуровневых систем кинетика фононного узкого горла
описывается системой двух уравнений для разности населенности
уровней и числа резонансных фононов:
dx 1
− = ( zx + x − 1),
dt τ
(14)
dz z dx
=− +b ,
dt τ ph dt

где x = T0 Tz , z = (n − n0 ) / n0 . Здесь T0 , Tz - температуры термостата и


спиновой системы, n - число неравновесных фононов, n0 - их равно-
весное значение, τ – время спин-решеточной релаксации, τph - время
жизни фононов в отсутствие спин-фононного взаимодействия, вели-
чина b представляет собой отношение теплоемкости системы спинов к
"теплоемкости" неравновесных фононов.
Если первоначально привести спиновую систему в сильно нерав-
новесное состояние – добиться инверсии заселенностей спиновых
уровней с помощью быстрого адиабатического прохождения или 1800-
ного импульса большой мощности (когда Tz и x < 0), то, в условиях
фононного узкого горла ( σ = bτ ph / τ >>1), возникает фононная лавина.
Полагая τ = 5 ⋅10−2 c, τ ph = 3 ⋅10−5 c, b = 2.5 ⋅104 , учитывая, что при
t = 0, z = 0 , проследить временную эволюцию спиновой системы (x)
и неравновесных фононов (z) при следующих начальных значениях x: -
1, -0.75, -0.5 . Построить соответствующие графики. При численном
решении использовать метод Рунге - Кутта ode45 (сравнить его с ме-
29
тодом ode15s по быстродействию и точности при различных значени-
ях параметров).

ЗАДАНИЕ 10. ФАЗОВЫЕ ДИАГРАММЫ И ОТОБРАЖЕНИЕ ПУАНКАРЕ


Для задач, разобранных в этой главе, построить фазовые диаграм-
мы в плоскости переменных (скорость, координата) и отображение
Пуанкаре (см. раздел "Отображение Пуанкаре" на стр. 23.

ЗАДАНИЕ 11. МОДЕЛЬ ЭНО-ЭЙЛЕСА И ОТОБРАЖЕНИЕ ПУАНКАРЕ


Рассмотрим достаточно простой пример, иллюстрирующий нере-
гулярное поведение, – модель Эно-Эйлеса (1964). Авторы моделирова-
ли движение звезды в среднем поле галактики. После ряда упрощений
и учета интегралов движения задача свелась к анализу поведения в че-
тырехмерном фазовом пространстве частицы единичной массы с га-
мильтонианом

Для такой редуцированной задачи имеется интеграл энергии H = E, с


помощью которого можно исключить одну из переменных:
0.3 p1 = p1(q1, q2, p2, E). Записать для
этой системы уравнения Га-
0.2
мильтона, решить их численно и
0.1 построить отображение Пуан-
каре в плоскости (q2, p2) при
0
различных значениях энергии
-0.1 E = 0.04, 0.125, 0.167. Объяс-
нить полученные результаты.
-0.2
При заданной энергии наложить
-0.3
друг на друга отображения Пуан-
-0.3 -0.2 -0.1 0 0.1 0.2 0.3
каре при различных начальных
Рис. 12 Отображение Пуанкаре при условиях (чем больше их пере-
при E = 0.04 брать, тем информативнее будет
картина).

30
ЗАДАНИЕ 12. УРАВНЕНИЯ ЛОРЕНЦА. ТУРБУЛЕНТНОЕ ТЕЧЕНИЕ И ХАОС
Нелинейные уравнения Лоренца описывают конвекционное дви-
жение жидкости, возникающее в слое жидкости при разности темпера-
тур нижней и верхней поверхностей
⎧ x1 ( t ) = σ ( x2 ( t ) − x1 ( t ) )
⎪⎪
⎨ x2 ( t ) = ρ x1 ( t ) − x1 ( t ) x3 ( t ) − x2 ( t ) (15)

⎪⎩ x3 ( t ) = x1 ( t ) x2 ( t ) − β x3 ( t )
Переменная x = x1 характеризует скорость вращения конвекционных ва-
лов, величины у = x2 и z = x3 отвечают за распределение температуры, со-
ответственно, по горизонтали и по вертикали. Параметр β определяется
геометрией конвекционной ячейки, а именно, отношением ее вертикаль-
ного и горизонтального размеров а. Параметр σ = ν/κ есть отношение ко-
эффициента кинематической вязкости и коэффициента температуропро-
водности. Его называют числом Прандтля. Поведение системы резко ме-
няется в зависимости от " управляющего параметра" ρ = R/Rc ~ ΔT – раз-

Рис. 11 Зависимости динамических переменных x = x1, у = x2 и z = x3 от


времени, полученные численным интегрированием ДУ Лоренца
(15), при σ = 10, β = 8/3, ρ = 28

31
ности температур верхней и нижней поверхности жидкости. R – число
Рэлея. Условию возникновения конвекционного течения в виде валов от-
вечает критическое значение этого числа R = Rc, при этом ρ = 1.
Заметим, что аналогичные уравнения возникают при рассмотре-
нии диссипативного осциллятора с инерционной нелинейностью, в
теории одномодового лазера
Задача: исследовать уравнения при следующих значениях.
1) "классический набор" σ = 10, β = 8/3, ρ = 28.
Хаотический автоколебательный режим, соответствующий т.н.
"странному" аттрактору. Составить программу и нарисовать зависимо-
сти "координат" от времени в диапазоне T = [0 50] (см.рис. 11) и фазо-
вый портрет системы (см. демо-программу MatLab lorenz). Модифи-
цируя в ней значения параметров, прежде всего ρ, исследовать измене-
ние динамики системы и появление устойчивых аттракторов при про-
хождении следующих бифуркационных значений ρ0 = 1, ρ0 = 13.927,
ρ2 = 24.06, ρ3 = 24.74.
2) σ = 10, β = 2, ρ = 21 и ρ = 100
Составить программу для решения системы ОДУ (15) для времен-
ного интервала [0, 10] и, кроме, зависимости всех "координат" от вре-
мени нарисовать еще зависимость x3(t) versus x1(t). Использовать сле-
дующие начальные условия [x1(0) x2(0) x3(0)] = [−8 −16 80].

ЗАДАНИЕ 13. ХАОС В НЕЛИНЕЙНОМ ОСЦИЛЛЯТОРЕ С ВНЕШНИМ


ПЕРИОДИЧЕСКОМ ПОЛЕМ

Рассмотрим колебания нелинейного осциллятора с трением и


внешней периодической силой (так называемый физический осцилля-
тор). Его уравнение движения описывается ОДУ второго порядка
d 2θ g dθ
2
= − sin θ − q + FD sin ( Ω D t ) .
dt L dt
Легко видеть, что в данном случае колебания осциллятора не ограни-
чены малыми отклонениями, и помимо члена с затуханием присутст-
вует также и внешнее периодическое поле (например, электрическое
поле, если мы описываем колебания заряженной частицы). С помощью
процедур MatLab или с прямым применением метода Рунге-Кутта на-
пишите программу решения этого уравнения (для этого перепишите

32
уравнение второго порядка как систему уравнений первого порядка,
введя угловую скорость ω).
(а) Рассмотрите сначала ситуацию FD = 0 и исследуйте результат. За-
тем, делая FD ненулевым, пронаблюдайте в какой момент частота
осцилляций определяется частотой собственных колебаний и как
она переходит в частоту наведённых колебаний, ΩD. Увеличивая
FD, вы обнаружите, что поведение осциллятора перестанет быть
периодичным в какой-то момент. Объясните, почему поведение
системы, описываемой ОДУ, перестаёт быть предсказуемым. Для
этого исследуйте, как меняется решение, если вы слегка измените
начальные условия (θ1(0) и θ2(0)), покажите, как меняется |θ1-θ2|
на каждом шаге решения. Сравните эту ситуацию с периодиче-
ским решением. Введите величину
log ( Δθ ) ∼ λ t ,
и найдите постоянную Ляпунова, λ, для различных значений FD
при периодическом и хаотическом решениях. Как эта постоянная
зависит от характера движения?
(б) Покажите, что поведение угловой скорости ω также хаотично.
Рассмотрите также поведение θ(ω) для периодического и хаотиче-
ского решения для временных отрезков Пуанкаре ΩDt = 2nπ, где
n – целое число и проанализируйте полученные результаты.

ЗАДАНИЕ 14. ЧИСЛЕННОЕ РЕШЕНИЕ ДУ (13 ЗАДАЧ)


Решить численно следующие дифференциальные уравнения и по-
строить зависимости неизвестных величин от t. Исследовать случаи
t ∈ [0 1], [0 10], [0 100].
⎧3 x + y + x = 1
1) ⎨ , x (0) = 0, y (0) = 0 .
⎩ x + 4 y + 3x = 0
⎧x − x − 2 y = t
2) ⎨ , x (0) = 2, y (0) = 4 .
⎩ y − 2 x − y = t
⎧ 2 x − x + 9 x − y − y − 3 y = 0, x (0) = 1, x(0) = 1
3) ⎨ .
⎩ 2 x + x + 7 x − y + y − 5 y = 0, y (0) = 0, y (0) = 0
4) y + y − 2 y = et , y (0) = −1, y (0) = 0 .

33
⎧ x − x + y + z = 0, x (0) = 1, x (0) = 0

5) ⎨ y − y + x + z = 0, y (0) = 0, y (0) = 0 .
⎪ z − x − y + z = 0, z (0) = 0, z (0) = 0

y (4) + y (3) = cos(t ),
6) .
y (0) = 0, y (0) = 0, y (0) = 0, y (0) = 2
7) y + y2 = x2 .
y (4) + 4 y = t 2 ,
8) .
y (0) = 0, y (0) = 0, y (0) = 0, y (0) = 0
4 y (3) − 8 y (2) − 2 y (1) − 3 y = 8et ,
9) .
y (0) = 1, y (0) = 1, y (0) = 1
y (3) − 6 y (2) + 11 y (1) − 6 y = 0,
10) .
y (0) = 0, y (0) = 0, y (0) = 0
y (4) + 2 y (2) = t ⋅ sin(t ),
11) .
y (0) = 0, y (0) = 0, y (0) = 0, y (0) = 0
⎧x − x + 2 y = 0 x (0) = 0, x (0) = −1
12) ⎨ , .
⎩ x − 2 y = 2 t − cos(2 t ) y (0) = 1 / 2
13) x"(t) + 3x'(t) + 2x(t) = 1 при x(0) = 1, x'(0) = 0.

ЗАДАНИЕ 15. СРАВНЕНИЕ АНАЛИТИЧЕСКИХ И ЧИСЛЕННЫХ РЕШЕНИЙ


ДУ (14 ЗАДАЧ)
Следующие дифференциальные уравнения решить сначала анали-
тически без помощи компьютера, затем в MatLab символьно (см.
"Приложение 2. Решение систем дифференциальных уравнений в сим-
вольном виде в системе MatLAB", стр. 41), и, наконец, численно. По-
строить графики y(x) и сравнить решения.
1) y′′′ = 2 x , x ∈ [0 20]; y(0) = 1, y'(0) = 1, y''(0) = 1
2) xy (IV) + y′′′ = 0 , x ∈ [0 20]; y(0) = 1, y'(0) = 1, 1, y'''(0) = 1
3) y (IV) = 2 y′′′ , x ∈ [0 20]; y(0) = 1, y'(0) = 1, y''(0) = 1, y'''(0) = 1
4) y ′′′ − 2 y ′′ − y ′ + 2 y = 0 , x ∈ [0 20]; y(0) = 1, y'(0) = 1, y''(0) = 1
5) y ′′′ − 7 y ′′ + 15 y ′ − 9 y = 0 , x ∈ [0 10], y(0) = 2, y'(0) = 0.5, y''(0) = 0

34
6) y (IV) − 16 y = 0 , x ∈ [0 1], y(0) = 5, y'(0) = 0.33, y''(0) = 7,
y'''(0) = –5
7) y (IV) − 4 y′′′ − 8 y ′′ − 8 y′ + 4 y = 0 , x ∈ [0 10], y(0) = –1, y'(0) = 1,
y''(0) = 0, y'''(0) = –5
8) y (VI) + 2 y (IV) + y′′ = 0 , x ∈ [0 5], y(0) = –1, y'(0) = 1, y''(0) = 0,
y'''(0) = –5, y(VI)(0) = 0, y(V)(0) = 10
9) y (VIII) + 2 y (VI) − 2 y′′ − y = 0 , x ∈ [0 10], y(0) = –10, y'(0) = 10,
y''(0) = 0, y'''(0) = –0.5, y(VI)(0) = 0, y(V)(0) = 10, y(VI)(0) = 4.1,
y(VII)(0) = –0.00004
10) y′′′ + y = e2 x ( x 2 + x + 1) , x ∈ [0 15], y(0) = –0.1, y'(0) = –1, y''(0) = 1
11) y′′′ + y = x 4 , x ∈ [–5 3], y(–5) = –1, y'(–5) = –1, y''(–5) = –1
12) y′′′ − 3 y ′′ + 3 y′ − y = 2e x , x ∈ [–3 3], y(–3) = 0, y'(–3) = –1,
y''(–3) = 1
13) y′′′ + y′ = tg x x ∈ [–3 15], y(–3) = –10, y'(–3) = 1, y''(–3) = –1
14) y (IV) − y = eα x + e−α x + cos β x , решить аналитически и символьно
при любых α, β. Затем рассмотреть частный случай α = 1 и
β = 1, который и проверить численным решением при
x ∈ [-3 3], y(–3) = –10, y'(–3) = –1, y''(–3) = 1, y'''(–3) = –1

Приложение 1. Решатели систем обыкновенных дифферен-


циальных уравнений в MatLab
Для решения систем обыкновенных (ОДУ) в MatLAB реализованы
различные методы. Их реализации названы решателями ОДУ. По-
скольку по-английски обыкновенные дифференциальные уравнения –
Ordinary Differential Equation, то названия процедур начинаются с аб-
бревиатуры ode .Кратко их перечислим.
ƒ ode45 – одношаговые явные методы Рунге-Кутта 4-го и 5-го поряд-
ка в модификации Дорманда и Принца. Это классический метод,
рекомендуемый для начальной пробы решения. Во многих случаях
он дает хорошие результаты, если система решаемых уравнений
нежесткая;
ƒ ode23 – одношаговые явные методы Рунге-Кутта 2-го и 4-го поряд-
ка в модификации Богацки и Шампина. При умеренной жесткости

35
системы ОДУ и низких требованиях к точности этот метод может
дать выигрыш в скорости решения;
ƒ ode133 – многошаговый метод Адамса-Башворта-Мултона пере-
менного порядка класса предиктор–корректор. Это адаптивный ме-
тод, который может обеспечить высокую точность решения;
ƒ ode15s – многошаговый метод переменного порядка (от 1-го до 5-
го, по умолчанию 5), использующий формулы численного диффе-
ренцирования. Это адаптивный метод, его стоит применять, если
решатель ode45 не обеспечивает решения, например, в случае дос-
таточной жесткости системы ОДУ;
ƒ ode23s – одношаговый метод, использующий модифицированную
формулу Розенброка 2-го порядка. Может обеспечить высокую ско-
рость вычислений при низкой точности решения жесткой системы
дифференциальных уравнений;
ƒ ode23t – метод трапеций с интерполяцией. Этот метод дает хорошие
результаты при решении задач, описывающих колебательные сис-
темы с почти гармоническим выходным сигналом При умеренно
жестких системах дифференциальных уравнений может дать высо-
кую точность решения;
ƒ ode23tb – неявный метод Рунге-Кутта в начале решения и метод,
использующий формулы "дифференцирования назад" 2-го порядка
в последующем. Несмотря на сравнительно низкую точность, этот
метод может оказаться более эффективным, чем ode15s.
ƒ bvp4c – служит для проблемы граничных значений систем диффе-
ренциальных уравнений вида y' = f(t, y), F(y(a), y(b), p) = 0 (полная
форма системы уравнений Коши). Решаемые им задачи называют
двухточечными краевыми задачами, поскольку решение ищется при
задании граничных условий как в начале, так и в конце интервала
решения;
ƒ pdepe – служит для решения систем параболических и эллиптиче-
ских дифференциальных уравнений в частных производных. Этот
решатель введен в ядро системы для поддержки новых графических
функций OpenGL. Пакет расширения Partial Differential Equations
Toolbox содержит более мощные средства для решения дифферен-
циальных уравнений этого класса.
Отметим, что более подробную информацию можно получить с
помощью встроенной помощи (например, набрать в командном окне
>> help ode45 ) или найти в цитированной литературе.
Все решатели могут решать системы уравнений явного вида
y' = F(t, y1,y2, …, yn), где y – вектор-столбец, причем для решения жест-

36
ких систем уравнений рекомендуется использовать только специаль-
ные решатели ode15s, ode23s, ode23t, ode23tb.
Решатели ode15s, ode23s, ode23t, ode23tb способны решать урав-
нения неявного вида M(t, y1,y2, …, yn)y' =F(t, y1,y2, …, yn), где соответ-
ствующая матрица коэффициентов, M, называется матрицей массы.
ode23tb, ode23s служат для решения жестких дифференциальных
уравнений, ode15s – жестких дифференциальных и дифференциально-
алгебраических уравнений, ode23t – умеренно жестких дифференци-
альных и дифференциально-алгебраических уравнений
В описанных далее функциях для решения систем дифференци-
альных уравнений приняты следующие обозначения и правила:
ƒ F или DiffEquatFunc – название ODE-файла, то есть функции от t
и y, которая возвращает вектор-столбец;
ƒ tspan – вектор, определяющий интервал интегрирования
[Tstart,Tfinal]. Заметим, что для получения решений в кон-
кретные моменты времени tstart, t1, …, tfinal (расположенные в порядке
уменьшения или увеличения), нужно использовать
tspan = [t0 t1 … tfinal];
ƒ y0 или StartVector –вектор начальных условий;
ƒ options – аргумент, создаваемый функцией odeset 2;
ƒ p1, p2, … - произвольные параметры, передаваемые в функцию F;
ƒ T, Y – матрица решений Y, где каждая строка соответствует време-
ни, возвращенном в векторе-столбце T.
Перейдем к описанию функций для решения систем дифференци-
альных уравнений (будем обозначать понятием solver один из воз-
можных численных методов решения ОДУ: ode45, ode23, ode113,
ode15s, ode23s, ode23t, ode23tb).
ƒ [T,Y]= solver('F', tspan, y0) или в эквивалентной записи
[T,Y]= solver(@F, tspan, y0) (далее будем использовать
верхнюю нотацию) интегрирует систему дифференциальных урав-
нений вида y' = F(t, y) на интервале tspan с начальными условиями
y0. 'F' – строка, содержащая имя ODE-файла. Функция F(t,y) должна

2
Options = odeset ('RelTol', 1e-4, 'AbsTol', [1e-4 1e-4
1e-5]). Параметр 'RelTol' определяет относительную погрешность числен-
ного интегрирования по всем переменным одновременно, а 'AbsTol' является
вектором-строкой, состоящим из абсолютных допустимых погрешностей числен-
ного интегрирования по каждой из фазовых переменных
37
возвращать вектор-столбец. Каждая строка в массиве решений Y
соответствует времени, возвращаемом в векторе-столбце T.
ƒ [T, Y] = solver('F', tspan, y0, options) дает решение,
подобное описанному выше, но с параметрами, определяемыми
значениями аргумента options, созданного функцией odeset. Обычно
используемые параметры включают допустимое значение относи-
тельной погрешности RelTol (по умолчанию 1е-3) и вектор допус-
тимых значений абсолютной погрешности AbsTol (все компоненты
по умолчанию равны 1е-6);
ƒ [T, Y] = solver('F', tspan, y0, options, p1, p2, …)
дает решение, подобное описанному выше, передавая дополнитель-
ные параметры р1, р2, … в m-файл F всякий раз, когда он вызыва-
ется. Используйте options = [], если никакие опции не задаются;
ƒ [T, Y, TE, YE, IE] = solver('F', tspan, y0, options)
в дополнение к описанному решению содержит свойства Events,
установленные в структуре options в положение ‘on’. ODE-файл
должен быть создан так, чтобы вызов F(t, y, 'events') возвращал со-
ответствующую информацию. Выходной аргумент ТЕ – вектор-
столбец времен, в которые происходят события, строки YE являются
соответствующими решениями, а индексы в векторе IE определя-
ют, какое событие произошло.
ƒ [T,X,Y]=solver('model',tspan,y0,options,ut,p1,p2,…)
использует модель Simulink, вызывая соответствующий решатель
из нее, например: [T, X, Y] = sim(solver, 'model', …).
Решатели используют в списке параметров различные параметры:
• RelTol – относительный порог отбора (положительный скаляр). По
умолчанию 1e-3 (0.1% точность) во всех решателях; оценка ошиб-
ки на каждом шаге интеграции:
e(i)<=max(RelTol*abs(y(i)),AbsTol(i));
• AbsTol – абсолютная точность (положительный скаляр или вектор
{1e-6}). Скаляр вводится для всех составляющих вектора решения,
а вектор указывает на компоненты вектора решения. AbsTol по
умолчанию 1e-6 во всех решателях;
• NormControl – управление ошибкой в зависимости от нормы век-
тора решения [on|{off}]. Установите «on», чтобы
norm(e)<=max(RelTol*norm(y),AbsTol). По умолчанию все
решатели используют более жесткое управление по каждой из со-
ставляющих вектора решения;
38
• Refine – фактор уточнения вывода (положительное целое число) –
умножает число точек вывода на этот множитель. По умолчанию
всегда равен 1, кроме ode45, где он 4. Не применяется, если tspan>2;
• OutputFcn – дескриптор функция вывода [function] – имеет значе-
ние в том случае, если решатель вызывается без явного указания
функции вывода, OutputFcn по умолчанию вызывает функцию
odeplot. Эту установку можно поменять именно здесь;
• OutputSel – индексы отбора (вектор целых чисел). Установите ком-
поненты, которые поступают в OutputFcn. OutputSel по умолчанию
выводит все компоненты;
• Stats – установите статистику стоимости вычислений [on | {off}];
• Jacobian – функция матрицы Якоби [function|constant matrix]. Уста-
новите это свойство на дескриптор функции FJac (если FJac(t,y)
возвращает dF/dy) или на имя постоянной матрицы dF/dy;
• Jpattern – график разреженности матрицы Якоби (имя разреженной
матрицы). Матрица S имеет матричный элемент S(i,j) = 1, если i-я
составляющая F(t,y) зависит от j-ой составляющей – величины y, в
противоположном случае S(i,j) = 0;
• Vectorized – векторизованная ode-функция [on|{off} ]. Устанавли-
вается на «on», если ode-функция F(t,[y1 y2 ...]) возвращает вектор
[F(t,y1) F(t,y2) ...];
• Events – [ function ] – введите дескрипторы функций событий, со-
держащих собственно функцию в векторе value и векторы isterminal
и direction (см. выше);
• Mass – матрица массы [ constant matrix | function ]. Для задач
M*y' = f(t,y) установите имя постоянной матрицы. Для задач с пе-
ременной M введите дескриптор функции, описывающей матрицу
массы;
• MstateDependence – зависимость матрицы массы от y
[none|{weak}strong] – установите "none" для уравнений
M(t)*y' = f(t,y). И слабая ("weak"), и сильная ("strong") зависимости
означают M(t,y), но "weak" приводит к неявным алгоритмам реше-
ния, использующим аппроксимации при решении алгебраических
уравнений;
• MassSingular – матрица массы M сингулярная [yes|no|{maybe}]
(да/нет/может быть);
39
• MvPattern – разреженность (dMv/dy), график разреженности (см.
функцию spy) – введите имя разреженной матрицы S с S(i,j) = 1 для
любого k, где (i,k) элемент матрицы массы M(t,y) зависит от проек-
ции j переменной y, и с S(i,j) = 0 в противном случае;
• InitialSlope – вектор начального уклона yp0:
yp0 = F(t0,y0)/M(t0,y0);
• InitialStep – предлагаемый начальный размер шага, по умолчанию
каждый решатель определяет его автоматически по своему алго-
ритму;
• MaxStep – максимальный шаг, по умолчанию во всех решателях
равен одной десятой интервала tspan;
• BDF (Backward Differentiation Formulas)[on|{off}] – указывает, нуж-
но ли использовать формулы обратного дифференцирования (мето-
ды Gear) вместо формул численного дифференцирования, исполь-
зуемых в ode15s по умолчанию;
• MaxOrder – максимальный порядок ode15S [1|2|3|4|{5}].
Решатели используют в списке опций различные параметры. В
приведенной ниже таблице они даны для решателей обычных (в том
числе жестких) дифференциальных уравнений.
Решатель bvp4c имеет очень небольшое число параметров, но при
работе с ним можно вводить не только матрицу Якоби интегрируемой
функции, но и матрицу Якоби, содержащую частные производные
функции граничных условий по границам интервала и по неизвестным
параметрам.

Параметры ode45 ode23 ode113 ode15s ode23s


RelTol, AbsTol + + + + +
OutputFcn, OutputSel,
+ + + + +
Refine, Stats
Events + + + + +
MaxStep, InitialStep + + + + +
Jconstant, Jacobian,
– – – + +
Jpattern, Vectorized
Mass – – – + +
MassConstant – – – + –
MaxOrder, BDF – – – + –

40
Выводы
Решатель систем ОДУ дает возможность получать решения сис-
тем из n уравнений. Система ОДУ может быть как однородной, так и
неоднородной. Решение сводится к следующему:
1) Создание m-файла. Независимо от вида системы он имеет вид:
function dy = MyFunc(t,y)
dy = zeros(n, 1);
dy(1) = f1(t, y(1), y(2), …, y(n));
dy(2) = f2(t, y(1), y(2), …, y(n));
……………………………
dy(n) = fn(t, y(1), y(2), …, y(n));
2) Получение решения и сопровождающий его график:
>>[T,Y]=solverDE('MyFunc',[t0 tfinal],[y10 y20 … yn0];
>>plot(T,Y)

Решатели систем обыкновенных дифференциальных уравнений


(ОДУ) позволяют строить графики решений как в виде обычных гра-
фиков (например, временных зависимостей), так и в виде фазовых
портретов – это параметрические графики, у которых по одной оси
указывается одна из зависимостей, а по другой – ее производная. К
примеру, фазовый портрет стационарного синусоидального колебания
представляет собой эллипс или окружность, которые являются пре-
дельными циклами. Отклонение от этих простых форм указывает на
наличие нелинейности. Затухающие или нарастающие колебания дают
фазовые портреты в виде закручивающейся или раскручивающейся
спирали. Более тонкие детали фазовых портретов рассматриваются в
ходе решения задач.

Приложение 2. Решение систем дифференциальных урав-


нений в символьном виде в системе MatLAB
Для решения дифференциальных уравнений в форме Коши
MatLAB имеет функцию dsolve('eqn1','eqn2', …), которая воз-
вращает аналитическое решение системы дифференциальных уравне-
ний. Начальные условия при необходимости задаются равенствами
eqni (вначале задаются уравнения, затем начальные условия).

41
По умолчанию независимой переменной считается "t" . Можно
использовать и другую переменную, включив ее в конец списка пара-
метров функции dsolve. Символ D обозначает производную по неза-
висимой переменной, то есть d/dt, при этом D2 означает d 2/dt 2 и т.д.
Начальные условия задаются в виде равенств y(a) = b или
Dy(a) = b, где y - независимая переменная, a и b – константы. Если
число начальных условий меньше, чем число дифференциальных
уравнений, то в решений будут присутствовать произвольные посто-
янные С1, С2 и т.д. Вывод осуществляется в виде массива записей.
Приведем два простых примера:
>> dsolve('D2y = 2*y+1')
ans =
1/2 1/2
exp(2 t) _C2 + exp(-2 t) _C1 - ½

>> dsolve('D2y = 2*y+1','y(0)=1','Dy(0)=0')


ans =
1/2 1/2
3/4 exp(2 t) + 3/4 exp(-2 t) - 1/2

Литература
1. Шампайн Л. Ф., Гладвел И., Томпсон С. "Решение обыкновенных
дифференциальных уравнений с использованием MATLAB: Учеб-
ное пособие. 1-е изд. " СПб.: Лань, 2009. – 304с.
2. Дубанов А.А. Решение систем дифференциальных уравнений в
MatLab. (http://www.exponenta.ru/educat/systemat/dubanov/index.asp)
3. Коткин Г.Л., Черкасский В.С. Компьютерное моделирование фи-
зических процессов с использованием MatLab. - Новосибирск: НГУ,
173 с., 2001.
(http://www.exponenta.ru/educat/systemat/cherkassky/main.asp)
4. Кетков Ю.Л., Кетков А.Ю., Шульц М.М. MatLab 7: программирова-
ние, численные методы. — СПб.: БХВ-Петербург, 2005. - 752 с: ил.
5. Yang W.Y., Cao W., Chung T.S., Morris J. Applied numerical methods
using MATLAB / A John Wiley & Sons, Inc., 2005
6. Moler С. Numerical Computing with MATLAB. Society for Industrial &
Applied Mathematics (http://www.mathworks.com/moler)

42
7. Левицкий А.А. Информатика. Основы численных методов: Лабора-
торный практикум. – Красноярск: ИПЦ КГТУ, 2005. – 111 с.
http://www.exponenta.ru/educat/systemat/levitsky/index.asp
8. Ильина В.Л., Силаев П.К. Численные методы для физиков-теорети-
ков. I. — Москва-Ижевск: Институт компьютерных исследований,
2003, 132 стр.

43
Работа 2. Цепочка связанных гармонических осцилля-
торов: свободные колебания

Введение
Модели, представляющие собой линейные цепочки (рис. 1), со-
стоящие из конечного или бесконечного числа связанных осциллято-
ров, оказались весьма эффективными и в настоящее время использу-
ются в различных областях физики: физике твердого тела, физике
сплошных сред, химической физике, радиофизике и др. Используя мо-
дели линейных цепочек, оказывается возможным естественным обра-
зом осуществить переход к волновым процессам и ввести такие поня-
тия как длина волны, групповая скорость, фазовая скорость, дисперсия
и др.

Рис. 1. Линейная цепочка связанных гармонических осцилляторов


Отмеченные обстоятельства определяют целесообразность рас-
смотрения данных моделей в соответствующих курсах физики и ком-
пьютерного моделирования. Однако необходимо отметить два важных
обстоятельства. Во-первых, аналитические решения уравнений движе-
ния длинных линейных цепочек ( N > 3 ) могут быть получены только
для относительно небольшого числа случаев [1]:
1) k 0 = k 1 = … = k N −1 , m 0 = m 1 = … = m N −1 ;
2) k 0 = k 2 = k 4 = … , k1 = k 3 = k 5 = … ; m0 = m1 = … = mN −1 ;
3) k 0 = k1 = … = k N −1 , m0 = m2 = m4 = … , m1 = m3 = m5 = … ;
4) k i = k ≠ k N , i = 0, 1,…, N − 1 , m0 = m1 = … = mN −1 ,
5) k i = k , i = 0, 1,…, N , mi = m ≠ mN −1 , i = 0, 1,…, N − 2 .
Во-вторых, большинство этих решений оказываются весьма громозд-
кими и для их последующего анализа приходится использовать ПК.
При составлении работы использованы материалы и алгоритмы
[2,3].

44
Математическая модель
Запишем уравнения движения для каждой массы колебательной
системы, представленной на рис. 1:
⎧ m0 x0 = − k0 x0 − k1 ( x0 − x1 )

⎨ mi xi = −ki ( xi − xi −1 ) − ki +1 ( xi − xi +1 ) , i = 1… N − 2. (1)
⎪ mN −1 x N −1 = −k N −1 ( x N −1 − x N − 2 ) − k N x N −1

Для удобства дальнейшего решения запишем уравнение (1), введя обо-
2
значение ω αβ = k α m β , в следующем виде:

⎧ x 0 = − ω 00 2
x 0 − ω 10 2
( x 0 − x1 )


⎨ x i = − ω ii ( x i − x i −1 ) − ω i +1 i ( x i − x i +1 ) , i = 1… N − 2 .
2 2
(2)

⎪⎩ x N −1 = − ω N2 −1 N −1 ( x N −1 − x N − 2 ) − ω NN 2
x
−1 N −1

Следуя общему подходу к решению рассматриваемой задачи, из-


ложенному в [4], ищем решение системы дифференциальных уравне-
ний (2) в виде:
jω t
x i = Ai e , i = 0 ,1.. N − 1. (3)

Здесь j = −1 , подставив (3) в систему (2), сгруппировав члены, про-


порциональные Ai, и записав систему в матричном виде, получим:
B⋅ A=0, (4)
где
⎛ A0 ⎞
⎜ ⎟
⎜ A1 ⎟
A=⎜ ⎟,
⎜ ⎟
⎜ A ⎟
⎝ N −1 ⎠

B − трехдиагональная матрица, элементы которой вычисляются по


следующим правилам:
2 2 2 2
B 00 = − ω + ω 00 + ω 10 , B 01 = − ω 10 ,
2
Bi ,i −1 = −ω ii2 B ii = − ω + ω ii2 + ω i2+1 i B ii +1 = − ω i2+1 i , i = 2 ,.. N − 2
, , , (5)
B N −1 N − 2 = − ω N2 −1 N −1 , B N −1 N −1 = − ω 2
+ω 2
N −1 N −1
+ω 2
NN −1
.

45
Необходимым и достаточным условием существования решения
системы уравнений (4) является равенство нулю определителя матри-
цы B
ω ij2 − ω 2
= 0. (6)

Уравнение (6), называемое характеристическим уравнением, явля-


ется уравнением степени N − 1 относительно ω 2 . Оно имеет в общем
случае N − 1 различных вещественных положительных корней
ω α2 , α = 1,..N − 1 . Каждому собственному числу ω α2 соответствует собст-
венный вектор Ξ α , являющийся решением уравнения
Ω ⋅ Ξα = ωα ⋅ Ξα , (7)

где Ω − трехдиагональная матрица элементы которой вычисляются по


следующим правилам:
Ω 00 = ω 002 + ω102 , Ω 01 = −ω102 ,
Ω i ,i −1 = −ω ii2 , Ω ii = ω ii2 + ω i2+1i , Ω ii +1 = −ω i2+1i , i = 2,..N − 2 , (8)
Ω N −1 N − 2 = −ω N2 −1 N −1 , Ω N −1 N −1 = ω N2 −1N −1 + ω NN
2
−1
.

Частоту ω α , α = 1,..N − 1 называют частотой нормальных колебаний, а


вектор Ξ α − вектором нормального колебания, отвечающего α-ой час-
тоте. Вектор нормального колебания rα меняется во времени по закону
rα = Ξα cos(ωα t + ϕ α ) . (9)
Общее решение системы дифференциальных уравнений (2) x (t ) , есть
суперпозиция всех векторов нормальных колебаний rα :
N −1
x (t ) = ∑ Cα Оα cos(ω α t + ϕ α ) , (10)
α =0

где Cα ,ϕ s − произвольные постоянные, определяемые из начальных ус-


ловий.
Скорость движения масс, можно определить, продифференци-
ровав (10) по времени:
N −1
x (t ) = −∑ Cα Оα ω α sin (ω α t + ϕ α ). (11)
α =0

Для решения задачи Коши системы дифференциальных уравнений

46
(2) необходимо задать значения координат x (0 ) и скоростей x (0 ) каж-
дого тела системы в начальный момент времени и решить систему
уравнений
⎧ x (0 ) = N −1 C О cos(ϕ )
⎪ ∑ α α α

α =0
N −1 (12)
⎪ x (0 ) = −∑ Cα Оα ω α sin (ϕ α )
⎩ α =0

относительно неизвестных C α ,ϕ α .
Запишем (12) в матричном виде
⎛ x (0 )⎞ ⎛ Θ Z ⎞ ⎛ C ⎞
⎜⎜ ⎟⎟ = ⎜⎜ ⎟⎟ ⋅ ⎜⎜ ⎟⎟ , (13)
⎝ x (0 )⎠ ⎝ Z Θ v ⎠ ⎝ C v ⎠
где
⎛ Ξ (0) Ξ
(1)
Ξ
( N −1 ) ⎞
⎜ 0 0 0 ⎟
⎜ (0) (1) ( N −1 ) ⎟
Ξ Ξ1 Ξ1
Θ=⎜ 1 ⎟, (14)
⎜ ⎟
⎜ ⎟
⎜ Ξ (0) Ξ
(1 ) ( N −1 ) ⎟
Ξ N −1
⎝ N −1 N −1 ⎠

⎛ − ω 0 Ξ (00 ) − ω1Ξ (01) − ω N −1Ξ (0N −1) ⎞⎟



⎜ − ω 0 Ξ1(0 ) − ω1Ξ1(1) − ω N −1Ξ1( N −1) ⎟
Θv = ⎜ ⎟, (15)
⎜ ⎟
⎜ − ω Ξ (0 ) − ω1Ξ (N1)−1 ( N −1) ⎟
− ω N −1Ξ N −1 ⎠
⎝ 0 N −1

⎛ C0 cos(ϕ 0 ) ⎞
⎜ ⎟
C =⎜ ⎟, (16)
⎜ C cos(ϕ )⎟
⎝ N −1 N −1 ⎠

⎛ C0 sin (ϕ 0 ) ⎞
⎜ ⎟
Cv = ⎜ ⎟, (17)
⎜ C sin (ϕ )⎟
⎝ N −1 N −1 ⎠

Z − нулевая матрица, размерности (N−1)×(N −9).


Система уравнений (13) оказывается нелинейной, однако, блочная
структура матрицы, позволяет найти решение данной системы не при-

47
бегая к численным методам. Для этого, сначала, решив две линейные
системы уравнений
Θ ⋅ C1 = x (0 ), (18)
Θ vC 2 = x (0) , (19)
найдем векторы C 1 , C 2 , затем координаты вектора С
Ci = Ci2 + C v i , i = 0,1,… N − 1 ,
2
(20)
и далее значения начальных фаз каждого нормального колебания:
⎛ Ci ⎞
ϕ i = arctan⎜⎜ ⎟.

(21)
C
⎝ v ⎠ i

Рис. 2 К выбору правильного значения угла


Отметим, что функция arctan на интервале [0;2π] является двузнач-
ной (рис. 2), поэтому для выбора правильных значений данной функ-
ции необходимо контролировать знаки числителя и знаменателя дроби
в выражении (20). Как очевидно из рис. 2, правильное значение угла
выбирается по следующим правилам:
⎧ ⎛ sin( x) ⎞
⎪ arctan⎜⎜ ⎟⎟ при sin( x) ≥ 0, cos( x ) ≥ 0
⎪ ⎝ cos( x ) ⎠
⎪ ⎛ sin( x) ⎞
⎪⎪ π + arctan ⎜⎜ ⎟⎟ при sin (x ) < 0, cos(x ) > 0
⎝ cos( x ) ⎠
ϑ=⎨ . (22)
⎪ π + arctan⎛⎜ sin( x) ⎞⎟ при sin( x ) < 0, cos( x ) < 0
⎪ ⎜ cos( x) ⎟
⎝ ⎠

⎪2π + arctan⎛⎜⎜ sin( x) ⎞⎟ при sin (x ) > 0, cos( x ) < 0
⎪⎩ ⎟
⎝ cos( x) ⎠

48
Алгоритм
Предваряя описание решения задачи об описании колебаний це-
почки связанных осцилляторов, приведем алгоритм ее решения:
1) Задать число тел, образующих цепочку N (пусть сначала N=3).
2) Задать массы тел mi , i=0,1…, N-1 (пусть сначала m= [1 2 1] , за-
метим, что в MatLab'e индексация начинается с 1 и заканчивает-
ся N).
3) Задать значения коэффициентов жесткости пружин k i , i=0,1…,
N. (Отметим, что для описания движения цепочки со свободным
концом достаточно положить k 0 = 0 или k N = 0 .) (Пусть
k = [1 1 1 1], заметим что в MatLab'e индексация начинается с 1
и заканчивается N+1)
4) Вычислить элементы матрицы Ω в соответствие с (8).
5) Найти собственные числа ω α2 матрицы Ω.
6) Найти собственные векторы Ξα , соответствующие набору соб-
ственных частот ω α2 .
7) Задать начальные условия x (0 ), x (0 ) (пусть сначала смещения
тел в момент времени t = 0 задаются вектором R0=[-0.2 0 -0.3], а
скорости тел в момент времени t = 0 – вектором v0=[1 -3 0]).
8) Решить систему линейных уравнений (18), (19), относительно
векторов С1 и С2, соответственно.
9) Вычислить координаты вектора С в соответствии с (20).
10) Вычислить значения начальных фаз нормальных колебаний ϕi в
соответствии с (21).
11) Определить законы движения тел, образующих колебательную
систему в соответствии с (10) и (11).
12) Провести анализ полученных законов движения.
Реализовать данный алгоритм в пакете MatLab. При задании вре-
менных параметров задачи можно использовать N1=2^13 для числа
узлов временной сетки, а для правой границы временного интервала
Tmax=80.
Итак, программа free_osc.m
%% free_osc.m
clear all
49
N=3; % N=10; % число тел колебательной системы
m=[1 2 1]; % массы тел колебательной системы
%m=ones(1,N);
% k=[1 1 1 1];
k=ones(1,N+1); % жесткости пружин
% колебательной системы
R0=[-.2 0 -.3]; % смещения тел в момент времени t = 0
%R0=zeros(1,N);R0(1)=.5;
v0=[1 -3 0]; % скорости тел в момент времени t = 0
%v0=zeros(1,N);
% вычисление элементов матрицы
for alpha=1:N+1
for beta=1:N
omega(alpha,beta)=k(alpha)/m(beta);
end;
end;
i=1:N;
j=1:N;
% вычисление элементов матрицы OMEGA
%в соответствии с (8)
OMEGA(i,j)=0;
for i=1:N
if i==1
OMEGA(i,i)=omega(1,1)+omega(2,1);
OMEGA(1,2)=-omega(2,1);
end;
if i>1
if i<N
OMEGA(i,i-1)=-omega(i,i);
OMEGA(i,i)=omega(i,i)+omega(i+1,i);
OMEGA(i,i+1)=-omega(i+1,i);
else
OMEGA(i,i-1)=-omega(i,i);
OMEGA(i,i)=omega(i,i)+omega(i+1,i);
end;
end;
end;

50
[Sigma,Teta]=eig(OMEGA); % вычисление
%собственных значений и
% собственных векторов матрицы OMEGA
Teta=Teta^0.5; % вычисление собственных частот
for i=1:N
for j=1:N
SigmaV(j,i)=-Teta(i,i)*Sigma(j,i);
end;
end;
C1=Sigma^-1*R0'; % решение системы уравнений (18)
C2=SigmaV^-1*v0'; % решение системы уравнений (19)
C=(C1.^2+C2.^2).^0.5; % вычисление координат вектора C
clear alpha
% вычисление фазы нормальных колебаний в соответствие
с (21), (22)
for i=1:N
if C(i)==0
alpha(i)=0;
else
alpha(i)=atan(C2(i)./C1(i));
if C1(i)<0
alpha(i)=pi+alpha(i);
end;
if C1(i)>0
if C2(i)<0
alpha(i)=2*pi+alpha(i);
end;
end;
end;
end;
N=length(OMEGA);
N1=2^13; % число узлов временной сетки
j=1:N1;
Tmax=80; % правая граница временного интервала
t(j)=(j-1)/(N1-1)*Tmax; % координаты узлов
%временной сетки
% вычисление значений координат тел в узлах

51
%временной сетки
for j=1:N1
s=zeros(N,1);
for i=1:N
s=s+C(i)*Sigma(:,i). ...
*cos(Teta(i,i)*t(j)+alpha(i));
end;
X(:,j)=s;
end;
% вычисление значений скоростей тел в узлах временной
сетки
for j=1:N1
s=zeros(N,1);
for i=1:N
s=s+C(i)*Sigma(:,i).*Teta(i,i)* ...
sin(Teta(i,i)*t(j)+alpha(i));
end;
Xv(:,j)=-s;
end;
% визуализация зависимостей мгновенных значений
% смещений X и скорости Xv от времени
figure(1);figure(1);plot(t,X(1,:),'-k',t,X(2,:), ...
'--k',t,X(3,:),':k')
figure(2);plot(t,Xv(1,:),'-k',t,Xv(2,:), ...
'--k',t,Xv(3,:),':k')
% построение траектории движения тел
% на фазовой плоскости
figure(3);plot(X(1,:),Xv(1,:))
figure(4);plot(X(2,:),Xv(2,:))
figure(5);plot(X(3,:),Xv(3,:))
% вычисление спектров зависимостей смещений
%тел системы от времени
c1=fft(X(1,:));
c2=fft(X(2,:));
c3=fft(X(3,:));
j=2:N1/2;
% вычисление спектральной плотности смещений тел
Cm1(j-1)=abs(c1(j-1))/(N1/2);
52
Cm2(j-1)=abs(c2(j-1))/(N1/2);
Cm3(j-1)=abs(c3(j-1))/(N1/2);
Freq(j-1)=(j-1)/Tmax;
% вычисление частот спектральных гармоник
% визуализация спектральных плотностей смещений тел
figure(6);semilogy(Freq,Cm1,'-k',Freq,10*Cm2, ...
'--k',Freq,500*Cm3,':k')
axis([0 2.5 10^-3 2000])
Результаты выполнения приведенной выше программы действий
представлены на рис. 3−8.
4

-1

-2

-3

-4
0 10 20 30 40 50 60 70 80

Рис. 3. Зависимость мгновенных значений смещений тел от времени. Здесь


и далее линия, относящееся к первому телу – сплошная (черная), ко
второму – штриховая (красная), к третьему – точечная (синяя)
4

-1

-2

-3

-4
0 10 20 30 40 50 60 70 80

Рис. 4 Зависимость мгновенных значений скорости движения тел от вре-


мени

53
4

-1

-2

-3

-4
-4 -3 -2 -1 0 1 2 3 4

Рис. 5 Фазовая траектория первого тела


4

-1

-2

-3

-4
-4 -3 -2 -1 0 1 2 3 4

Рис. 6. Фазовая траектория второго тела


4

-1

-2

-3

-4
-4 -3 -2 -1 0 1 2 3 4

Рис. 7. Фазовая траектория третьего тела

54
2
10

0
10

-2
10

0 0.5 1 1.5 2 2.5

Рис. 8. Спектры функций x(t i ) (масштаб по оси 0Y − полулогарифмиче-


ский, для большей наглядности графики сдвинуты друг относи-
тельно друга)

Анализ результатов. Замечания к программной реализации

1. Описанная последовательность команд позволяет проводить ана-


лиз движения линейной цепочки, с произвольным числом масс.
Однако вводить данные при больших значениях N недостаточно
удобно. Поэтому для анализа колебаний длинных линейных цепо-
чек нужно сначала создать файлы, содержащие значения масс, ко-
эффициентов жесткости пружин, начальные смещения и коорди-
наты вектора начальной скорости, используя, например, програм-
му электронных таблиц Excel (или Origin). При этом следует рас-
положить исходные данные в одном столбце и сохранить их в
файле в формате «Текстовый файл (разделители−пробелы)». В
этом случае, созданный файл будет иметь расширение txt. Обра-
тите внимание, что файл нужно размещать в папке, имеющей на-
звание, состоящее из букв английского алфавита, имя файла, так-
же должно состоять из букв английского алфавита. Чтение дан-
ных из файлов данных типов осуществляется в командой
dlmread. Например, если значения масс пружинок сохранены в
файле mass.txt, находящемся на диске С в папке Data, считывание
данных осуществляется следующей командой:
m = dlmread(′C:\Data\mass.txt′). Обратите внимание, что
при создании файла необходимо использовать настройку, при ко-
торой для разделения целой и дробных частей действительных
чисел используется точка. Для установки соответствующего стан-
55
дарта ввода действительных чисел необходимо выполнить сле-
дующую последовательность команд операционной системы
Windows: Пуск ⇒ Настройка ⇒ Панель управления ⇒ Язык и
региональные стандарты ⇒ Настройка, затем в поле Раздели-
тель целой и дробной части установить «.».)
2. Для нахождения собственных чисел и собственных векторов мат-
рицы нами использовалась функция eig. При обращении
>> d = eig(А)
функция возвращает вектор-столбец, содержащий собственные
значения матрицы А. При обращении
>> [V,D] = eig(А)
функция возвращает две матрицы, диагональная матрица V со-
держит собственные значения матрицы А, матрица D − собствен-
ные векторы, записанные в виде вектор-столбцов.

Задание. Свободные колебания двух связанных осцилля-


торов (7 задач)

ЗАДАЧА 1. ФОРМУЛИРОВКА
1) Исследуйте свободные колебания системы, состоящей из двух
связанных осцилляторов. Вычислите зависимости x0 (t ) , x0 (t ) ,
x1 (t ) , x1 (t ) для начальных условий x0 (0 ) = 0.5, x0 (0 ) = 0, x1 (0 ) = 0,
x1 (0 ) = 0 считая, что {k 0 = k 2 = 1, k1 = 0.8, m0 = m1 = 1} ,
{k 0 = k 2 = 1, k1 = 1, m0 = m1 = 1} на временном интервале [0;800], вы-
брав временную сетку, состоящую из 214 точек. Что представляют
собой изучаемые движения?
2) Проанализируйте удвоенные спектры зависимостей x0 (t ) , x1 (t )
(Здесь множитель 2 учитывает тот факт, что в спектре функции
одной частотной компоненте соответствуют две гармоники с по-
ложительной и отрицательной частотами.) Как соотносятся коор-
динаты экстремумов спектров зависимостей x0 (t ) , x1 (t ) с собст-
венными частотами, значения которых возвращаются в вектор Ξ?
Как соотносятся значения экстремумов спектров зависимостей
x0 (t ) , x1 (t ) со значениями коэффициентов, входящих в выражение
(11)? (Указание: В выбранных в описанном выше документе обо-

56
значениях зависимости координат тел колебательной системы
имеют вид:
x0 (t ) = Θ 0 , 0 C0 cos (Ξ 0 t + α 0 ) + Θ 0 ,1C1 cos (Ξ1t + α 1 ),

x1 (t ) = Θ1, 0 C1 cos (Ξ 0 t + α 0 ) + Θ1,1C1 cos (Ξ1t + α 1 ) .)

3) В чем причина различий между значениями коэффициентов, вхо-


дящих в выражения для x0 (t ) , x1 (t ) , и значениями экстремумов со-
ответствующих спектров? Как меняется точность спектральной
оценки коэффициентов, входящих в выражения для x0 (t ) , x1 (t ) ,
при изменении шага временной сетки? Как меняется точность
спектральной оценки коэффициентов, входящих в выражения для
x0 (t ) , x1 (t ) , при длительности сигнала? Объясните полученные ре-
зультаты.

ЗАДАЧА 2. ДРУГИЕ ПАРАМЕТРЫ ДЛЯ ЗАДАЧИ 1. ЗАВИСИМОСТЬ ЧАСТОТ ОТ


ЖЕСТКОСТИ

Решите Задачу 1, считая, что {k 0 = k 2 = 1, k1 = 0.2, m0 = m1 = 1}. Как ме-


няются частоты каждого колебания при k1 = 0.1.

ЗАДАЧА 3. ЗАВИСИМОСТЬ ЭНЕРГИИ И ЧАСТОТ ОТ ПАРАМЕТРОВ. I


Решите задачи 1, 2 для начальных условий x0 (0 ) = 0.5, x0 (0 ) = 0,
x1 (0 ) = 0.5, x1 (0 ) = 0 . Получите выражения для кинетической и потенци-
альной энергий каждой частицы. Пользуясь законом сохранения энер-
гии, справедливого для всей системы, проверьте полученные выраже-
ния. Вычислите и изобразите энергию каждой частицы как функцию
времени графически и качественно опишите ее поведение. Исследуйте,
как зависит частота колебаний от жесткости пружин k 0 = k 2 , k1 . Объяс-
ните полученные результаты.

ЗАДАЧА 4. ЗАВИСИМОСТЬ ЭНЕРГИИ И ЧАСТОТ ОТ ПАРАМЕТРОВ. II


Решите задачи 1, 2 для начальных условий x0 (0 ) = 0.5, x0 (0 ) = 0,
x1 (0 ) = −0.5, x1 (0 ) = 0 . Вычислите и изобразите графически энергию ка-
ждой частицы как функцию времени и качественно опишите ее пове-
дение. Проведите исследование и определите, как зависит частота ко-
лебаний от жесткости пружин k 0 = k 2 , k1 . Объясните полученные ре-
57
зультаты. Сравните полученное значение частоты с соответствующим
значением, найденным в предыдущей задаче.

ЗАДАЧА 5. ЗАВИСИМОСТЬ ЧАСТОТ ОТ МАССЫ ТЕЛ


Решите задачи 1, 2, считая, что {k 0 = k 2 = 1, k1 = 0.2, m0 = 1, m2 = 2} .
Как меняются частоты каждого колебания при k1 = 1 ? Исследуйте за-
висимость частот собственных колебаний от массы тел колебательной
системы.

ЗАДАЧА 6. ОБРАТНАЯ ЗАДАЧА


Дополните описанный выше документ модулем, позволяющим
решать обратную задачу: по известным значениям собственных частот
и соответствующим им собственным векторам определять начальные
условия, при которых возбуждается только одна мода колебаний. Про-
верьте правильность работы модуля, задав соответствующие началь-
ные условия, вычислив зависимости x0 (t ) , x1 (t ) и проанализировав
спектр данных зависимостей.

ЗАДАЧА 7. БИЕНИЯ
Как известно [5], при сложении двух колебаний x1 (t ) = A cos(ω1t ) ,
x2 (t ) = A cos(ω 2 t ) с равными амплитудами и близкими частотами ω1 ,
ω 2 , отвечающих следующему условию: ω 2 = ω1 ± Δω , где
Δω << ω 1 ,ω 2 , в рассматриваемой системе всегда возникают биения,
т.е. зависимость координаты от времени описывается зависимостью
x(t ) = [2 A cos(ω mod t )]cos(ω midle t ) ,

где ωmidl = (ω1 + ω2 ) 2 , ωmod = ω1 − ω 2 2 .


1) Используя результаты задачи 3, выберите значения коэффициен-
тов жесткости пружин, обеспечивающих возникновение в системе
биений. Используя результаты задачи 6, определите начальные
условия, при которых в системе связанных осцилляторов возни-
кают биения. Для найденных начальных условий вычислите зави-
симости x0 (t ) , x0 (t ) , x1 (t ) , x1 (t ) .
2) Определите значения ω midl , ω mod, задайте функцию x(t), вычислите
мгновенные значения смещения, описываемого данной функцией,
58
и отобразите их на графике. Сравните полученные результаты с
результатами расчетов по формуле (10).

ВЫВОДЫ ПО ЗАДАНИЮ
Решив задачи 1−7, можно сделать следующие выводы: движение
колебательной системы состоящей из двух связанных осцилляторов
всегда представляет сумму двух движений, имеющих различные час-
тоты (нормальные колебания). Существуют начальные условия, при
которых в системе возбуждается только одно нормальное колебание.
При {k 0 = k 2 ≠ k1 , m0 = m1 = 1} нижняя частота нормальных колебаний
ω1 = k 0 m , верхняя частота нормальных колебаний ω 2 = (k 0
+ 2k1 ) m .
При возбуждении нормальных колебаний с частотой ω1 частицы ко-
леблются в фазе, с частотой ω 2 частицы колеблются в противофазе.
При определенных значениях масс, коэффициентов жесткости пружин
и начальных условиях в колебательной системе возникают биения.

Задание. Свободные колебания трех связанных осциллято-


ров

ЗАДАЧА 8. ФОРМУЛИРОВКА
Рассмотрите движение колебательной системы, состоящую из
трех связанных осцилляторов, считая, что { k 0 = k 4 = 1, k1 = k 2 = k 3 = 0.2,
mi = 1, i = 0,1,2 }, с ненулевыми начальными условиями. Опишите зави-
симость смещения частиц от времени.

ЗАДАЧА 9. ТРИ НАБОРА ПАРАМЕТРОВ ДЛЯ ЗАДАЧИ 8.


Решите задачу 8 с начальными условиями, приведенными в таб. 1,
полагая все начальные скорости равными нулю.
Таблица 1 Начальные условия для задачи 10
x0 (0 ) x1 (0 ) x2 (0 )
Случай 1 0.5 0.5 0.5
Случай 2 0.5 -0.5 0.5
Случай 3 0.5 0 -0.5

59
Задание. Колебания N связанных осцилляторов (N ≥ 10)

ЗАДАЧА 10. СРАВНЕНИЕ РЕШЕНИЙ. ФАЗОВАЯ СКОРОСТЬ


Рассмотрите движение колебательной системы, состоящей из N
связанных осцилляторов (N ≥ 10), считая, что { mi = 1, i = 0,1,…, N − 1,
k j = 1, j = 0,1,…, N } , при различных начальных условиях.
1) Сравните численные значения собственных частот ω s с известным
k ⎛ πs ⎞
аналитическим результатом ω s = 2 sin⎜⎜ ⎟, s = 1,2,…, N
m ⎝ 2( N + 1) ⎟⎠
πs
[1, задача № 7.1], где K s = называют волновым вектором
2( N + 1)
s-й моды колебаний. Постройте зависимость ω s = ω s (K ) .
2) Величину v f = ω s K s называют фазовой скоростью колебаний. По-
стройте график зависимости v f = v f (K s ) и убедитесь в том, что при
s ≈ 1 (длинноволновой предел) фазовая скорость не зависит от
волнового вектора.

ЗАДАЧА 11. ИССЛЕДОВАНИЕ «БОЛЬШОЙ» СИСТЕМЫ. I


Рассмотрите движение колебательной системы, состоящей из N
связанных осцилляторов (N ≥ 10), считая, что { mi = 1, i = 0,1,…, N − 1,
k j = 1, j = 0,1,…, N }. Задайте начальные условия x0 (0 ) = 0.5 ,
xi (0 ) = 0, i = 1,2,…, N − 1 .
1) Вычислите мгновенные значения функций xi (t ), i = 0,1,…, N − 1 .
2) Используя мгновенные значения функций xi (t ), i = 0,1,…, N − 1 , оп-
ределите скорость распространения возмущений в линейной це-
почке. (Указание. Для нахождения скорости распространения
возмущения следует определить временные интервалы tn
(n=1,2,…,N−1), в течении которых смещение n-го тела превысит
заданное значение(например, 10-2), затем по зависимости n=f(tn),
используя линейную регрессию 3, оценить угловой коэффициент

3
В пакете MATLAB для нахождения наклона линии регрессии в смысле наименьших
квадратов необходимо выполнить следующую последовательность команд:
% задание исходных данных
60
линии регрессии.)
3) Для того, чтобы убедиться в независимости вашей оценки скоро-
сти распространения возмущений от N, повторите расчеты для
бóльших значений N.
4) Проведите исследование и определите зависимость скорости рас-
пространения возмущения от массы тел, образующих колебатель-
ную систему, и жесткости пружин.
5) Сравните численные решения для свободных колебаний при
больших N ≥ 10 в данной работе и в "Работа 3. Цепочка связанных
гармонических осцилляторов: вынужденные колебания". Рас-
смотреть случаи
– все массы и пружинки одинаковы,
– все пружинки одинаковы, а четные и нечетные частицы имеют
различные массы (появление "акустической" и "оптической
ветви".
5) Рассмотрите «неупорядоченную» систему при помощи приписы-
вания телам колебательной системы различных масс (например, с
помощью генератора случайных чисел). Как влияет беспорядок на
скорость распространения возмущения?
6) Рассмотрите «неупорядоченную» систему при помощи приписы-
вания пружинам колебательной системы различных жесткостей
(например, с помощью генератора случайных чисел). Как влияет
беспорядок на скорость распространения возмущения?

ЗАДАЧА 12. ИССЛЕДОВАНИЕ «БОЛЬШОЙ» СИСТЕМЫ. II


Определить свободные колебания системы частиц, могущих дви-
гаться по прямой:

>> t=[0 1 2 3 4]';


>> y=[0.1 0.9 2.1 2.9 4.15]';
% решение системы уравнений метода наименьших квадратов
>> X=[ones(size(t)) t];
>> a=X\y;
>> T=0:0.01:4;T=T'; % задание временной сетки для вычисления значений
% аппроксимирующей функции
>> Y=[ones(size(T)) T]*a; % вычисление значений аппроксимирующей функции
>> plot(t,y,'o',T,Y,'-'); % визуализация исходных данных и аппроксимирующей
функции
61
а) 2N частиц с массами mj = m (j = 0, 2, …, 2N-2) и mj = M (j = 1, 3, …,
2N-1), соединенными пружинками жесткости kj = k (j = 0, 1, 2, …,
2N);
б) 2N частиц с массами mj = m (j = 0, 1, 2, …, 2N-1), соединенными
пружинками жесткости kj = k (j = 0, 2, …, 2N) и kj = K (j = 1, 3, …,
2N-1);
в) 2N+1 частиц с массами mj = m (j = 0, 1, 2, …, 2N), соединенными
пружинками жесткости kj = k (j = 0, 2, …, 2N) и kj = K (j = 1, 3, …,
2N+1).
Сравнить численное решение с аналитическим (см. задачу 7.4 из
задачника [1]).

Литература
1. Коткин Г.Л., Сербо В.Г. Сборник задач по классической механике.
М.: Наука, 1977.
2. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. Т. 1-
2, 1990, М.: Мир.
3. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. – М.: Горячая линия – Телеком, 592 с., 2003.
4. Ландау Л.Д., Лифшиц Е.М. Механика. М.: Наука, 2000.
5. Крауфорд Ф. Волны. М.: Наука, 1974.

62
Работа 3. Цепочка связанных гармонических осцилля-
торов: вынужденные колебания

Введение
Рассмотрим движения движение цепочки связанных гармониче-
ских осцилляторов (рис. 1) под действием вынуждающей силы. Про-
водимое рассмотрение ограничим случаем, когда сила приложена к
точке А колебательной системы, что для достаточно длинных цепочек
не приводит, к потере общности получаемых результатов.

Рис. 1 Цепочка связанных гармонических осцилляторов под действием


вынуждающей силы
При составлении работы использованы материалы и алгоритмы
[1,2].

Математическая модель и алгоритм


В отличие от предыдущей работы 2, где мы изучали свободные
колебания такой цепочки, воспользуемся встроенным алгоритмом ре-
шения дифференциальных уравнений (ДУ) (см. Работу 1). Система
ДУ, описывающих движение каждого тела системы, имеет следующий
вид:
⎧ F (t )
⎪ x0 = −ω 2
00 x0 − ω 2
10 ( x0 − x 1 ) +
m0
⎪⎪
⎨ xi = −ωii ( xi − xi −1 ) − ωi +1i ( xi − xi +1 ) , i = 1… N − 2.
2 2
(1)
⎪ x N −1 = −ωN2 −1N −1 ( xN −1 − xN − 2 ) − ωNN 2
−1 x N −1

⎪⎩
Решения системы (1) будем искать численно. Решение системы диф-
ференциальных уравнений в пакете MatLab находится в соответствие
со следующим алгоритмом:
1) задать вектор-функцию, возвращающую значения первых произ-
водных системы ДУ (размерность функции 2N); предусмотреть
функцию, описывающую внешнюю вынуждающую силу; пере-
63
менные k m A Omega описать как global;
2) задать вектор, содержащий начальные условия
( xi ( 0 ) , xi ( 0 ) , i = 1,2… N − 1 );
3) обратиться к одной из функций, возвращающих таблицу, содер-
жащую численное решение системы ДУ, например функции
ode45;
4) провести визуализацию полученных численных решений.
Описание функции, возвращающей значения первых производных
системы ДУ (1), можно разместить в файле euler2.m
function z=euler2(t,x)
% описание функции, возвращающей значения первых про-
изводных
global k m A Omega
N=length(m); % число тел колебательной системы
z=zeros(2*N,1);
z(1)=x(2);
z(2)=-(k(1)/m(1))*x(1)-(k(2)/m(1))*...
(x(1)-x(3))+F(t,A,Omega);
K=3;
for i=2:N-1
z(K)=x(K+1);
z(K+1)=-(k(i)/m(i))*(x(K)-x(K-2))- ...
(k(i+1)/m(i))*(x(K)-x(K+2));
K=K+2;
end;
z(2*N-1)=x(2*N);
z(2*N)=-(k(N)/m(N))*(x(2*N-1)-x(2*N-3))- ...
k(N+1)/m(N)*x(2*N-1);

function f=F(t,A,Omega)
% функция, описывающая внешнюю вынуждающую силу
f=A*sin(Omega*t);

Найдем решения и построим графики. Результат выполнения приве-


денной ниже программы forced_osc.m представлен далее на рис. 2.
Далее для нахождения и визуализации численного решения системы

64
ДУ (1), описывающих систему, совершающую свободные колебания,
для определенности зададим:
%% forced_osc.m
% Forced oscillations
clear all;
global k m A Omega
N=16; % число тел колебательной системы
n=1:N;
m(n)=1; % задание масс тел
i=1:N+1;
k(i)=1; % задание жесткостей пружин колебательной сис-
темы
n=1:2*N;
% начальные условия
R0(n)=0;
R0(1)=0.5
A=0; % амплитуда внешней вынуждающей силы
Omega=0.0; % частота внешней вынуждающей силы
Tfin=50*pi; %правая граница временной сетки
Np=2^13-1; % число узлов временной сетки
[T,M]=ode45('euler2',[0:Tfin/Np:Tfin],R0);
subplot(4,4,1);plot(T,M(:,1));axis([0 40 -0.5 0.5]);
title('n=1');
subplot(4,4,5);plot(T,M(:,3));axis([0 40 -0.5 0.5]);
title('n=2');
subplot(4,4,9);plot(T,M(:,5));axis([0 40 -0.5 0.5]);
title('n=3');
subplot(4,4,13);plot(T,M(:,7));axis([0 40 -0.5 0.5]);
title('n=4');
subplot(4,4,2);plot(T,M(:,9));axis([0 40 -0.5 0.5]);
title('n=5');
subplot(4,4,6);plot(T,M(:,11));axis([0 40 -0.5 0.5]);
title('n=6');
subplot(4,4,10);plot(T,M(:,13));axis([0 40 -0.5 0.5]);
title('n=7');
subplot(4,4,14);plot(T,M(:,15));axis([0 40 -0.5 0.5]);
title('n=8');
subplot(4,4,3);plot(T,M(:,17));axis([0 40 -0.5 0.5]);
title('n=9');
subplot(4,4,7);plot(T,M(:,19));axis([0 40 -0.5 0.5]);
title('n=10');
65
n=1 n=5 n=9 n=13
0.5 0.5 0.5 0.5

0 0 0 0

-0.5 -0.5 -0.5 -0.5


0 40 0 40 0 40 0 40
n=2 n=6 n=10 n=14
0.5 0.5 0.5 0.5

0 0 0 0

-0.5 -0.5 -0.5 -0.5


0 40 0 40 0 40 0 40
n=3 n=7 n=11 n=15
0.5 0.5 0.5 0.5

0 0 0 0

-0.5 -0.5 -0.5 -0.5


0 40 0 40 0 40 0 40
n=4
n=4 n=8
n=8 n=12
n=12 n=16
n=16
0.5
0.5 0.5
0.5 0.5
0.5 0.5
0.5

0
0 0
0 0
0 00

-0.5
-0.5 -0.5
-0.5 -0.5
-0.5 -0.5
-0.5
0
0 40
40 0
0 40
40 0
0 40
40 00 40
40

Рис. 32 Зависимость мгновенных значений смещения шестнадцати тел сис-


темы от времени для свободных
вынужденных колебаний
колебаний
subplot(4,4,11);plot(T,M(:,21));axis([0 40 -0.5 0.5]);
title('n=11');
subplot(4,4,15);plot(T,M(:,23));axis([0 40 -0.5 0.5]);
title('n=12');
subplot(4,4,4);plot(T,M(:,25));axis([0 40 -0.5 0.5]);
title('n=13');
subplot(4,4,8);plot(T,M(:,27));axis([0 40 -0.5
0.5]);title('n=14');
subplot(4,4,12);plot(T,M(:,29));axis([0 40 -0.5 0.5]);
title('n=15');
subplot(4,4,16);plot(T,M(:,31));axis([0 40 -0.5 0.5]);
title('n=16');
Изменим две строки в программе forced_osc.m и увидим, как
влияет "включение" вынуждающей силы.
A=0.1; % амплитуда внешней вынуждающей силы
Omega=1.; % частота внешней вынуждающей силы
Результат с вынужденными колебаниями представлен на рис. 3.

66
Устойчивость метода
Одной из основных проблем численного решения ДУ и систем ДУ
является проблема выбора шага интегрирования Δt , поскольку при
достаточно большом шаге интегрирования возникают неустойчивые
решения, т.е. решения, погрешность которых начинает возрастать во
времени экспоненциально быстро. Один из способов проверки устой-
чивости метода заключается в контроле величины полной энергии, ко-
торая в случае свободных колебаний должна сохраняться, поэтому для
проверки правильности выбора шага интегрирования Δt можно ис-
пользовать следующий алгоритм:
1) Задать начальные смещения и скорости тел цепочки связанных
осцилляторов.
2) Задать временной интервал, на котором ищется решение системы
ДУ.
3) Задать число точек, в которых ищется численное решение систе-
мы ДУ.
4) Найти решение системы ДУ.
5) Вычислить значения энергии системы связанных осцилляторов в
каждый момент времени.
6) Проанализировать изменение энергии системы во времени на за-
данном временном интервале и оценить точность выполнения за-
кона сохранения энергии.
7) При неудовлетворительной точности решения повторить пп. 3−6.
8) При удовлетворительной точности решения перейти к анализу
вынужденных колебаний.
Как очевидно, для реализации описанного выше алгоритма необ-
ходимо уметь вычислять энергии каждого из тел системы в заданные
моменты времени. Для решения данной задачи можно использовать
функцию En, описание которой можно сохранить в файле En.m.
function E=En(N,m,k,M)
K=length(M); % число строк матрицы решений
K1=1;
for j=1:N
for i=1:K
if j>1
if j<N
67
e(i)=0.5*m(j)*M(i,2*j).^2+...
0.25*k(j)*(M(i,2*j-1)-M(i,2*j-3)).^2+...
0.25*k(j+1)*(M(i,2*j-1)-M(i,2*j+1)).^2;
end;
end;
if j==1
e(i)=0.5*m(1)*M(i,2)^2+0.5*k(1)*M(i,1)^2+...
0.25*k(2)*(M(i,1)-M(i,3))^2;
end;
if j==N
e(i)=0.5*m(N)*M(i,2*N)^2+0.5*k(N+1)* ...
M(i,2*N-1)^2+0.25*k(N)*(M(i,2*N-1)-M(i,2*N-3))^2;
end;
end;
en(:,K1)=e';
K1=K1+1;
end;
E=en;
Для вычисления мгновенных значений энергии тел колебательной
системы и полной энергии необходимо выполнить следующую программу:
%% E_full.m
clear all;
global k m A Omega
N=16;
n=1:N;
m(n)=1;
i=1:N+1;
k(i)=1;
n=1:2*N;
R0(n)=0;
R0(1)=0.5;
A=0.0;
Omega=0.0;
Tfin=50*pi;
Np=2^13-1;
[T,M]=ode45('euler2',[0:Tfin/Np:Tfin],R0);
E=En(N,m,k,M);
68
% plot(T,E(1,:),T,E(8,:),T,E(16
for i=1:Np+1
s=E(i,:);
Efull(i)=sum(s);
end;
figure(1);plot(T,E(:,1),'r-',T,E(:,4), ...
'g--',T,E(:,8),'b:',T,E(:,12),'k-.')
axis([0 30 0 0.25]);
legend('1','4','8','12',1);
figure(2);plot(T,Efull)
Часть результатов выполнения приведенной выше программы
представлены на рис. 4, 5.
0.25
1
4
0.2 8
12

0.15

0.1

0.05

0
0 5 10 15 20 25 30

Рис. 4 Мгновенные значения энергий выбранных тел (1-го, 4-го, 8-го и


12-го) колебательной системы
0.25

0.2498

0.2496

0.2494

0.2492

0.249

0.2488

0.2486

0.2484

0 20 40 60 80 100 120 140 160

69
Рис. 5 Зависимость полной энергии системы от времени
Анализ зависимости мгновенной энергии колебательной системы
от времени, представленная на рис. 5, показывает, что полная энергия
изменяется от своего первоначального значения по линейному закону.
При этом максимальная величина отклонения, характеризующая точ-
ность численного решения, на выбранном временном интервале не
превосходит 0.24%. Рассмотрите также зависимость мгновенных
значения энергий выбранных тел в полном временном интервале [0,
160], чтобы увидеть "возвратность колебаний". Добавьте строки:
figure(3);plot(T,E(:,1),'r-',T,E(:,4), ...
'g--',T,E(:,8),'b:',T,E(:,12),'k-.')
legend('1','4','8','12',1);

Задание. Сравнение решений

ЗАДАЧА 1. СВОБОДНЫЕ КОЛЕБАНИЯ


Используя описанный выше документ, найдите точные значения
зависимостей координат тел системы связанных осцилляторов от вре-
мени, совершающей свободные колебания. Сравните зависимости ко-
ординат тел системы связанных осцилляторов от времени, найденные
численным решением системы ДУ (1), с точными значениями. Оцени-
те точность численного решения.
Сравните численные решения для свободных колебаний при
больших N ≥ 10 в данной работе и в Работе 2 "Работа 2. Цепочка свя-
занных гармонических осцилляторов: свободные колебания". Рассмот-
реть случаи
– все массы и пружинки одинаковы,
– все пружинки одинаковы, а четные и нечетные частицы имеют раз-
личные массы.
Для анализа движения системы связанных осцилляторов под дей-
ствием вынуждающей силы следует в приведенной выше последова-
тельности команд задать отличными от нуля значения переменных A и
Omega.

70
ЗАДАЧА 2. ИССЛЕДОВАНИЕ ВЫНУЖДЕННЫХ КОЛЕБАНИЙ
Рассмотрите движение колебательной системы, состоящей из N
связанных осцилляторов (N ≥ 10), считая, что { mi = 1, i = 0,1,…, N − 1,
k j = 1, j = 0,1,…, N } , при начальных условиях { xi ( 0 ) = 0, xi ( 0 ) = 0 } под
действием внешней силы f (t ) = A sin ( Ωt ) , приложенной в т. А.
1) Найдите частоты собственных колебаний ωs , s = 0,1,…, N − 1 рас-
сматриваемой системы связанных гармонических осцилляторов.
2) Исследуйте движение каждого из тел системы связанных осцил-
ляторов при Ω = ωs , s = 0,1,…, N − 1 , используя для этого зависи-
мости xi ( t ) , vi ( t ) , Ei ( t ) i = 0,1,…, N − 1 и их спектры.
3) Исследуйте движение каждого из тел системы связанных осцил-
ляторов при условии
{ Ω ∈ ⎡⎣ min (ωs ) ;max (ωs ) ⎤⎦ , где Ω ≠ ωs , s = 0,1,…, N − 1 }.
4) Опишите движение колебательной системы при Ω << min (ωs ) и
Ω >> max (ωs ) . Как зависит амплитуда колебаний от номера час-
тицы при Ω >> max (ωs ) ?
5) Опишите движение колебательной системы при Ω < min (ωs ) и
Ω > max (ωs ) .
6) Исследуйте зависимость скорости распространения возмущений в
линейной цепочке от частоты возбуждающей силы. Объясните
полученный результат.
7) Исследуйте зависимость скорости распространения возмущений в
линейной цепочке от массы тел системы связанных осцилляторов.
8) Исследуйте зависимость скорости распространения возмущения в
линейной системе от жесткости пружин.

ВЫВОДЫ ПО РЕШЕНИЮ ЗАДАЧИ 2.


В результате решения задачи 2 можно сделать следующие выво-
ды: в линейной системе связанных гармонических осцилляторов про-
исходит передача энергии вдоль цепочки от левого конца цепочки к
правому. Рассматриваемая система обладает фильтрующими свойст-
вами, не пропуская колебания с частотами Ω << min (ωs ) и

71
Ω >> max (ωs ) . При воздействии на систему внешней вынуждающей
силы с частотой Ω , отвечающей условию Ω << min (ωs ) , система со-
вершает колебания как единое целое с частотой, равной частоте внеш-
ней вынуждающей силы. При воздействии на систему внешней выну-
ждающей силы с частотой Ω , отвечающей условию Ω >> max (ωs ) ,
амплитуды колебаний частиц убывают к правому концу цепочки.

Задание. Варианты

ЗАДАЧА 3. ВАРИАНТ I
Решите задачу 2, считая, что { mi = 1, i = 0,2,…, N − 1,
mi = 2, i = 1,3,…, N k j = 1, j = 0,1,…, N }.

ЗАДАЧА 4. ВАРИАНТ II
Решите задачу 2, считая, что { mi = 1, i = 0,1,…, N − 1,
k j = 1, j = 0,2,…, N , k j = 2, j = 1,3,…, N − 1 }.

Задание. Системы с различающимися параметрами

ЗАДАЧА 5. РАЗЛИЧИЯ В МАССАХ ТЕЛ


Решите задачу 2, считая, что система, состоит из осцилляторов
различных масс (задавая массы, например, с помощью генератора слу-
чайных чисел). Как влияет беспорядок на поведение системы и ско-
рость распространения возмущения?

ЗАДАЧА 6. РАЗЛИЧИЯ В ЖЕСТКОСТИ ПРУЖИН


Решите задачу 2, считая, что система, состоит из осцилляторов с
одинаковыми массами, соединенными пружинами различной жестко-
сти (задавая значения коэффициентов жесткости, например, с помо-
щью генератора случайных чисел). Как влияет беспорядок на поведе-
ние системы и скорость распространения возмущения?

Литература
1. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. М.:
Мир, 1990. С. 220.
72
2. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. – М.: Горячая линия – Телеком, 592 с. , 2003.
3. Ландау Л.Д., Лифшиц Е.М. Механика. М.: Наука, 2000.
4. Коткин Г.Л., Сербо В.Г. Сборник задач по классической механике.
М.: Наука, 1977.

73
Работа 4. Волновые пакеты, движущихся в среде с дис-
персией: Фурье-анализ

Введение
При составлении лабораторной работы использованы материалы и
алгоритмы, изложенные в книгах [1,2].

Математическая модель
Как известно, функция, описывающая гармоническую волну, рас-
пространяющуюся в бездисперсионной среде, записывается в виде
u ( x, t ) = A cos( kx − ω t ) , (1)

где k= 2π λ − волновой вектор, ω = 2π T = 2π f − круговая частота


(здесь T − период волны, f − круговая частота).
Анализ выражения (1) показывает, что можно ввести фазовую
функцию косинусоидальной бегущей волны, распространяющейся в
положительном направлении оси 0Х, как аргумент волновой функции
cos (ω t − kx ) :

ϕ ( x, t ) = ω t − kx . (2)

Если мы хотим следить за каким-либо гребнем волны (максимум


cos ϕ ( x, t ) ) или за ее впадиной (минимум cos ϕ ( x, t ) ), по мере увеличе-
ния времени переходить ко всё большим значениям х так, чтобы фаза
ϕ ( x, t ) была постоянной. Условие постоянства фазы с математической
точки зрения означает, что полный дифференциал функции ϕ ( x, t ) ,
имеющий вид
⎛ ∂ϕ ⎞ ⎛ ∂ϕ ⎞
dϕ = ⎜ ⎟ dt + ⎜ ⎟ dx = ω dt − kdx , (3)
⎝∂ t⎠ ⎝∂ x⎠
равен нулю. Приравнивая (3) нулю, находим условие постоянства фа-
зы:
dx ω
= vf = , (4)
dt k

74
vf − фазовая скорость волны.
Выражение (4) дает связь между фазовой скоростью волны, часто-
той волны и волновым вектором. Вообще говоря, условия распростра-
нения волны определяются свойствами среды. При этом ω , а, следова-
тельно, и фазовая скорость, могут зависеть от волнового вектора k.
Волны, у которых фазовая скорость зависит от волнового вектора на-
зываются диспергирующими. В противном случае волны называются
недиспергирующими. Диспергирующая волна, представляющая собой
суперпозицию бегущих волн с различными волновыми числами, будет
менять свою форму по мере распространения в пространстве, так как
составляющие с различными длинами волн распространяются с раз-
личными скоростями.
Продемонстрируем влияние дисперсии на распространение волн
на примере задачи о движении волнового пакета в среде с дисперсией,
под которым мы будем понимать некоторую синусоидальную волну,
имеющую конечную протяженность в пространстве или во времени.
Решение данной задачи основано на представлении волнового пакета в
виде суперпозиции гармонических функций (метод Фурье) [3].
Рассмотрим задачу об описании движения волнового пакета, ло-
кализованного в момент времени t = 0 в пространстве. Данное условие
означает, что огибающая пакета является функций достаточно быстро
стремящейся к нулю при x → ±∞ . Введем обозначение
f ( x ) = u( x,0) . (5)

Условие «быстрого стремления функции к нулю» обеспечивает воз-


можность ее разложения в ряд Фурье. Если функция f(x) не периодиче-
ская функция по координате, то ее суперпозиция составляющих ее
функций непрерывна по переменной k, и выражается через интеграл
Фурье

f ( x) = ∫ A(k ) e
ikx
dk , (6)
−∞

где

A(k ) = ∫ f ( x )e − ikx dx . (7)
−∞

75
Каждая гармоническая составляющая в (6) определяет собствен-
ную гармоническую волну с частотой ω = ω ( k ) , т.е. каждая частотная
составляющая бегущей волны распространяется со своей собственной
фазовой скоростью
ω (k )
vf = . (8)
k
Искомая функция u ( x, t ) , описывающая бегущую волну, является су-
перпозицией гармонических бегущих волн, образующих начальное
возмущение. Это означает, что найти u ( x, t ) можно заменой kx на
( kx − ω ( k ) t ) в каждой гармонической составляющей суперпозиции
(6):

∫ A(k ) e
i ( kx −ω ( k ) t )
u ( x, t ) = dt . (9)
−∞

Алгоритм
Таким образом, алгоритм аналитического решения задачи доста-
точно прост:
1. Задать функцию f(x), описывающую начальное возмущение при
t = 0.
2. Задать функцию ω = ω ( k ) .
3. Определить функцию A(k), вычислив интеграл (7).
4. Определить функцию u ( x, t ) , вычислив интеграл (9).
Однако для того, чтобы использовать данный алгоритм при нахо-
ждении численных значений функции u ( x, t ) требуется его некоторая
доработка, связанная прежде всего с тем, что вычисление интегралов в
(6), (7), (8) приходится проводить на интервалах конечной длительно-
сти, т.е. проводить разложение функции не в интеграл, а в ряд Фурье.
В данном случае, вместо интегрирования (6), (7), (8), следует исполь-
зовать следующие выражения с суммами:
N −1

f ( x ) = ∑ A ( n ) eiknx , k = (10)
n =0 xmax − xmin

76
xmax
1
A(n ) = ∫ f ( x) e
− iknx
dx , n = 0,1,…, N − 1 , (11)
xmax − xmin xmin
N
u ( x, t ) = ∑ A( n )e (
i kn ( x − xmin ) −ω ( kn ) )
, (12)
n =0

где N − число значений функции f(x).


Для ускорения вычислений коэффициентов A(n) можно использо-
вать БПФ (быстрое преобразование Фурье – см. описание стандартной
функции MatLab FFT).
Таким образом, численное решение задачи о движении волнового
пакета может быть найдено в соответствие со следующим алгоритмом:
1. Задать функцию f(x), описывающую начальное возмущение при
t = 0.
2. Задать функцию ω = ω ( k ) .
3. Задать границы пространственного интервала, на котором ищется
решение задачи.
4. Задать число узлов пространственной сетки.
5. Вычислить значения функции f(x), в узлах пространственной сет-
ки.
6. Вычислить коэффициенты разложения функции f(x) в ряд Фурье.
7. Вычислить значения функции u(x,t) в заданный момент времени в
соответствие с (12).

Комментарии для составления программы.

1) Рекомендуется начать с полной очистки памяти clear all


2) От числа узлов пространственной сетки зависит быстродействие
программы (результаты, приведенные ниже, получены при
Nx=256).
3) Границы пространственного интервала, на котором искалось ре-
шение задачи: xmin=-10*pi; xmax=60*pi
4) Комплексную функцию f(x), описывающую пакет в момент вре-
мени t=0, задать как z = a*exp(i*k.*x).*exp(-(x/10).^2) с
амплитудой и волновым вектором пакета a=1 и k=0.5 соответст-
венно.
5) Функцию ω (k) = vk + αk2, где v=1, а α = 0.5 задать как файл-
77
функцию Omega(k).
function f=Omega(x)
% описание функции
Nu=1;alpha=.5;
f=Nu*x+alpha*x*x;
6) Провести вычисление значений функций, описывающих волновой
пакет в моменты времени t=0,50,90.

Напишем программу.
%% wave_packet.m
clear all;
Nx=1024;
% Для "медленного" компьютера
% выбрать Nx=256.
%последняя картинка меняется НЕЗНАЧИТЕЛЬНО!!!!
% картинка 3 становится в 4 раза ниже!
% задание пространственной координатной сетки
xmin=-10*pi;
xmax=60*pi;
A=1; % амплитуда волнового пакета
k=0.5; % волновой вектора пакета
titul='Можете изменить значения входных данных';
prompt = {'левая граница координатной сетки, ...
xmin','правая граница координатной сетки, ...
xmax','число узлов координатной сетки, Nx', ...
'амплитуда волнового пакета, A', ...
'волновой вектора пакета, k'};
lines= 1;
def = {num2str(xmin),num2str(xmax),num2str(Nx), ...
num2str(A),num2str(k)};
answer = inputdlg(prompt,titul,lines,def);
xmin=str2num(answer{1}); %
xmax=str2num(answer{2});
Nx=str2num(answer{3}); %
A=str2num(answer{4}); %
k=str2num(answer{5}); %
txt0=['Входные данные:' sprintf('\n')];
j=1:Nx;
78
x(j)=xmin+(xmax-xmin)/(Nx-1)*(j-1);
z=A*exp(i*k.*x).*exp(-(x/10).^2); % вычисление
% значений комплексной функции, описывающей в
% пакет момент времени t = 0
% визуализация волнового пакета
figure(1);plot(x,real(z),x,imag(z),':')
legend('Real','Im',1); xlabel('x');
figure(2);plot(x,abs(z))
xlabel('x');
% вычисление и визуализация спектра волнового пакета
s=fft(z);
% m=2:200;
% m=1:200;
m=1:255;
s1(m)=s(m+1);
figure(3);plot(2*pi*m/(xmax-xmin),abs(s1))
xlabel('k');
k=2*pi/(xmax-xmin);
% вычисление мгновенных значений решений
% волнового уравнения в момент времени t = 50
t1=50;
for j=1:Nx
su=0;
for n=1:Nx
su=su+s(n)/Nx*exp(i*(k*n*(x(j)- ...
xmin)-Omega(k*n)*t1));
end;
psi(j)=su;
end;
% вычисление мгновенных значений решений волнового
% уравнения в момент времени t = 90
t1=90;
for j=1:Nx
su=0;
for n=1:Nx
su=su+s(n)/Nx*exp(i*(k*n*(x(j)-xmin)...
-Omega(k*n)*t1));
end;
79
psi1(j)=su;
end;
% визуализация огибающей волнового пакета
% в момент времени t = 0,50,90
figure(4);plot(x,abs(z),x,abs(psi),'--',x, ...
abs(psi1),':');
legend('t=0','t=50','t=90',1); xlabel('x');
Результаты выполнения приведенной программы действий пред-
ставлены на рис. 1−4.
1
Real
Im
0.5

-0.5

-1
-50 0 50 100 150 200
x

Рис. 1. Мнимая и действительная часть начального возмущения f(x)

0.8

0.6

0.4

0.2

0
-50 0 50 100 150 200
x

Рис. 2. Огибающая волнового пакета (abs(f(x))) в момент времени t = 0

80
90

80

70

60

50

40

30

20

10

0
0 1 2 3 4 5 6 7 8
k

Рис. 3. Спектр функции f(x): abs(A(k))

1
t=0
t=50
0.8 t=90

0.6

0.4

0.2

0
-50 0 50 100 150 200
x

Рис. 4. Огибающие волнового пакета в моменты времени t = 0, 50, 90

Анализ результатов

Анализ результатов, представленных на рис. 1−4, показывает, что


волновой пакет локализован на отрезке [−20,20]. Анализ спектра,
представленного на рис. 3 показывает, что в момент времени t = 0, па-
кет представляет собой суперпозицию синусоидальных волн, волно-
вые числа которых находятся в диапазоне [0;1]. Спектр имеет макси-
мальное значение при km = 0.5 , ширина спектра Δk ≈ 1 . В процессе
движения меняется форма волнового пакета: происходит уменьшение
81
высоты огибающей пакета при одновременном увеличении его шири-
ны (расплывание волнового пакета в пространстве). Изменение формы
волнового пакета происходит в соответствие с законом сохранения
энергии
N

∑ u ( ti , xn ) = const
2
(13)
n =0

Задания

ЗАДАЧА 1. ФОРМУЛИРОВКА ИССЛЕДОВАНИЙ


1) Оцените фазовую скорость гармоники с волновым числом равным
km .
2) Оцените фазовые скорости гармоник v f , волновые векторы k1,2
которых удовлетворяют условиям A ( k1,2 ) = 0.5 A ( km ) ,
A ( k1,2 ) = 0.1 A ( km ) . Оцените разброс фазовых скоростей в каж-
дом из рассматриваемых случаях.
3) Оцените групповую скорость движения пакета v p (скорость дви-
жения его огибающей). Сравните данную величину с ее точным
значением, полученным по известной формуле [1],
dω ( k )
vp = . (14)
dk k = km

4) Оцените групповые скорости гармоник v f , волновые векторы k1,2


которых удовлетворяют условиям A ( k1,2 ) = 0.5 A ( km ) ,
A ( k1,2 ) = 0.1 A ( km ) . Оцените разброс групповых скоростей в ка-
ждом из рассматриваемых случаях.

ЗАДАЧА 2. ПРОВЕРКА ЗАКОНА СОХРАНЕНИЯ


Дополните описанный выше документ фрагментом, позволяющим
вычислять мгновенные значения энергии волнового пакета, и проверь-
те выполнение закона сохранения энергии для пакета, локализованно-
го при t = 0 в пространстве.

82
ЗАДАЧА 3. ШИРИНА ВОЛНОВОГО ПАКЕТА
Дополните описанный выше документ фрагментом, позволяющим
определять ширину волнового пакета Δu при заданном значении его
огибающей.
а) Используя описанный выше документ, оцените закон изменения
ширины волнового пакета во времени ( Δu )t .
б) Сравните полученный результат с известной оценочной форму-
лой, приведенной в [1],
( Δu )t = ( Δu )0 + Δv pt , (15)

где ( Δu )0 − ширина пакета при t = 0, Δv p − разброс групповых ско-


ростей,
⎛ dv ⎞ ⎛ d 2ω ⎞
Δv p = ⎜ g ⎟ k = k Δk = ⎜ dk ⎟ k = k Δk . (16)
⎝ dk ⎠ m ⎝ ⎠ m

г) Убедитесь в справедливости принципа неопределенности для


волновых пакетов
Δk ( Δu )t ≥ 2π . (17)

ЗАДАЧА 4. ВОЛНОВОЙ ПАКЕТ С ПРЯМОУГОЛЬНОЙ ОГИБАЮЩЕЙ


Решите Задачи 1−3 для волновых пакетов с прямоугольной фор-
мой огибающей.

ЗАДАЧА 5. ВОЛНОВОЙ ПАКЕТ С ТРЕУГОЛЬНОЙ ОГИБАЮЩЕЙ


Решите Задачи 1−3 для волновых пакетов с треугольной формой
огибающей.

ЗАДАЧА 6. ДВА ПРЯМОУГОЛЬНЫХ ИМПУЛЬСА


Задайте начальное возмущение в виде двух прямоугольных им-
пульсов шириной Δx , разнесенных в пространстве на расстояние ΔX .
Определите через какое время (время перекрывания импульсов) раз-
решение данных импульсов окажется невозможным. Рассмотрите слу-
чаи: 1) Δx ≥ ΔX , 2) Δx < ΔX . Как зависит данный результат от значе-
ния km ?

83
Движение волновых пакетов, локализованных во времени
Рассмотрим другую постановку задачи о движении волнового па-
кета. Предположим, что передатчик, расположенный в точке x = 0 дей-
ствует на непрерывную одномерную однородную открытую систему
таким образом, что функция, описывающая бегущую волну в точке
x = 0, имеет известную зависимость от времени f(t):
f (t ) = u(0, t ) . (18)
При этом будем считать, что волновой пакет локализован во времени,
т.е. огибающая пакета является функций достаточно быстро стремя-
щейся к нулю при t → ∞ . Сделанное предположение позволяет пред-
ставить функцию f(t) в виде интеграла Фурье:

f ( t ) = ∫ A (ω ) eiωt d ω , (19)
0

где

A (ω ) = ∫ f ( t ) e − iωt dt . (20)
0

Каждая гармоника, как и в рассмотренном выше случае, определя-


ет собственную гармоническую бегущую волну с волновым числом k,
значение которого определяется из дисперсионного соотношения
k = k (ω ) . (21)

Здесь каждая частотная составляющая бегущей волны распространяет-


ся с фазовой скоростью
ω
vf = . (22)
k (ω )

Искомая функция u ( x, t ) , описывающая бегущую волну, является


суперпозицией данных гармонических бегущих волн. Это означает,
что найти u ( x, t ) можно заменой ω t на (ω ( k ) t − kx ) в каждой гармо-
нической составляющей суперпозиции (20):

u ( x, t ) = ∫ A (ω ) e (
i ω t − k (ω ) x )
dω . (23)
0

84
Таким образом, алгоритм аналитического решения задачи, как и в
предыдущем случае, достаточно прост:
1. Задать функцию f(t), описывающую начальное возмущение при
x = 0.
2. Задать функцию k = k (ω ) .
3. Определить функцию A(ω), вычислив интеграл (20).
4. Определить функцию u ( x, t ) , вычислив интеграл (23).
Однако для того, чтобы использовать данный алгоритм при нахо-
ждении численных значений функции u ( x, t ) требуется его некоторая
доработка, связанная прежде всего с тем, что вычисление интегралов в
(19), (20), (23) приходится проводить на временных интервалах конеч-
ной длительности T, т.е. проводить разложение функции не в интеграл,
а в ряд Фурье. В данном случае, вместо (19), (20), (23), необходимо ис-
пользовать следующие выражения:
N −1
f (t ) = ∑ A(n ) e (
i 2π T ) nt
, (24)
n =0
T
1
A(n ) = T ∫ f ( t ) e ( ) dt , n = 0,1,…, N − 1 ,
− i 2π T nt
(25)
T 0
N
i ⎡( 2π T ) nt − k ( ( 2π T ) n ) x ⎤⎦
u ( x, t ) = ∑ A( n )e ⎣ , (26)
n =0

где N − число значений функции f(x).


Для ускорения вычислений коэффициентов A(n) можно использо-
вать БПФ.
Таким образом, численное решение задачи о движении волнового
пакета может быть найдено в соответствие со следующим алгоритмом:
1. Задать функцию f(t), описывающей начальное возмущение при
t = 0.
2. Задать функцию k = k (ω ) . (Отметим, что при невозможности
аналитического обращения дисперсионного соотношения
ω = ω ( k ) , следует для каждого заданного значения частоты
ωs = 2π s T , s = 1,… N соответствующее значение волнового числа
находить численно, как корень уравнения ωs = ω ( k ) .)
3. Задать границы временного интервала, на котором ищется реше-
85
ние задачи.
4. Задать число узлов временной сетки.
5. Вычислить значения функции f(t), в узлах временной сетки.
6. Вычислить коэффициенты разложения функции f(t) в ряд Фурье.
7. Вычислить значения функции u(x,t) в заданный момент времени в
соответствие с (26).

КОММЕНТАРИИ К СОСТАВЛЕНИЮ ПРОГРАММЫ.


1) От числа узлов временной сетки зависит быстродействие про-
граммы (результаты, приведенные ниже, получены при Nt=256).
2) Границы временного интервала, на котором искалось решение за-
дачи: tmin=0; tmax=300.
4) Комплексную функцию f(t), описывающую пакет в точке x=0, за-
дать как z= a *exp(i*Omega*t).*exp(-((t-40)/10).^2 с
амплитудой и частотой пакета a=1 и Omega=0.7 соответственно.
5) Создать файл K.m, содержащий описание функции k = k (ω ) , если
дисперсионное соотношение имеет вид ω ( k ) = ν k + α k 2 .
function z=K(Omega,Nu,alpha)
% описание функции
if alpha==0
z=Omega/Nu;
else
z=-1/(2*alpha)+((1/2*alpha).^2+...
Omega./(alpha*Nu))^0.5;
end;
6) Задать скорость движения пакета v=1 и коэффициент, входящий в
дисперсионное соотношение alpha=0.5.
7) Провести вычисление значений функций, описывающих волновой
пакет в выбранных точках пространства x = 0,50,150.
Приведем программу wave_packet1.m. Результаты представлены
на рис. 5-8.
%% wave_packet1.m
clear all
% задание временной сетки
tmin=0; tmax=300; Nt=1024; %Nt=256;
j=1:Nt;

86
t(j)=tmin+(tmax-tmin)/(Nt-1)*(j-1);
% вычисление и визуализация значений функции,
%описывающей волновой пакет в точке x = 0
Omega=0.7; A=1;
z=A*exp(i*Omega*t).*exp(-((t-40)/10).^2);
figure(1);plot(t,real(z),'-k',t,imag(z), ...
':b','LineWidth',2)
legend('Real','Im',1); xlabel('t');
figure(2);plot(t,abs(z),'-k','LineWidth',2)
xlabel('t');
% вычисление и визуализация спектра
%начального возмущения
s=fft(z);
j=1:200;
s1(j)=s(j+1);
freq=2*pi/(tmax-tmin)*j;
figure(3);plot(freq,abs(s1),'-k','LineWidth',2)
xlabel('\omega');
v=1; % скорость движения пакета
alpha=0.5; % коэффициент, входящий
%в дисперсионное соотношение
% вычисление значений функций,
% описывающих волновой пакет в
% выбранных точках пространства,
% и их визуализация
omega=2*pi/(tmax-tmin);
x=50;
for j=1:Nt
su=0;
for n=1:Nt
su=su+s(n)/Nt*exp(-i* ...
(K(omega*n,v,alpha)*x-omega*n*t(j)));
end;
psi(j)=su;
end;
x=150;
for j=1:Nt
su=0;
for n=1:Nt
su=su+s(n)/Nt*exp(-i* ...
(K(omega*n,v,alpha)*x-omega*n*t(j)));

87
end;
psi1(j)=su;
end;
figure(4);plot(t,abs(z),'-k',t,abs(psi),'--
b',t,abs(psi1),':r','LineWidth',2);
legend('x=0','x=50','x=150',1); xlabel('t');
1
Real
Im
0.5

-0.5

-1
0 50 100 150 200 250 300
t

Рис. 5. Мнимая и действительная части начального возмущения


1

0.8

0.6

0.4

0.2

0
0 50 100 150 200 250 300
t

Рис. 6. Огибающая начального возмущения

Анализ результатов
Анализ результатов, представленных на рис. 5, 6, показывает, что
волновой пакет локализован на отрезке [20,60]. Анализ спектра, пред-

88
ставленного на рис. 7, показывает, что в точке х = 0, пакет представля-
ет собой суперпозицию синусоидальных волн, частоты которых нахо-
дятся в диапазоне [0.3;9.1]. Спектр имеет максимальное значение при
ωm = 0.71 , ширина спектра Δω ≈ 0.8 . В процессе движения меняется
форма волнового пакета: происходит уменьшение высоты огибающей
пакета при одновременном увеличении его ширины (расползание вол-
нового пакета в пространстве). Изменение формы волнового пакета
происходит в соответствие с законом сохранения энергии (13).
70

60

50

40

30

20

10

0
0 1 2 3 4 5
ω

Рис. 7. Спектр функции, описывающей начальное возмущение

1
x=0
x=50
0.8 x=150

0.6

0.4

0.2

0
0 50 100 150 200 250 300
t

Рис. 8. Огибающие волнового пакета в точках x=0,50,150

89
Задания

ЗАДАЧА 7. ФОРМУЛИРОВКА ИССЛЕДОВАНИЙ


1) Оцените фазовую скорость гармоники с частотой равной ωm .
2) Оцените фазовые скорости гармоник v f , волновые векторы k1,2
которых удовлетворяют условиям A (ω1,2 ) = 0.5 A (ωm ) ,
A (ω1,2 ) = 0.1 A (ωm ) . Оцените разброс фазовых скоростей в каж-
дом из рассматриваемых случаях.
3) Оцените групповую скорость движения пакета v p (скорость дви-
жения его огибающей). Сравните данную величину с ее точным
значением, полученным по известной формуле [1],
dω ( k )
vp = . (27)
dk k = k (ωm )

4) Оцените групповые скорости гармоник v f , частоты которых ω1,2


которых удовлетворяют условиям A (ω1,2 ) = 0.5 A (ωm ) ,
A (ω1,2 ) = 0.1 A (ωm ) . Оцените разброс групповых скоростей в ка-
ждом из рассматриваемых случая.

ЗАДАЧА 8. ЭНЕРГИЯ ВОЛНОВОГО ПАКЕТА


Дополните описанный выше документ фрагментом, позволяющим
вычислять мгновенные значения энергии волнового пакета, и проверь-
те выполнение закона сохранения энергии для пакета, локализованно-
го в точке x = 0 во времени.

ЗАДАЧА 9. ШИРИНА ВОЛНОВОГО ПАКЕТА


Дополните описанный выше документ фрагментом, позволяющим
определять ширину волнового пакета Δu при заданном значении его
огибающей.
а) Используя описанный выше документ, оцените закон изменения
ширины волнового пакета во времени ( Δu )t .
б) Сравните полученный результат с известной оценочной форму-

90
лой, приведенной в [1],
( Δ u ) t = ( Δ u ) 0 + Δω t , (28)

где ( Δz )0 − ширина пакета при t = 0, Δω − ширина спектра пакета.


г) Убедитесь в справедливости принципа неопределенности для
волновых пакетов
Δω ( Δu )t ≥ 2π . (29)

ЗАДАЧА 9. ВОЛНОВОЙ ПАКЕТ С ПРЯМОУГОЛЬНОЙ ОГИБАЮЩЕЙ


Решите Задачи 7−9 для волновых пакетов с прямоугольной фор-
мой огибающей.

ЗАДАЧА 10. ВОЛНОВОЙ ПАКЕТ С ТРЕУГОЛЬНОЙ ОГИБАЮЩЕЙ


Решите Задачи 7−9 для волновых пакетов с треугольной формой
огибающей.

ЗАДАЧА 11. ДВА ИМПУЛЬСА, РАЗНЕСЕННЫЕ ВО ВРЕМЕНИ


Антенна, находящаяся в точке x = 0, излучает два прямоугольных
импульса шириной ΔT , разнесенных во времени на интервал ΔT0 . Оп-
ределите на каком удалении от антенны разделение данных импульсов
окажется невозможным. Рассмотрите случаи: 1) ΔT ≥ ΔT0 , 2) ΔT < ΔT0 .
Как зависит время перекрывания импульсов от значения ωm ?

ЗАДАЧА 12. РАСПРОСТРАНЕНИЕ ВОЛН НА ПОВЕРХНОСТИ ВОДЫ


Модифицируйте описанный выше документ, дополнив его фраг-
ментом, позволяющим вычислять значения волновых чисел, для паке-
тов с произвольным законом дисперсии. Используя модифицирован-
ный документ, опишите распространение волн на поверхности глубо-
кой воды (длина волны много меньше слоя воды), имеющих следую-
щее дисперсионное соотношение
T
ω = gk + k3, (30)
ρ
где g = 9.8 м/с – ускорение свободного падения, а ρ ≈ 1000 кг/м3 –
плотность и T ≈ 72·10–3 Н/м – коэффициент поверхностного натяжения
91
воды при температуре 20ºC.
Примечание: Для численного решения (30) см. ниже:Приложение 1.
Нахождение корней функции.
а) Постройте графики зависимостей фазовой и групповой скорости
движения волны от длины волны. При какой длине волны эти
скорости равны?
б) Исследуйте движения волновых пакетов, распространяющихся по
поверхности глубокой воды, аналогично тому, как это было сде-
лано в данном разделе выше.

Приложение 1. Нахождение корней функции


Корни уравнения (30) в пакете MatLab можно найти следующей
последовательностью действий:
1. Создать файл dispw.m, содержащий описание функции
T
f (ω ) = ω − gk − k 3
ρ
% листинг файла dispw.m
function z=dispw(k)
% описание функции f(omega,k)
global omega g T ro
z=omega-g*k-T/ro*k^3;
2. Выполнить следующую программу.
global omega g T ro;
g=980; T=72; ro=1; omega=1000; x=fzero('dispw',0)
Результат
x =
0.9562
Здесь для нахождения корня уравнения мы использовали функ-
цию fzero, обращение к которой может быть выполнено несколькими
способами:
1. fzero('имя_функции',начальное_приближение)
2. fzero('имя_функции',[x1 x2]) (здесь x1, x2 − начальная и
конечная точки интервала, на котором ищется решение уравне-
ния, выбираемые из условия f(x1)f(x2)<0
3. fzero('имя_функции',начальное_приближение,tol)
92
fzero('имя_функции',[x1 x2],tol) (здесь tol − погреш-
ность вычисления корня уравнения)
4. options = optimset('Display','iter');
a=fzero(('имя_функции',начал_приближение,options)
a = fzero('имя_функции',[x1 x2],options)
(вывод на экран значений корня уравнения на каждом шаге итера-
ционного процесса).
Конечно же, эта функции хороша только для непрерывных функ-
ций на интервале, где имеется один корень. Для исследования более
сложных случаев необходим либо предварительный графический ана-
лиз, либо (и!) усложнение программы. Можно также посоветовать для
поиска нулей использовать функцию для нахождения минимума
fminbnd. При этом в качестве аргумента этой функции использовать
либо квадрат, либо модуль функции, у которой мы ищем нуль.

Приложение 2. Создание простого интерфейса ввода-вывода


Самый простой графический интерфейс, может быть создан с по-
мощью команд inputdlg и msgbox. Фрагменты программ приведены
ниже.
% задание начальных "затравочных данных"
Nx=256; xmin=-10*pi; xmax=60*pi; A=1; k=0.5;
% возможность их изменения
titul='Можете изменить значения входных данных';
prompt={'левая граница координатной сетки, xmin',...
'правая граница координатной сетки, xmax', ...
'число узлов координатной сетки, Nx' ...
'амплитуда волнового пакета, A' ...
'волновой вектор пакета, k'};
lines= 1;
def = {num2str(xmin),num2str(xmax),num2str(Nx), ...
num2str(A),num2str(k)};
answer = inputdlg(prompt,titul,lines,def);
% получение переменной типа ceil
% выделение из нее значений
xmin=str2num(answer{1}); xmax=str2num(answer{2});
Nx=str2num(answer{3}); A=str2num(answer{4});
k=str2num(answer{5});
93
……………………………………….
% пример вывода данных
% подготовка вывода – окна Результаты
txt0=['Входные данные:' sprintf('\n')];
%sprintf('\n') – перевод строки
for ii=1:2; txt=[prompt{ii}, ' = ',answer{ii} ...
printf('\n') ]; txt0=[txt0 txt]; end;
................................
str_XXX =num2str(XXX);
% строковая переменная, соответствующая
% какой-либо переменной
txt3=[str_XXX]; txt1=['Результаты:' sprintf('\n')...
txt3];
txtSum=[sprintf('\n') txt0 sprintf('\n') txt1]
CreateStruct.Interpreter='tex'; … Create-
Struct.WindowStyle='replace';
msgbox(txtSum,'Результаты',CreateStruct); %

Литература
1. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. М.:
Мир, 1990. С. 220.
2. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. – М.: Горячая линия – Телеком, 592 с. , 2003.
3. Крауфорд Ф. Волны. М.: Наука, 1974.
4. Хемминг Р.В. Цифровые фильтры. М.: Советское радио, 1980.

94
Работа 5. Стационарное уравнение Шредингера:
моделирование квантовых систем

Введение
При составлении лабораторной работы использованы материалы и
алгоритмы, изложенные в книгах [1-3].

Квантовые системы
В квантовой механике любая система полностью описывается за-
данием волновой функции ψ ( r , t ) (в общем случае комплексной),
квадрат модуля ψ ( r , t )
2
которой определяет плотность вероятности
обнаружить частицу в момент времени t в некоторой области про-
странства с радиус-вектором r . Так как частица может находиться в
произвольной точке пространства, вероятность того, что частица нахо-
дится в элементарном объеме dV = d 3r в точке пространства с радиус-
вектором r в момент времени t равна

P ( r , t ) d 2 r = C 2 ψ ( r , t ) d 3r ,
2
(1)

где C − нормировочная константа, выбираемая из условия


∫ ψ ( r , t )ψ ( r , t ) d r = 1 ,
∗ 3
(2)
−∞

здесь ψ ∗ ( r , t ) − функция комплексно-сопряженная ψ ( r , t ) .


Если частица движется в потенциале U ( r , t ) , то временная эволю-
ция функции ψ ( r , t ) описывается нестационарным уравнением Шре-
дингера
∂ψ ( r , t ) 2
i =− Δψ ( r , t ) + U ( r , t )ψ ( r , t ) , (3)
∂t 2m
∂2 ∂2 ∂2
где Δ = + + − оператор Лапласа, m − масса частицы, ћ −
∂ x2 ∂ y2 ∂ z2
постоянная Планка h, деленная на 2π.

95
Каждой физической классической характеристике частицы (на-
пример, координате, скорости, импульсу, моменту импульса, энергии
и др.) ставится в соответствие некоторый оператор. Наблюдаемое зна-
чение величины A есть среднее значение соответствующего оператора Â
A = ∫ψ ∗ ( r , t )Aˆψ ( r , t ) d 3 r . (4)

Например, оператор, соответствующий импульсу p, имеет вид



p̂ = −i , а его среднее
∂r
∂ψ ( r , t ) 3
P = −i ∫ψ ∗ ( r , t ) d r.
∂r
В одномерном случае уравнение Шредингера принимает вид
∂ψ ( x, t ) 2
∂2
i =− ψ ( x, t ) + U ( x, t )ψ ( x, t ) . (5)
∂t 2m ∂ x 2
Для независящего от времени потенциала можно искать решения
уравнения (3), (5) в виде
iEt

ψ (r,t ) = ϕ (r,t )e , (6)

iEt

ψ ( x, t ) = ϕ ( x, t ) e (7)

соответственно.
Частица, находящаяся в состоянии, описываемом волновой функ-
цией (6), (7), имеет вполне конкретное значение энергии E. Подставив
(7) в (5), получаем стационарное уравнение Шредингера
∂ 2ϕ ( x )
2
− + U ( x )ϕ ( x ) = Eϕ ( x ) . (8)
2m ∂ x 2
Отметим, что уравнение можно записать в виде
⎡ 2
∂2 ⎤

⎢ 2m ∂ x 2 + U ( x ) ⎥ ϕ ( x ) = Eϕ ( x ) , (9)
⎣ ⎦
∂2 2
из которого видно, что − + U ( x ) является оператором энергии
2m ∂ x 2
Ĥ (оператором Гамильтона), φ(x) − собственная функция гамильто-
96
ниана, E − собственное значение оператора Ĥ , т.е.
Ĥ ϕ ( x ) = Eϕ ( x ) . (10)

Вообще говоря, оператор Ĥ может иметь n собственных функций


ϕ n и n соответствующих им собственных значений энергии En, кото-
рые в ряде случаев могут совпадать (вырожденные состояния) или
принимать континуум непрерывных значений (непрерывный спектр).
Основным состоянием называется состояние с наименьшей энергией E1.
Общее решение (9) можно представить в виде суперпозиции соб-
ственных функций оператора, отвечающего выбранной физической ве-
личине. Например, если Ĥ не зависит от времени, то можно записать
iEn t
ψ ( x, t ) = ∑ cnϕ n ( x ) e , (11)
n

где ϕ n ( x ) − собственные функции оператора, а суммирование прово-


дится по всем дискретным состояниям и интеграл по непрерывному
спектру.
Собственные функции ϕ n ( x ) , соответствующие различным собст-
венным значениям, являются ортогональными, т.е.
+∞

∫ ϕ ( x )ϕ ( x ) dx = δ

n n′ nn ′ . (12)
−∞

Коэффициенты cn в (11) определяются по известным значениям функ-


ции ψ ( x, t ) . Например, если известны значения ψ ( x,0 ) , то, воспользо-
вавшись свойством ортогональности (12), легко получить
cn = ∫ ϕ ∗ ( x )ψ ( x,0 ) dx . (13)

Коэффициент cn можно интерпретировать, как амплитуду вероятности


обнаружить в измерении значение полной энергии равное En .

Стационарное уравнение Шредингера


Рассмотрим решения одномерного стационарного уравнения
Шредингера (9) частицы, движущейся в одномерном потенциале U ( x ) .
Будем при этом полагать, что его форма имеет потенциала, представ-

97
ленного на рис. 1: в точках xmin , xmax потенциал становится бесконечно
большим. Это означает, что в точках xmin , xmax расположены верти-
кальные стенки, а между ними находится яма конечной глубины. Для
удобства дальнейшего решения запишем уравнение Шредингера (9) в
виде:
d 2ψ ( x )
2
+ k 2 ( x )ψ ( x ) = 0 , (14)
d x
где
2m
k 2 ( x) = 2 [ E − U ( x )] . (15)

С математической точки зрения задача состоит в отыскании соб-


d2
ственных функций оператора 2
+ k 2 ( x ) , отвечающим граничным
d x
условиям
ψ n ( xmin ) = ψ n ( xmax ) = 0 , (16)
и соответствующих собственных значений энергии E.
Так как k 2 ( x ) ≥ 0 при x ∈ ⎡⎣ xleft , xright ⎤⎦ и k 2 ( x ) ≤ 0 при x ∈ ⎡⎣ xmin , xleft ⎤⎦ ,
x ∈ ⎡⎣ xright , xmax ⎤⎦ , то можно ожидать, что собственному решению данной

Рис. 1. Вид потенциала U(x) и волновой функции для стационарного урав-


нения Шредингера
98
задачи соответствует собственная функция, осциллирующая в класси-
чески разрешенной области движения E ≥ U ( x ) ( x ∈ ⎡⎣ xleft , xright ⎤⎦ ) и экс-
поненциально затухающим в запрещенных областях, где E < U ( x )
( x ∈ ⎡⎣ xmin , xleft ⎤⎦ , x ∈ ⎡⎣ xright , xmax ⎤⎦ ), при x ≤ xmin , x ≥ xmax ψ ( x ) ≡ 0 . Так как
все состояния частицы в потенциальной яме оказываются связанными
(т.е. локализованными в конечной области пространства), спектр энер-
гий является дискретным. Частица, находящаяся в потенциальной яме
конечных размеров (U ( x ) ≤ 0 при x ∈ [ xmin , xmax ] , U ( x ) = 0 при
x ∉ [ xmin , xmax ] ), имеет дискретный спектр при E < 0 и непрерывный
спектр при E ≥ 0 .
Традиционно для решения задачи о нахождении собственных зна-
чений уравнения Шредингера используется метод пристрелки. Идея
метода пристрелки состоит в следующем. Допустим, в качестве иско-
мого значения ищется одно из связанных состояний, поэтому в качест-
ве пробного начального значения энергии выбираем отрицательное
собственное значение. Проинтегрируем уравнение Шредингера каким-
либо известным численным методом на интервале ⎡⎣ xmin , xleft ⎤⎦ . По ходу
интегрирования от xmin в сторону больших значений x сначала вычис-
ляется решение ψ + ( x ) , экспоненциально нарастающее в пределах
классически запрещенной области. После перехода через точку пово-
рота xleft , ограничивающую слева область движения, разрешенную
классической механикой, решение уравнения становится осцилли-
рующим. Если продолжить интегрирование далее за правую точку по-
ворота xright , то решение становится численно неустойчивым. Это обу-
словлено тем, что даже при точном выборе собственного значения, для
которого выполняется условие ψ + ( xmax ) = 0 , решение в области
x ∈ ⎡⎣ xright , xmax ⎤⎦ всегда может содержать некоторую примесь экспонен-
циально растущего решения, не имеющего физического содержания.
Отмеченное обстоятельство является общим правилом: интегрирова-
ние по направлению вовнутрь области, запрещенной классической ме-
ханикой, будет неточным. Следовательно, для каждого значения энер-
гии более разумно вычислить еще одно решение ψ − ( x ) , интегрируя
уравнение (9) от xmax в сторону уменьшения x. Критерием совпадения
данного значения энергии является совпадение значений функций
99
ψ + ( x ) и ψ − ( x ) в некоторой промежуточной точке xm . Обычно в каче-
стве данной точки выбирают левую точку поворота xleft . Так как функ-
ции ψ + ( x ) , ψ − ( x ) являются решениями однородного уравнения (9), их
всегда можно отнормировать так, чтобы в точке xm выполнялось усло-
вие ψ + ( xm ) = ψ − ( xm ) . Помимо совпадения значений функций в точке
xm для обеспечения гладкости сшивки решений потребуем совпадения
значений их производных ψ +′ ( xm ) = ψ −′ ( xm ) :

dψ + dψ −
= . (17)
dx x = xm dx x = xm

Используя в (17) простейшие левую и правую конечно-разностные ап-


проксимации производных функций ψ + ( x ) , ψ − ( x ) в точке xm , нахо-
дим эквивалентное условие гладкости сшивки решений:
ψ + ( xm ) + ψ − ( xm ) − [ψ + ( xm − h ) + ψ − ( xm + h )]
f ≡ = 0, (18)
max ψ

Число max ψ является масштабирующей нормировкой, которая


выбирается из условия f ≅ 1 . Если точки поворота отсутствуют, т.е.
E > 0 , то в качестве xm можно выбрать любую точку отрезка
[ xmin , xmax ] . Для потенциалов, имеющих более двух точек поворота и,
соответственно, три или более однородных решений, общее решение
получается сшивкой отдельных кусков.
В описанном ниже документе, для интегрирования дифференци-
ального уравнения второго порядка мы используем метод Нумерова.
Для получения вычислительной схемы аппроксимируем вторую про-
изводную трехточечной разностной формулой:
yn +1 − 2 yn + yn −1 h2
2
= yn′′ + yn′′′′+ O ( h 4 ) . (19)
h 12
Из уравнения (9) имеем

d2 ( k 2 y ) − 2 (k 2 y ) + (k 2 y )
2 (
y =
''''
n −k ( x ) y )
2
=− n +1
2
n n −1
. (20)
d x x = xn h
Подставив (19) в (20) и перегруппировав члены, получаем

100
⎛ h2 2 ⎞ ⎛ 5h 2 2 ⎞ ⎡ h2 2 ⎤
⎜ 1 + 12 kn +1 ⎟ yn +1 − 2 ⎜ 1 − 12 kn ⎟ yn + ⎢1 + 12 kn −1 ⎥ yn −1 = 0 . (21)
⎝ ⎠ ⎝ ⎠ ⎣ ⎦
Разрешив (21) относительно yn +1 или yn −1 , найдем рекуррентные фор-
мулы для интегрирования уравнения (9) вперед или назад по x с ло-
кальной погрешностью O ( h 6 ) . Отметим, что погрешность данного ме-
тода оказывается на порядок выше, чем погрешность метода Рунге-
Кутта четвертого порядка. Кроме того данный алгоритм более эффек-
тивен, потому что значение функции k 2 ( x ) вычисляются только в уз-
лах сетки.
Для нахождения численного решения оказывается удобным про-
вести обезразмеривание уравнения (9), используя в качестве единиц
измерения расстояния а − ширину потенциальной ямы, в качестве еди-
ниц измерения энергии − модуль минимального значения потенциала
U 0 . В выбранных единицах измерения уравнение (9) имеет вид
d 2ψ
2
+ γ 2 ( E − U ( x ) )ψ = 0 , (22)
d x
где
x E U ( x) 2ma 2U 0
x= , E= , U ( x) = , γ =
2
2
. (23)
a U0 U0

Алгоритм для нахождения собственных функций и собственных


значений
Таким образом, вычислительный алгоритм для нахождения собст-
венных функций и собственных значений уравнения Шредингера реа-
лизуется следующей последовательностью действий:
1. Задать выражение, описывающее безразмерный потенциал U ( x ) .
2. Задать значение γ 2 .
3. Задать пространственную сетку, на которой проводится интегри-
рование уравнения (9).
4. Задать xmin , xmax .
5. Задать начальное значение энергии Estart .
6. Задать конечное значение энергии E fin .
101
7. Задать шаг изменения энергии ΔE .
8. Проинтегрировать уравнение (9) для значения энергии Ei слева
направо на отрезке [ xmin , xm ] .
9. Проинтегрировать уравнение (9) для значения энергии Ei справа
налево на отрезке [ xmax , xm ] .
10. Вычислить значения переменной f i для значения энергии Ei .
11. Увеличить текущее значение энергии на ΔE : Ei +1 = Ei + ΔE .
12. Проинтегрировать уравнение (9) для значения энергии Ei +1 слева
направо на отрезке [ xmin , xm ] .
13. Проинтегрировать уравнение (9) для значения энергии Ei +1 справа
налево на отрезке [ xmax , xm ] .
14. Вычислить значения переменной f i +1 для значения энергии Ei +1 .
15. Сравнить знаки f i , f i +1
16. Если f i ⋅ f i +1 > 0 и Ei +1 ≤ Emax , увеличить текущее значение энергии
на ΔE и повторить действия, описанные в пп. 8−17.
17. Если f i ⋅ f i +1 < 0 , уточнить методом линейной интерполяции.
18. Если Ei +1 ≤ Emax , повторить действия, описанные в пп. 8−18.
19. Если Ei +1 > Emax , закончить вычисления.

Для реализации описанного вычислительного алгоритма в пакете


MatLab необходимо создать три m-файла:
1) файл Num.m, содержащий описание функции, возвращающей для
заданной энергии величину f, вычисляемую в соответствие с (18),
и значения волновой функции в узлах координатной сетки;
2) файл U.m, содержащий описание функции, возвращающей значе-
ние потенциала;
3) файл Elevel.m, содержащий описание функции, возвращающей
собственные значения и собственные функции уравнения Шре-
дингера.

ЛИСТИНГ ФАЙЛА NUM.M


% листинг файла Num.m
function [f,psi]=Num(gamma,E,V,Xmin,Xmax,Ngreed)
102
% функция, возвращая для заданной энергии величину f,
% вычисляемую в соответствие с (18), и значения
% волновой функции в узлахкоординатной сетки
% gamma - коэффициент, входящий в о
% безразмеренное уравнение Шредингера (22)
% E - заданное значение энергии
% V - вектор, содержащий значения потенциала в узлах
% координатной сетки
% Xmin - левая граница координатной сетки
% Xmax - правая граница координатной сетки
% Ngreed - число узлов координатной сетки
dx=(Xmax-Xmin)/Ngreed;
c=dx.^2*gamma^2/12;
Imatch=1;
psi(1)=0;
psi(2)=9.99999e-10;
% интегрирование уравнения Шредингера справа налево
Kim1=c*(E-V(1));
Ki=c*(E-V(2));
for i=2:Ngreed-1
Kip1=c*(E-V(i+1));
if and(Ki*Kip1<=0,Ki>0)
Imatch=i;
i=Ngreed;
end;
if i<=Ngreed-1
psi(i+1)=(psi(i)*(2-10*Ki)- ...
psi(i-1)*(1+Kim1))/(1+Kip1);
if abs(psi(i+1))>=10e10
for k=1:i+1
psi(k)=psi(k)*9.99999e-6;
end;
end;
Kim1=Ki;
Ki=Kip1;
end;
end;
if Imatch==1
Imatch=Ngreed-10;
end;
% интегрирование уравнения Шредингера слева направо

103
psi_Left=psi(Imatch);
psi(Ngreed)=0;
psi(Ngreed-1)=9.99999*10^-10;
Kip1=c*(E-V(Ngreed));
Ki=c*(E-V(Ngreed-1));
for i=Ngreed-1:-1:Imatch+1
Kim1=c*(E-V(i-1));
psi(i-1)=(psi(i)*(2-10*Ki)- ...
psi(i+1)*(1+Kip1))/(1+Kim1);
if abs(psi(i))>10^10
for k=Ngreed:-1:i
psi(k)=psi(k)*9.99999e-6;
end;
end;
Kip1=Ki;
Ki=Kim1;
end;
if psi_Left<0
for i=Imatch:Ngreed
psi(i)=-psi(i);
end;
end;
psi1=abs(psi);
Psimax=max(psi1);
% вычисление разности между волновыми функция,
% полученными интегрированием уравнения Шредингера
% слева направо и справа налево,в
% узле с номером Imatch
f=(psi_Left+psi(Imatch)- ...
(psi(Imatch-1)+psi(Imatch+1)))/Psimax;

ЛИСТИНГ ФАЙЛА U.M


% листинг файла U.m
function z = U(x,Xmin,Xmax)
% функция, возвращающая значения потенциала в узлах
% координатной сетки
% x - вектор, содержащий координаты узлов
% Xmin - левая граница потенциала
% Xmax - правая граница потенциала
if and(Xmin<=x,x<=Xmax)
z=-1;
104
else
z=1e300; % очень большое число
end;

ЛИСТИНГ ФАЙЛА ELEVEL.M


% листинг файла Elevel.m
function [EL,Psi]=Elevel(gamma,dE,V,Emax,Xmin,...
Xmax,Ngreed)
% функция, возвращающая собственные значения и
% собственные функции уравнения Шредингера
% gamma - коэффициент, входящий в обезразмеренное
уравнение
% Шредингера (22)
% dE - приращение энергии
% V - вектор, содержащий значения потенциала
% в узлах координатной сетки
% Emax - максимальное значение энергии
% Xmin - левая граница координатной сетки
% Xmax - правая граница координатной сетки
% Ngreed - число узлов координатной сетки
Tolf=1e-6;
Emin=-1;
E=Emin+dE;
m=1;
Start=0;
while E<Emax
if Start==0
E1=E;
[f,psi]=Num(gamma,E,V,Xmin,Xmax,Ngreed);
E=E+dE;
F1=f;
Start=1;
end;
E2=E;
[f,psi]=Num(gamma,E,V,Xmin,Xmax,Ngreed);
F2=f;
if F1*F2>0
E1=E;
F1=F2;
E=E+dE;
end;
105
if F1*F2<0
% уточнение собственного значения энергии и вычисление
% значений собственной функции в узлах координатной сетки
a=(E2-E1)/(F2-F1);
E=E1-a*F1;
[f,psi]=Num(gamma,E,V,Xmin,Xmax,Ngreed);
F1=F2;
E1=E2;
EL(m,1)=m;
EL(m,2)=E;
if m==1
Psi0=psi';
else
Psi0=cat(2,Psi0,psi');
end;
m=m+1;
E=E+dE;
end;
end;
dx=(Xmax-Xmin)/(Ngreed-1);
N1=size(Psi0,2);
% нормировка собственных волновых функций
for i=1:N1
S=Psi0(:,i);
S1=S.^2;
Norm=0;
for j=1:Ngreed-1
Norm=Norm+0.5*(S1(j)+S1(j+1))*dx;
end;
S=S./(Norm^0.5);
if i==1
Psi=S;
else
Psi=cat(2,Psi,S);
end;
end;

Далее необходимо выполнить следующую последовательность


команд, которую оформим в виде программы Quant.m
%% Quant.m
clear all
106
Xmin=-0.5; % левая граница координатной сетки
Xmax=0.5; % правая граница координатной сетки
gamma=20; % коэффициент
Ngreed=500; % число узлов координатной сетки
% вычисление координат узлов сетки
i=1:Ngreed;
x(i)=Xmin+(Xmax-Xmin)/(Ngreed-1)*(i-1);
dE=1e-3; % приращение энергии
Emax=-0; % максимальное значение энергии
titul='Можете изменить значения входных данных';
prompt= {'левая граница координатной сетки, ...
Xmin','правая граница координатной сетки, ...
Xmax','число узлов координатной сетки, ...
Ngreed', 'коэффициент, gamma', ...
'приращение энергии, dE', ...
'максимальное значение энергии, Emax'};
lines= 1;
def =
{num2str(Xmin),num2str(Xmax),num2str(Ngreed), ...
num2str(gamma),num2str(dE),num2str(Emax)};
answer = inputdlg(prompt,titul,lines,def);
Xmin=str2num(answer{1}); %
Xmax=str2num(answer{2}); % константа обменного
% взаимодействия
Ngreed=str2num(answer{3}); %
gamma=str2num(answer{4}); %
dE=str2num(answer{5}); %
Emax=str2num(answer{6});
txt0=['Входные данные:' sprintf('\n')];
for ii=1:6
txt=[prompt{ii}, ' = ', ...
answer{ii} sprintf('\n') ];,
txt0=[txt0 txt];
end
V(i)=U(x(i),Xmin,Xmax); % вычисление значения
% потенциала в узлах координатной сетки
% вычисление собственных значений и собственных функ-
ций уравнения
% Шредингера
[EL,Psi]=Elevel(gamma,dE,V,Emax,Xmin,Xmax,Ngreed);
EL

107
str_EL=num2str(EL); % средняя энергия системы
% на один спин
[m1,n1]=size(EL);
txt3=[];
for ii=1:m1; txt3=[txt3 ' n=> ' ...
str_EL(ii,:) ' <=E_n ' sprintf('\n')]; end
txt1=['Результаты:' sprintf('\n')...
'- Cобственные значения -' sprintf('\n')...
txt3];
txtSum=[sprintf('\n') txt0 sprintf('\n') txt1]
CreateStruct.Interpreter= ...
'tex';CreateStruct.WindowStyle='replace';
msgbox(txtSum,'Результаты',CreateStruct);
% визуализация собственных функций
figure(1);plot(x(i),Psi(:,1),'k',x(i),Psi(:,2), ...
'-.r',x(i),Psi(:,3),':b');
legend('1','2','3',3)
xlabel('x')
figure(2);plot(x(i),Psi(:,4),'k',x(i),Psi(:,5), ...
'-.r',x(i),Psi(:,6),':b');
legend('4','5','6',3)
xlabel('x')

В результате выполнения программы в командном окне появятся


входные данные и результаты вычисления собственных энергий для
различных уровней

Входные данные:
левая граница координатной сетки, Xmin = -0.5
правая граница координатной сетки, Xmax = 0.5
число узлов координатной сетки, Ngreed = 500
коэффициент, gamma = 20
приращение энергии, dE = 0.001
максимальное значение энергии, Emax = 0

Результаты:
- Cобственные значения -
n=> 1 -0.97509 <=E_n
n=> 2 -0.90048 <=E_n
n=> 3 -0.77613 <=E_n
108
n=> 4 -0.60204 <=E_n
n=> 5 -0.37818 <=E_n
n=> 6 -0.10458 <=E_n
Все это дублируется в созданном командой msgbox() окне "Резуль-
таты" (рис. 2) (см. Приложение 2. Создание простого интерфейса вво-
да-вывода на стр. 93), а графики соответствующих волновых функций
– в графических окнах 1 и 2 (рис. 3, 4, соответственно)

Рис. 2 Входные данные и уровни энергии, представленные командой


msgbox()
1.5

0.5

-0.5 1
-1 2
3
-1.5
-0.5 0 0.5
x

Рис. 3 Волновые функции, соответствующие первому, второму и третьему


собственным значениям энергии

109
1.5

0.5

-0.5 4
-1 5
6
-1.5
-0.5 0 0.5
x

Рис. 4. Волновые функции, соответствующие четвертому, пятому и


шестому собственным значениям энергии

Задания

ЗАДАЧА 1. ОРТОГОНАЛЬНОСТЬ СОБСТВЕННЫХ ФУНКЦИЙ


Проверьте условие ортогональности собственных функций урав-
нения Шредингера (12). Оцените точность выполнения данного усло-
вия. Исследуйте зависимость точности ортогональности собственных
функций уравнения Шредингера от шага изменения энергии ΔE и
числа узлов пространственной сетки Ngreed.

ЗАДАЧА 2. БЕСКОНЕЧНАЯ ПРЯМОУГОЛЬНАЯ ЯМА (СРАВНЕНИЕ ЧИСЛЕННЫХ


И АНАЛИТИЧЕСКИХ РЕШЕНИЙ)

Для бесконечной прямоугольной ямы шириной a удается найти


аналитические выражения для собственных функций уравнения и соб-
ственных значений Шредингера [4, задача 18]:
1

2
π 2
⎛a⎞ 2 ⎛π x ⎞
n = 1, E1 = , ψ 1 = ⎜ ⎟ cos ⎜ ⎟,
2ma 2 2
⎝ ⎠ ⎝ a ⎠
1

2
π 2
⎛a⎞ ⎛ 2π x ⎞
2
n = 2, E2 = 4 = 4 E1 , ψ 2 = ⎜ ⎟ sin ⎜ ⎟,
2ma 2 2
⎝ ⎠ ⎝ a ⎠
1

2
π 2
⎛a⎞ ⎛ 3π x ⎞
2
n = 3, E3 = 9 = 9 E1 , ψ 3 = ⎜ ⎟ cos ⎜ ⎟,
2ma 2 2
⎝ ⎠ ⎝ a ⎠

110
1

2
π2 ⎛a⎞ 2 ⎛ 4π x ⎞
n = 4, E4 = 16 = 9 E1 , ψ 4 = ⎜ ⎟ sin ⎜ ⎟,
2ma 2 2
⎝ ⎠ ⎝ a ⎠
1

2
π 2
⎛a⎞ 2 ⎛ 5π x ⎞
n = 5, E5 = 25 = 9 E1 , ψ 5 = ⎜ ⎟ cos ⎜ ⎟,
2ma 2 2
⎝ ⎠ ⎝ a ⎠
1

2
π 2
⎛a⎞ 2 ⎛ 6π x ⎞
n = 6, E6 = 36 = 9 E1 , ψ 6 = ⎜ ⎟ sin ⎜ ⎟.
2ma 2 2
⎝ ⎠ ⎝ a ⎠
Используя безразмерные переменные, определяемые в соответст-
вие с (23), получите выражения для безразмерных значений энергии и
собственных функций. Сравните численные значения энергий и вол-
новых функций с соответствующими значениями, вычисляемыми по
аналитическим выражениям. Оцените точность численных значений
энергии и волновых функций. Почему точность зависит от номера соб-
ственного значения энергии?

ЗАДАЧА 3. ВЫЧИСЛЕНИЕ СРЕДНИХ ЗНАЧЕНИЙ


Для различных собственных значений энергии:
1) Постройте зависимость плотности вероятности P ( x ) от x.
2) Вычислите x , x 2 в соответствии с (4).

3) Вычислите p , p 2 в соответствии с (5).


4) Постройте зависимость разности между соседними уровнями
энергии от номера уровня.

ЗАДАЧА 4. ВЛИЯНИЕ МАЛОГО ВОЗМУЩЕНИЯ


Определите влияние малого возмущения на собственные значения
и собственные волновые функции частицы в бесконечной прямоуголь-
ной яме, в которой находится небольшой прямоугольный горб высотой
U b и шириной b, симметрично относительно точки x = 0.
1) Выберите U b << U 0 , b << a и определите как зависит энергия ос-
новного состояния и соответствующие собственные функции от
U b , b.
2) Пусть ψ 0 − собственная функция, отвечающая наименьшему соб-
ственному значению энергии, ψ b − собственная функция основно-
111
го состояния при U b ≠ 0 . Вычислите значение выражение
a

∫ψ ( x )ψ ( x ) dx
0
b

∫ψ ( x ) dx
2

при различных значениях b. Как связана данная величина с изме-


нением относительных значений энергии?
Указание: предваряя решение задачи, запишите ее условие в безраз-
мерных единицах.

ЗАДАЧА 5. ПРЯМОУГОЛЬНАЯ ПОТЕНЦИАЛЬНАЯ ЯМА КОНЕЧНОЙ ГЛУБИНЫ


a
Так как при x = глубина ямы конечна, функция ψ ( x ) не равна
2
нулю в запрещенной классической механикой области, в которой
a
E < U 0 и x > . Используя рис. 1, измените функцию, описывающую
2
зависимость потенциала от координаты, и рассмотрите движение час-
тицы в прямоугольной потенциальной яме конечной глубины.
1) Вычислите собственные функции и собственные значения энер-
гии, начав с уровней близких к дну ямы. Как меняются волновые
функции по мере удаления от дна ямы?
2) Определите «глубину проникания под барьер» как расстояние от
a
x = до точки, в которой значение функции составляет 1 e ≈ 0.37
2
от ее максимального значения. Как зависит глубина проникания
от величины U 0 ?

ЗАДАЧА 6. ГАРМОНИЧЕСКИЙ ОСЦИЛЛЯТОР


1) Получите несколько первых собственных значений энергии и соб-
ственные функции гармонического осциллятора, описываемого
1
потенциалом U ( x ) = k x 2 . Сравните полученные значения с из-
2
вестными с аналитическими результатами.
2) Постройте зависимость плотности вероятности P ( x ) от x.
112
3) Вычислите x , x 2 в соответствии с (4).

4) Вычислите p , p 2 в соответствии с (5).

ЗАДАЧА 7. АНГАРМОНИЧЕСКИЙ ОСЦИЛЛЯТОР


Получите несколько первых собственных значений энергии и соб-
ственные функции ангармонического осциллятора, описываемого по-
1
тенциалом U ( x ) = k x 2 + b x 3 . Вычислите энергию основного состоя-
2
ния для k = 1, b = 0.1,0.2,0.5 . Как зависят энергия основного состояния
и форма волновых функций от b?

ЗАДАЧА 8. ЛИНЕЙНЫЙ ПОТЕНЦИАЛ


Получите численное решение для основного состояния линейного
потенциала
U ( x) = x .

Замечание: Данный потенциал может быть использован при модели-


ровании связанной системы кварк – антикварк.

Дополнительные задания

ЗАДАЧА 9. ТЕОРИЯ ВОЗМУЩЕНИЙ (ВАРИАЦИОННЫЙ МЕТОД РИТЦА)


C заданной точностью ε найти оценку сверху энергии основного
состояния гармонического осциллятора (задача 7.27 [5])

€ ( x,α )ϑ ( x,α ) dx
E = min E (α ) = ∫ ϑ * ( x,α )Η
α
−∞

€ p€x2 mω 2 x 2
где Η = + , используя пробные функции:
2m 2

а) ϑ ( x,α ) = c exp( −α x 2 ), c = ,
π
16 2α
б) ϑ ( x,α ) = c(1 + α x 2 )exp(−α x 2 ), c = ,
27 π

113
16 2α
в) ϑ ( x,α ) = c(1 + α x 2 )exp(−α x 2 ), c = ,
27 π

г) ϑ ( x,α ) = c(1 − α x ), c =
.
2
Сравнить с точным решением E = ω / 2 и аналитическими решениями
[5].
Необходимо, во-первых, обезразмерить параметры задачи – пе-
рейти к атомным единицам. Во-вторых, заменить интегрирование с
бесконечными пределами на интегрирование с конечными пределами,
получить аналитические оценки для этих пределов или найти их чис-
ленно из условия, что интеграл при дальнейшем увеличении пределов
практически не меняется.
Для взятия интеграла использовать стандартную процедуру
quad(@Funct,LimitDown,LimitUp) с заранее написанной и сохраненной
подынтегральной функцией Funct. При записи подынтегральной
2
∂2
функции, производная p€xϑ ( x,α ) = −
2
ϑ ( x,α ) находится «вруч-
2m ∂x 2
ную», аналитически.
При поиске минимума можно просто использовать процедуру пе-
ребора значений интеграла при разных значениях α и с последующей
минимизацией массива полученных значений с помощью функции
min(.) или использовать процедуру fminbnd(fun,x1,x2).

ЗАДАЧА 10. СРЕДНЯЯ ВЕЛИЧИНА КОМПОНЕНТЫ СПИНА SZ ОТ


ТЕМПЕРАТУРЫ ДЛЯ ПРОСТОЙ КУБИЧЕСКОЙ РЕШЕТКИ (КВАНТОВАЯ
СТАТИСТИКА)

Среднее значение компоненты спина Sz, находящегося в узлах


простой кубической решетки (a – постоянная решетки), удовлетворяет
следующей системе уравнений [6]
Sz Ek 1
N
∑ cth 2k T = 2 ,
k B

где Ek = −2 J S z {3 − cos k x a − cos k y a − cos k z a} – энергия обменного


взаимодействия.

114
Используя переход от суммирования по волновому вектору k к
интегрированию
π /a π /a π /a
1 V
∑ ... ⇒ 3 ∫ ∫ ∫ ...dk x dk y dk z , (*)
N k ( ) −π / a − π / a −π / a

меняя температуру T, найти зависимость 〈Sz〉 от температуры (поло-


жить kBTc = 2J, V = a3). Построить график.
Замечание: перед решением обезразмерить задачу (t = T/Tc, и т.д.).

ЗАДАЧА 11. ВЫЧИСЛЕНИЕ ПЛОТНОСТИ ОДНОЭЛЕКТРОННЫХ СОСТОЯНИЙ


(КВАНТОВАЯ СТАТИСТИКА)
Плотность одноэлектронных состояний ρ(ε) в полосе со спектром
ε(k) определяется, как известно, соотношением [6]
1
ρ (ε ) =
N
∑ δ (ε − ε (k )),
k

где суммирование идет по первой зоне Бриллюэна.


Для двумерной квадратной решетки закон дисперсии можно запи-
сать
ε (k ) = −2t (cos k x + cos k y ),
а для простой кубической решетки
ε (k ) = −2t (cos k x + cos k y + cos k z ).
Здесь постоянная решеток положена равной единице, t есть интеграл
перескока между ближайшими соседями, а N – полное число узлов.
Осуществляя переход от суммирования к интегрированию (при
N → ∞) (см. формулу (*) в предыдущей задаче), вычислить плотность
состояний для двумерной квадратной и простой кубической решеток и
построить соответствующие графики ( 2t ρ = f (ε / 2t ) ).

Вариационный метод решения уравнений Шредингера


Несмотря на множество достоинств, у метода пристрелки есть один
существенный недостаток. Дело в том, что его довольно сложно при-
менять в случае двумерных и трёхмерных задач. В этом случае больше
подходит так называемый вариационный метод Монте-Карло, который
115
основан на вариационном принципе квантовой механики.
Предположим, что мы ищем решение стационарного уравнения
Шредингера. Зададим некую любую возможную волновую функцию, ϕ.
С помощью этой функции мы можем рассчитать эффективную энергию

∫ ϕ H ϕ dr ,
*

E* =
∫ ϕ ϕ dr
*

где интегрирование ведётся по всему пространству и H соответствует


гамильтониану системы. Отметим, что мы обозначили эффективную
энергию символом Е*, чтобы отличать её от настоящей энергии ос-
новного состояния системы, Е. Согласно вариационному принципу
квантовой механики энергия основного состояния Е всегда меньше
или равна Е*. Это позволяет нам взглянуть на проблему нахождения
решения уравнения Шредингера как на проблему минимизации.
Для примера рассмотрим проблему нахождения основного со-
стояния для частицы, находящейся в потенциале Леннарда-Джонса
⎡⎛ σ ⎞12 ⎛ σ ⎞6 ⎤
V ( x) = 4ε ⎢⎜ ⎟ − ⎜ ⎟ ⎥ .
⎢⎣⎝ x ⎠ ⎝ x ⎠ ⎥⎦

Рис. 5. Потенциал Леннарда-Джонса для ε = 10 и σ = 1.

Также как и в предыдущем методе, мы поделим пространство на


отрезки от x = 0.7 до x = 5, разделённые Δx и выберем очень простую

116
вариационную функцию ϕn0 = const на отрезке x = nΔx. Константа оп-
ределится из условия нормировки волновой функции
2
∫ ϕ dx = 1.
0

На следующем этапе мы должны определить, как использовать ϕ n0 для


нахождения улучшенной волновой функции. Используем для этого ал-
горитм Монте-Карло. На первом этапе выберем случайно любое целое
число, которое мы назовём ntest, в интервале от 1 до N (используйте
генератор случайных чисел rand, заложенный в MatLab). На следую-
щем этапе составим новую функцию, где мы изменим значение функ-
ции ϕ 0 в точке ϕ ntest
0
на величину ± dϕ (выбираемую также случайно).
Затем рассчитываем Е* для новой слегка изменённой функции. Если
новая функция даёт значение энергии, которое меньше, чем начальное
Е*, то мы принимаем изменение в ϕ 0 , если же энергия становится
больше, то данное изменение отклоняется, и мы оставляем начальное
значение ϕ 0 . Простая реализация (без активного использования всех
возможностей MatLab) этого алгоритма приведена в программе
schred.m.
% Программа schred.m
% Lennard-Jones potenital
dx=0.1; sigma=1; epsilon=10;
x_left=0.5.*sigma; x_right=5.0*sigma;
delta = 3.*sigma;
i_start = 1.1.*sigma;
x=x_left;
i=1;
while x<=x_right % initialize wave function
psi(i)=0;
if x>=i_start && x<=delta,
psi(i)=1./sqrt(delta);
end
xx(i)=x;
x=x+dx;
i=i+1;
end
i_max=i-1;
d_psi=0.1./sqrt(delta);

117
psi=psi./sqrt(sum(dx.*psi.*psi));
energy=0;
psi_mi=0;
for i=1:i_max
if i==i_max
psi_pl=0;
else
psi_pl=psi(i+1);
end
energy=energy+dx.*potential(xx(i),sigma,epsilon).*...
(psi(i).^2) - dx.*(0.5./(dx.^2)).*psi(i).* ...
(psi_pl+psi_mi-2.*psi(i));
psi_mi=psi(i);
end
energy = energy./sum(dx.*psi.*psi);
plot(xx,psi);
hold on;
pause;
n_total=0;
n_moves=0;
kl=0;
while kl<1
n_a=0;
n_attempts = 1000 % make this many attempted moves
for i=1:n_attempts
n=ceil(i_max.*rand); % choose site to adjust
% randomly
psi_old=psi(n); % with uniform probability
psi(n)=psi(n) + 2.*(rand-0.5).*d_psi;
% adjust trial function
new_energy=0;
psi_mi=0;
for i=1:i_max
if i==i_max
psi_pl=0;
else
psi_pl=psi(i+1);
end
new_energy=new_energy+dx.*potential(xx(i),...
sigma,epsilon).*(psi(i).^2) - dx.*(0.5./ ...
(dx.^2)).*psi(i).*(psi_pl+psi_mi-2.*psi(i));
118
psi_mi=psi(i);
end
new_energy = new_energy./sum(dx.*psi.*psi);
if new_energy>energy % compare new energy
% to old energy
psi(n)=psi_old; % keep new trial function
% only if it
else % lowers the energy
energy= new_energy;
psi=psi./sqrt(sum(dx.*psi.*psi));
n_a = n_a + 1;
end
end
plot(xx,psi);
hold on;
energy=energy
reply = input('Are you satisfied with ...
the solution? Y/N [Y]: ','s');
if reply == 'Y'
kl=1;
else
kl=0;
end
n_total = n_total + n_attempts;
n_moves = n_moves + n_a;
end

Само значение потенциала определяется программой potential.m:


function f=potential(x,sigma,epsilon)
f=4.*epsilon.*((sigma./x).^(12)- (sigma./x).^(6));

После последовательного применения процесса Монте-Карло ва-


риационная волновая функция и энергия приблизятся к настоящим
значениям волновой функции и энергии основного состояния. Резуль-
таты расчётов показаны на Рис. 6.
Важно отметить, что на каждом шаге энергия уменьшается. Отме-
тим, что значение энергии, соответствующее точному решению, полу-
чается при n = 105. При этом полученная волновая функция является
гладкой в отличие от начальной функции.

119
n=0
1 n=5000
n=10000
n=15000
0.8
n=20000
φn
n=30000
0.6

0.4

0.2

0
0 1 2 3 4 5
x
Рис. 6. Результат расчета волновой функции для частицы в потенциале
Леннарда-Джонса после 30000 итераций

Данный метод легко распространяется на двух- и трёхмерные за-


дачи. Рассмотрим, например, частицу внутри двумерного гармониче-
ского потенциала

1 1
V ( x, y ) = k x x 2 + k y y 2
2 2
и kx, ky определяют кривизну потенциалов по оси x и y соответственно.
В данном случае мы снова разбиваем пространство по обеим осям на
дискретные интервалы ( x = mΔx и y = nΔy ), выбираем начальную
волновую функцию и, шаг за шагом, применяем алгоритм Монте-
Карло. Единственное отличие от одномерного случая в том, что здесь
мы выбираем случайным образом точку на двумерной сетке (mtest,
ntest). Во всём остальном вариационный метод Монте-Карло такой же,
поэтому программа для одномерного случая легко адаптируется на
двумерный (трёхмерный) случай.
Следует отметить, что при увеличении размерности особое вни-
мание необходимо обратить на выбор начальной волновой функции,
так как её удачный выбор гарантирует быструю сходимость програм-
мы. Если известен точно решаемый предельный случай, то стоит стар-
товать с него. Кроме того, можно ввести генератор случайных чисел
120
по специальному закону распределения, который выберет случайную
точку на сетке пропорционально величине функции в данной точке. В
этом случае эти точки получат наибольшее внимание в алгоритме – мы
поговорим об этом ещё в следующей главе ("Работа 6. Моделирова-
ние случайных систем", стр. 123). Например, если вы знаете, что ваша
волновая функция обращается в 0 при x, y → ∞, то применение этого
распределения исключит эти точки и ускорит сходимость программы.
Третий способ модификации вариационного метода – это искать ре-
шение в виде суммы базисных функций. Например, для гармоническо-
го осциллятора мы можем искать решение в виде суммы функций Га-
усса с различной шириной. Важно отметить, что из-за ортогонально-
сти базисных волновых функций (подходят также комбинации косину-
сов, синусов, лоренцевские функции) любая вариационная волновая
функция может быть выражена уникальным образом как
ϕ 0 ( x, y ) = ∑ ak bk ( x, y ) ,
k

где bk ( x, y ) – это базисные функции и коэффициенты, ak определяют сте-


пень перекрывания вариационной функции ϕ 0 и различных базисных
функций. Теперь в процессе минимизации по процедуре Монте-Карло ме-
няются только величины коэффициентов.

ЗАДАЧА 12. ВАРИАЦИОННЫЙ МЕТОД МОНТЕ-КАРЛО


Воспользуйтесь алгоритмом вариационного метода Монте-Карло
и найдите энергию и волновую функцию основного состояния для
слудующих случаев.
(а) Одномерный ангармонический осциллятор с потенциалом
U ( x ) = x4 .

(б) Двумерный гармонический осциллятор с потенциалом


1 1
U ( x, y ) = k x x 2 + k y y 2 .
2 2
Исследуйте, как выбор начального значения волновой функции
влияет на число шагов в алгоритме необходимых для получения
“правильной” функции (здесь “правильность” определяется схо-
димостью и конечным значением Е*). Попробуйте также исполь-
зовать запись вариационной функции с использованием разложе-
ния по базисным функциям и сравните результаты
121
(в) Частица в трёхмерном ящике. Сравните результаты для различной
высоты стенок потенциального барьера.

Литература
1. Ландау Л.Д., Лифшиц Е.М. Квантовая механика. Нерелятивистская
теория. М.: Наука, 2001.
2. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. Т.
1-2, М.: Мир, 1990.
3. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. М.: Горячая линия – Телеком, 592 с. , 2003.
4. Флюгге З. Задачи по квантовой механике. Т. 1. М.: Мир, 1974.
5. Учебные задания по квантовой механике. Под ред. Кочелаева Б.И.
КГУ, каф. теор. физики, Казань, 1990, 38 с.
6. Деминов Р.Г., Сайкин С.К., Прошин Ю.Н. Вычислительные методы
в теоретической физике. 2000, Казань: КГУ.

122
Работа 6. Моделирование случайных систем

Введение
При составлении лабораторной работы использованы материалы и
алгоритмы, изложенные в книгах [1-3].

Случайные системы
Системы, которые мы до сих пор исследовали, были в основном
детерминистскими. Особенность этих систем заключается в том, что
их эволюция определяется набором ОДУ с определёнными начальны-
ми условиями. Решение этих уравнений даёт нам описание физической
системы для любого момента времени и, в этом смысле, полностью
предсказуемо, случайность практически не играет значения (хотя ме-
тоды их решения могут и не быть полностью детерминисткими, см.,
например, вариационный метод Монте-Карло, кратко рассмотренный в
последнем задании предыдущего раздела). Сейчас нас будут интересо-
вать именно случайные или стохастические процессы в системах, в ко-
торых случайность того или иного события играет определяющую
роль. Случайность может возникнуть по целому ряду причин. Напри-
мер, может оказаться, что мы не знаем (или не можем узнать) началь-
ные условия (положение координат и начальные скорости) для всех
частиц в системе. Или же наша система взаимодействует с термодина-
мическим резервуаром по какому-то сложному закону, и всё, что мы
знаем, – это только вероятность того или иного события. Чаще всего
речь идёт о системах с большим числом степеней свободы, которые
возникают при описании какого-либо макроскопического объекта, на-
пример, газа, жидкости или ансамбля спинов в магнетике.
Одна из таких типичных проблем – это диффузия или броуновское
движение. Рассмотрим распространение капли молока в чашке с кофе.
Вопрос, который мы зададим, очень прост: если в обычной чашке рас-
пространение молока от центра чашки до стенок длится, скажем, 20
секунд, то сколько времени займет такое движение для чашки с радиу-
сом в два раза больше? Решение ОДУ для всех "молекул" молока (час-
тиц) с начальными условиями даст нам положение каждой частицы в
любой момент времени и её скорости, но не поможет ответить на по-

123
ставленный вопрос. Поэтому мы обращаемся к статистическому опи-
санию, которое заменяет детерминистское описание стохастическим.

Случайные шаги (random walk)


Мы смоделируем процесс случайного поведения как случайный
выбор шага (“random walk”). В данном случае процесс столкновения
молекулы молока с другой частицей моделируется, как пошаговое
движение, где каждый новый шаг выбирается случайным образом. В
простейшем случае одномерного движения каждый шаг имеет еди-
ничную длину, и движение происходит вдоль одной линии. Стартуя с
x = 0, мы выбираем шаг с вероятностью 1/2 налево или направо. Число
шагов, n, пропорционально времени t. Таким образом мы получим по-
ложение частицы как функцию времени (число шагов). При моделиро-
вании мы генерируем случайное число от 0 до 1 и, в зависимости от
того больше или меньше это число по сравнению с 1/2, наше движение
происходит либо налево, либо направо. Процесс повторяется n-ое ко-
личество раз для получения x(n). При этом важно также следить за по-
ведением среднего квадрата смещения <x2> для большого числа реали-
заций этой случайной процедуры, поэтому сосчитаем также и его.
Простейшая программка random1.m приведена ниже.
% random walk in one dimension,
% set initial values
% initial squared displacement
x2aveprev(1:100)=0;
m=1001; % m-1 is a number of walkers
% m=2; % m-1 is a number of walkers
% m=11; % m-1 is a number of walkers
% calculation loop through the number of walkers
j=1;
%figure(1)
while j<m;
xprev=0; % initial position of the walker
for i=1:100
r=rand(1);
if r<0.5,
x(i)=xprev+1;
else
x(i)=xprev-1;
end
% plot(x,'o');
% xlabel('n (number of steps) = Time')
124
% ylabel('cooordinate of the random walker')
% hold on;
% axis([0 100 -20 20])
% pause(0.1)
x2ave(i)=x(i).^2+x2aveprev(i);
x2aveprev(i)=x2ave(i);
xprev=x(i);
end
hold off
clear figure
j=j+1;
end
x2ave=x2ave./(m-1);
figure(2)
plot(x2ave,'o');
xlabel('n (number of steps) = Time')
ylabel('< x_n^2 >')

Результаты расчётов показаны на Рис. 1. Из них видно, что сред-


нее от квадрата смещения меняется линейно с числом шагов.
x 2 = 2 Dn = 2 Dt .

Так как число шагов – это не что иное, как время, мы видим, что пове-
дение частицы со случайным выбором шага сильно отличается от по-
ведения свободно движущейся частицы. Если для свободно движу-

120

100

80
< x2n >

60

40

20

0
0 20 40 60 80 100
n (number of steps) = Time
Рис. 1 Среднее квадрата смещения для 5000 реализаций одномерного ran-
dom walk.
125
щейся частицы характерное положение частицы в любой момент вре-
мени определяется как x = vt , где v – это скорость распространения, то
для диффундирующей частицы мы нашли, что x 2 ~ t , т.е. части-
ца, движущаяся стохастически, распространяется значительно медлен-
нее свободной частицы. Кроме того, нелишне напомнить, что само
среднее отклонение равно нулю для стохастического движения. При-
ведённый выше простой расчёт даст нам ответ и на наш вопрос: при
увеличении радиуса чашки в два раза молекулам молока потребуется в
4 раза больше времени для достижения стенок чашки.
Константу пропорциональности D легко вычислить аналитически.
Для одномерного стохастического движения она равна 1/2. Интересно
отметить дальнейшие свойства стохастического движения. Например,
рассчитывая флуктуации от среднего квадрата смещения по стандарт-
2
ной формуле xn4 − xn2 (опять же для одномерного случая это
можно сделать аналитически, а в случае систем с более высокими раз-
мерностями предлагаем посчитать это численно), мы получим, что эти
2
флуктуации xn4 − xn2 ~ 2n . Это даёт нам дополнительную ин-
формацию о стохастическом движении, а именно, расстояние между
двумя отдельными частицами при диффузии также увеличивается со
временем. Здесь мы рассмотрели самый простой пример диффузион-
ного движения, есть множество способов его усложнить и теснее свя-
зать с реальностью. Примеры предлагаются в задачах ниже.

Движение без пересечений (SAW)


В случае диффузного движения на каждом новом этапе выбор
следующего шага полностью случайно и не зависит от шага предыду-
щего. Данное поведение не подходит для описания поведения роста
полимерных молекул, таких как, например, изображенных на Рис.2.
Предположим, что мы стремимся описать структуру роста такой
молекулы и её статистические свойства. Схема простого выбора слу-
чайного шага (random walk), рассмотренная выше, в принципе подхо-
дит и для этого случая, но с важным изменением. Будем считать каж-
дый мономер как один шаг в таком движении, при этом в случае по-
лимера составляющие его мономеры не могут пересекаться друг с дру-
гом. Каждый сегмент полимера занимает свою область в пространстве.
126
Рис. 2 Типичная структура полимерной молекулы состоящей из более
простых связующих звеньев, мономеров.

Такое ограничение диффузного движения приводит нас к понятию


движения без самопересечения – self-avoided random walk (SAW). Мо-
делирование такого поведения довольно просто и множество сгенери-
рованных шагов без пересечений даст нам возможность исследовать
их ансамбль статистически.
Однако важно помнить следующее обстоятельство: каждая реали-
зация такого поведения должна быть статистически равновероятна по
сравнению с любой другой реализацией. Легко видеть, однако, что в
случае, изображённом на Рис. 3, после 3-го шага возникает проблема.
Если в случае (a) есть три возможных реализации 4-го шага, то в слу-
чае (b) их всего две (влево и вверх!). Это означает, что если мы на ка-

(a) (b)
Рис. 3 Два варианта развития движения без самопересечения (SAW) в
двумерном случае.
127
ждом новом шаге SAW будем выбирать шаги только из возможно дос-
тупных, то вероятность 4-го шага в случае (а) будет 2/3 от вероятности
шага в случае (b). Т.е. данные две конфигурации не будут статистиче-
скими равновероятными в таком случае. Для исправления ситуации
лучше сохранять равновероятность каждого нового шага (1/4 в дву-
мерном варианте) и прекращать реализацию SAW в том случае, если
новый шаг приведёт к самопересечению. Только в этом случае полу-
ченный статистический ансамбль из множества SAW будет правиль-
ным. Одна из задач в этой главе предлагает сравнить свойства SAW в
двух- и трёхмерном вариантах. В частности, особенность SAW заклю-
чается в том, что распространение частиц происходит быстрее, чем
при диффузном движении. В двумерном случае корень из среднего
квадратичного отклонения r 2 ~ t1.5 , т.е. что-то среднее между сво-
бодно движущейся и диффундирующей частицами.

Симуляция роста кластеров, фрактальная размерность


объектов
Один из других физических процессов, который можно описать с
помощью процедуры случайных шагов – это рост кластеров. Рассмот-
рим два примера: кластер Эдена и кластер, полученный методом огра-
ниченной диффузии. В случае двумерного кластера Эдена расположим
зерно кластера в начале системы координат (x = 0, y = 0). Каждая новая
частица добавляется равновероятно по периметру границы уже суще-
ствующего кластера. Таким образом, уже на первом шаге у нас есть 4
возможных варианта (0,±1) и (±1,0), и, выбирая один из них равнове-
роятно, мы присоединяем его к кластеру. Новый кластер содержит 2
частицы и больший периметр. Соответственно процесс повторяется:
по периметру с равной вероятностью выбирается новый незанятый
узел из всех возможных и присоединяется к кластеру. Данная проце-
дура повторяется до достижения кластером необходимого размера.
Пример программы eden.m приведён ниже.

% cluster growth using the Eden method


L=30; % characteristic parameter of the grid
STEPS=1000; % number of steps
S=[1 0; 0 1; -1 0; 0 -1]; % vector that is added to
%the seed
X=zeros(2*L+1,2*L+1); % determination of the grid
128
X(L,L)=1; % puting seed on the grid
NEXT=S; % step
for(i=1:STEPS)
R=ceil(length(NEXT)*rand(1)); % determining
% randomly where the next seed is going
% on the perimeter site
CURRENT=NEXT(R,:);
NEXT(R,:)=[]; % taking the position out
% of perimeter sites
X(L+CURRENT(1),L+CURRENT(2))=1;
h=pcolor(X);
set(h,'LineStyle','none');
pause(0.1)
for(j=1:4)
% determining new perimeter sites
NEXT_T=CURRENT+S(j,:);
if(X(L+NEXT_T(1),L+NEXT_T(2))==0);
NEXT(length(NEXT)+1,:)=NEXT_T;
end;
end;
end;
h=pcolor(X);
set(h,'LineStyle','none');
title('Eden cluster')

Результат программы будет похож на Рис.4. Как мы видим, кластер


Эдена имеет не очень ровные границы, но в целом напоминает диск. Это
будет ещё более заметно, если мы увеличим число частиц.
Однако не все кластеры рас-
тут как кластер Эдена. Например
снежинки или кристаллы золы
растут способом ограниченной
диффузии (diffusion limited aggre-
gation – DLA). Для краткости бу-
дем называть этот метод – мето-
дом DLA. Он описывается алго-
ритмом, который мы приводим
ниже (DLA кластер). В этом слу-
чае снова выбирается начало ко-
ординат в точке (0,0), куда поме-
щается зерно кластера. После
этого случайным образом выби- Рис. 4 Кластер Эдена
129
рается узел (x, y), расположенный
вдали от начала координат. Из поло-
жения (x, y) начинается случайные
шаги (random walk), которые в какой-
то момент пересекаются с перимет-
ром зерна. После этого вся эта "тра-
ектория" становится частью кластера.
Процедура случайных шагов повто-
ряется до тех пор, пока не получится
необходимый кластер. Данный про-
цесс моделирует не клеточный рост,
как модель кластера Эдена, а рост
Рис. 5 DLA кластер крупных молекул или других объек-
тов из меньших, находящихся в жид-
ком растворе. Результат моделирования такого кластера приведён на
рисунке 5.
Несколько практических советов: при выборе точки для начала
движения с помощью процедуры случайных шагов (random walk) от-
ступите на некоторый радиус r от начала границ кластера. Кроме того,
если в процессе случайного движения вы уйдёте слишком далеко от
уже существующего кластера, скажем на расстояние, большее, чем
1.5r от начала координат, то стоит прекратить данную реализацию
случайных шагов. И начать новую, так как вероятность того, что эта
реализация достигнет уже существующего кластера, довольно мала.
Сравнивая два полученных кластера по двум разным методам, ви-
дим существенную разницу. Как мы видели, кластер Эдена имеет дос-
таточно регулярную структуру. В случае же DLA кластера, несмотря
на большой размер, имеется огромное количество полостей, и граница
такого кластера крайне нерегулярна. Попробуем описать эту разницу
количественно. Введём понятие размерности объекта. Рассмотрим
диск, лежащий в x–y плоскости. Его масса, ограниченная кругом ра-
диуса r, определяется как
m( r ) = σπ r 2 ,

где σ – это масса на единицу поверхности и r выбрано так, что весь


круг помещается внутри диска. При увеличении r видно, что масса бу-

130
дет увеличиваться как r 2 , где 2 – это и есть размерность объекта. Для
линейного объекта масса определится как
m ( r ) = 2λ r ,
где λ – это масса на единицу длины. Теперь масса при увеличении
длины r будет меняться также линейно, т.е. также как и размерность
объекта. Поэтому введём "размерность" нашего кластера как
d
m( r ) ~ r f ,
где df – это эффективная или фрактальная размерность объекта. Те-
перь ваша задача состоит в нахождении размерности наших кластеров
Эдена и DLA. Предполагая, что все частицы имеют одну и ту же мас-
су, найти фрактальную массу кластера как функцию расстояния от на-
чала координат. Рекомендуется использовать логарифмическую шкалу
log m ~ d f log r , тогда наклон полученной прямой в двойном логариф-
мическом масштабе (log-log) и даст искомую размерность.
Другие примеры случайного движения рассмотрим в задачах.

Задания

ЗАДАЧА 1. ПРОЦЕДУРА СЛУЧАЙНЫХ ШАГОВ


а) Проведите численные исследования по процедуре случайных ша-
гов (random walk) в двух- и трёхмерном случаях, задавая единич-
ные равновероятные шаги в любом направлении. Исследуя стати-
стический ансамбль множества таких реализаций, убедитесь, что
средняя величина квадрата отклонения меняется линейно с темпе-
ратурой r 2 = ct , и найдите константу пропорциональности в ка-
ждом случае.
б) Рассмотрите ситуацию, когда вероятности для шага "влево" или
1
"вправо" различны. Например, pileft = piright , где (i = x, y, z). Ис-
3
следуйте статистические свойства такого движения. В каком
смысле это движение всё ещё диффузионное?

ЗАДАЧА 2. ПРОЦЕДУРА СЛУЧАЙНЫХ ШАГОВ БЕЗ ПЕРЕСЕЧЕНИЯ


Проведите численные исследования по процедуре случайных шагов
без пересечения (self-avoided random walk) в двух- и трёхмерном случаях.
131
Исследуя статистический ансамбль, состоящий из множества реализа-
ций, найдите среднюю величину квадрата отклонения. Покажите, что в
общем случае r 2 = Atν , и найдите величины А и ν в каждом случае.

ЗАДАЧА 3. DLA КЛАСТЕР


Смоделируйте рост кластера по схеме ограниченной диффузии
(DLA) в двухмерном случае, используя алгоритм, описанный выше.
Найдите фрактальную размерность такого кластера. Как и в Задаче 1,
предположите, что при выполнении схемы случайных шагов (random
walk) вероятность движения в одном из направлений выше, чем в дру-
гом. Исследуйте, как изменится фрактальная размерность, и найдите
причину этого.

ЗАДАЧА 4. ФРАКТАЛЬНАЯ РАЗМЕРНОСТЬ. КРИВАЯ КОХА


Рассмотрите типичную фрактальную структуру: построение кри-
вой Коха, изображённое на Рис.6.
Фигура первого порядка – прямой
сегмент длиной L изображен на рис. 6,
вверху. На втором шаге прямой сегмент
заменен на 4 сегмента длиной L/3, ориен-
тированных так, как показано в средней
части рис. 6. Фигура третьего порядка
(рис. 6, внизу) получена из фигуры второ-
го порядка путём замены каждого прямого
сегмента 4 новыми сегментами длиной
Рис. 6 Первых три шага L/9. Кривые следующего порядка получа-
построения кривой ются аналогичным образом. Кривая, кото-
Коха рая получится при "бесконечном" повто-
рении процедуры, и является кривой Коха.
а) Напишите программу с помощью MatLab, которая бы генериро-
вала и рисовала разные этапы построения кривой Коха по алго-
ритму, описанному выше.
б) Модифицируйте программу таким образом, чтобы на каждом но-
вом этапе (порядке) прямой сегмент заменялся на 4 других и при
этом угол выбирался бы случайным образом. Воспользуетесь сле-
дующим примером программы rnkoch1.m

132
%% rnkoch1.m
%% Generating a first order random Koch curve
clear all; % Clears all variables from memory.
close all; % Closes all windows.
x_start=0; y_start=0;
x_end=300; y_end=0; % Fixes starting and end points
% of Koch curve.
x_rand1=300*rand(1,10);
y_rand1=300*rand(1,5);
y_rand2=300*rand(1,5); % Generates a set of random x
% coordinates.
x3=sort(x_rand1); % Sorts the x-coordinates in
%ascending order to obtain a single-valued function.
y3=sort(y_rand2); % Same comment as above for first
% 74 y-coordinates, excluding the starting point.
y4=sort(y_rand1,'descend'); % Sorts the next
% 74 y-coordinates in descending order.
x=[x_start,x3,x_end]'; % x-coordinates stored
% in a column vector.
y=[y_start,y3,y4,y_end]'; % y-coordinates stored
% in a column vector.
%%% Recursive part used to generate an nth
% order random Koch curve
n=input('Enter number of recursive levels: ');
X=x; Y=y;
for k=1:n, % k is the current order of the curve.
i=size(X,1); % Finds the number of (x,y) coordinates.
X2=0; Y2=0; % X2 and Y2 are (x,y) coordinates
% in matrices.
for j=1:i-1,
dx=(X(j+1)-X(j))/3; % Divides the interval by 3.
dy=(Y(j+1)-Y(j))/3;
ctheta=2*(rand(1)-0.5); % Defines a cosine of
% a random angle.
stheta=sqrt(1-ctheta^2); % Defines the sine
% of a random angle.
X2=[X2;X(j);X(j)+dx;X(j)+1.5*dx-stheta*dy;X(j)+2*dx];
Y2=[Y2;Y(j);Y(j)+dy;Y(j)+1.5*dy+ctheta*dx;Y(j)+2*dy];
% The above 2 lines basically generates a Koch curve
% of 2nd order out % of a straight line. Moreover,
% the X2 and Y2 within [] ensure that the Koch
% curve does not get criss-crossed.
end
X=X2; Y=Y2;
plot(X,Y); % Plots each point.

133
axis([0 300 0 304]); grid on;
xlabel('x'); ylabel('y');
disp('Press any key to continue.');
pause; figure; % Opens a new window for the next plot.
end
close; % Closes an extra window which contains
% nothing.

в) Вычислите фрактальную размерность кривых Коха. Для этого


1− d
введите полную длину кривой как L = N S LS ~ LS f , где Ns – число
разбиений на отрезки длиной Ls. Для простых кривых при боль-
шом количестве разбиений произведение N S LS будет стремиться
к конечному числу (проверьте это для сегмента окружности дли-
ной π/2). Для кривых Коха высокого порядка это не так. Для них
при увеличении числа разбиений длина также растет, поскольку
становятся видны новые участки. Откладывая log L от log Ls , най-
дите фрактальную размерность кривых Коха.
в) Напишите программу, которая бы генерировала и рисовала раз-
ные этапы построения "снежинки Коха" по алгоритму, описанно-
му на рис. 7. Найдите ее фрактальную размерность.

Рис. 7 Первых четыре шага построения снежинки Коха

ЗАДАЧА 5. ПЕРКОЛЯЦИЯ
Одна из типичных проблем при исследовании процессов происхо-
дящих в пористых структурах – это нахождение связующего кластера
(spanning cluster) в двух- и трехмерных решётках.
а) Рассмотрите двумерную квадратную решётки размером n на n, уз-
лы которой заняты случайным образом в соответствии с вероят-
ностью p. Меняя величину p от 0 до 1, исследуйте при какой кон-
центрации pс у вас возникнет связующий кластер между всеми 4
стенками. Рассмотрите, как изменится результат при увеличении
134
размера решётки, откладывая pс как функцию 1/n. Покажите, что
pс = 0.593 для n → ∞. Для нахождения связующего кластера вос-
пользуйтесь программой perk1.m.
% perk1.m -- percolation problem
L = 20; % size of the system
r = rand(L,L); % generation of the random number
% on the square lattice
p = 0.4; % probability to occupy
z = r<p; % This generates the binary array
% generation the occupation of the Lattice
for i=1:L
for j=1:L
if r(i,j)<=p
A(i,j)=0;
else
A(i,j)=-1;
end
end
end
h=pcolor(A);
set(h,'LineStyle','none');
pause
cluster=0;
% finding the cluster
for xa=1:L
for ya=1:L
if A(xa,ya)==0
cluster=cluster+1; % start the next cluster
A(xa,ya)=cluster;
xlist(1)=xa; ylist(1)=ya; n=1; ii=0;
while ii<n
ii=ii+1; x=xlist(ii); y=ylist(ii);
% working point
if x<L
if A(x+1,y)==0, % neighbor on
% the right
A(x+1,y)=cluster; n=n+1;
xlist(n)=x+1; ylist(n)=y;
end
end
if x>1
if A(x-1,y)==0, % neighbor on
% the left
A(x-1,y)=cluster; n=n+1;

135
xlist(n)=x-1; ylist(n)=y;
end
end
if y<L
if A(x,y+1)==0, % neighbor above
A(x,y+1)=cluster; n=n+1;
xlist(n)=x; ylist(n)=y+1;
end
end
if y>1
if A(x,y-1)==0, % neighbor below
A(x,y-1)=cluster; n=n+1;
xlist(n)=x; ylist(n)=y-1;
end
end
end % cluster is finished
end
end
end % end the analysis
figure(2)
h=pcolor(A);
set(h,'LineStyle','none');

б) Рассмотрите такую же проблему для треугольной решётки (каж-


дый узел связан с 6 соседями) и найдите критическую вероятность
(концентрацию) pс для получения связующего кластера и в этом
случае .
с) Определите фрактальную размерность вашего связующего кла-
стера используя метод, который мы реализовали для кластера
DLA.

Литература
1. Giordano N.J., Nakanishi H. Computational Physics, 2nd Edition, - Pear-
son, Prentice Hall, Pearson Education, Inc. 2006
2. Thijssen J.M. Computational Physics, Cambridge University Press,
1999.
3. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. М.:
Мир, 1990. Т. 2.

136
Работа 7. Метод Монте-Карло для статистических сис-
тем. Модель Изинга.

Введение
При составлении лабораторной работы использованы материалы и
алгоритмы, изложенные в книгах [1-3].

Микроканонический ансамбль
Введем, следуя общепринятому в статистической физике подходу,
понятие «микроканонический ансамбль». Рассмотрим для этого замк-
нутую систему, состоящую из N частиц. Выберем в качестве макро-
скопических характеристик системы объем V и полную энергию сис-
темы E, которые будем считать постоянными. Также предположим,
что система является изолированной, т.е. можно пренебречь влиянием
на нее внешних факторов. Замкнутые макроскопические системы, как
известно [3], стремятся перейти в стационарное равновесное состоя-
ние, обладающее максимальной энтропией. Отметим, что если на мак-
роскопическом уровне система характеризуется тремя величинами N,
V, E, то на микроскопическом уровне существует огромное число кон-
фигураций, реализующих заданное макросостояние (N, V, E).
Таким образом, на возможные микросостояния накладывается
единственное ограничение, они должны быть таковы, чтобы обеспе-
чить заданные физические характеристики системы: число частиц,
объем, полную энергию. Так как причины, по которым следует пред-
почесть одно состояние другому, отсутствуют, можно постулировать,
что система в любой момент времени может оказаться с равной веро-
ятностью в одном из возможных микросостояний (постулат о равенст-
ве априорных вероятностей). Это означает, что для системы с Ω дос-
тижимыми состояниями, вероятность обнаружить систему в микросо-
стоянии s равна
⎧1
⎪ , если s − достижимо
Ps = ⎨ Ω . (1)
⎪⎩0, в противном случае

Очевидно, что сумма Ps по всем Ω равна единице.

137
Для определения средних значений физических величин, характе-
ризующих макроскопическую систему, можно использовать два спо-
соба. В первом способе измеряют физические величины в течение дос-
таточно большого промежутка времени, в течение которого система
успевает побывать в большом числе достижимых микросостояний, и
проводят последующее усреднение. С точки зрения проведенного ус-
реднения во времени, вероятность Ps есть доля времени, которую сис-
тема за время наблюдений находится в данном микроскопическом со-
стоянии s.
Несмотря на очевидный физический смысл средних по времени, в
статистической физике вводят понятие статистических средних в дан-
ный момент времени, которые вычисляются по ансамблю микросо-
стояний, соответствующих заданному макросостоянию. (Гипотеза о
совпадении средних значений величин, вычисляемых усреднением по
времени и усреднением по ансамблю реализаций, называется эргоди-
ческой гипотезой). Полное число систем в ансамбле равно числу воз-
можных микросостояний. Вероятность обнаружить в ансамбле тожде-
ственных систем s-ую реализацию, определяется выражением (1). Ан-
самбль систем, характеризуемый величинами E, T, V, и описываемый
распределением вероятностей вида (1), называется микроканониче-
ским ансамблем.
Будем считать, что система характеризуется некоторой величиной
A, значение которой в s-ом состоянии равно As . Тогда среднее значе-
ние A по ансамблю определяется как взвешенное среднее
A = ∑ As Ps . (2)
s

Из (2) видно, что для нахождения среднего по ансамблю значения ве-


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

138
Моделирование микроканонического ансамбля
Общая идея метода Монте-Карло для микроканонического ан-
самбля состоит в получении репрезентативной выборки из полного
числа микросостояний и оценке с ее использование значения вероят-
ности Ps . Для этого можно использовать достаточно очевидную про-
цедуру: зафиксировать полное число частиц N и объем системы V, из-
менять случайным образом координаты и скорости отдельных частиц,
принимать конфигурации микросостояний, имеющих заданную пол-
ную энергию. К сожалению, данная процедура оказывается весьма не-
эффективной, так как большинство конфигураций вообще не будут
иметь требуемую полную энергию и должны быть отвергнуты.

Алгоритм Монте-Карло для микроканонического ансамбля


Эффективная вычислительная процедура метода Монте-Карло для
микроканонического ансамбля была предложена в [1]. Она состоит в
разделении исходной макроскопической системы на две подсистемы:
исходную, называемою далее системой, и подсистемы, состоящей из
одного элемента, которую авторы назвали демоном (по аналогии с де-
моном Максвелла). Роль демона аналогична роли члена кинетической
энергии в методе молекулярной динамики [6]. Обходя элементы сис-
темы и передавая энергию, он обеспечивает изменение конфигурации
системы. Если энергии, запасенной в мантии демона, оказывается дос-
таточно, он отдает энергию тому элементу системы, которому требу-
ется энергия, для осуществления изменения конфигурации. И наобо-
рот, если для изменения конфигурации требуется уменьшить энергию
системы, энергия передается частицей демону. Единственное ограни-
чение состоит в том, что энергия демона не может быть отрицатель-
ной. Описанная процедура алгоритмически выглядит следующим об-
разом.
1. Сгенерировать начальную конфигурацию системы с заданным
значением полной энергии.
2. Выбрать случайным образом частицу и произвести пробное изме-
нение ее состояния.
3. Вычислить полную энергию системы в новом состоянии.
4. Если в новом состоянии энергия системы оказывается меньше, то
система отдает энергию демону и новая конфигурация принимается.
139
5. Если в новом состоянии энергия системы оказывается больше, то
новая конфигурация принимается только в том случае, если энер-
гии демона достаточно, чтобы передать ее системе. В противном
случае новая конфигурация не принимается, и частица сохраняет
свое старое состояние.
6. Если пробное изменение не меняет энергию системы, то новая
конфигурация принимается.

Перечисленные выше действия повторяются до получения репре-


зентативной выборки микросостояний. Можно ожидать, что через не-
который промежуток времени система достигнет равновесного со-
стояния, в котором у системы и демона будут некоторые средние (для
каждого) значения энергии. При этом значение полной энергии систе-
мы остается постоянной. Так как демон представляет собой только од-
ну степень свободы, в отличие от рассматриваемой статистической
системы можно ожидать, что флуктуации системы будут невелики.
Применим описанный алгоритм к классическому одномерному
идеальному газу, скорости частиц которого непрерывны и неограни-
ченны, а энергия частиц не зависит от положения частиц, поэтому
полная энергия частиц есть сумма кинетических энергий отдельных
частиц. Для изменения конфигурации будем случайным образом изме-
нять скорость случайно выбранной частицы.
Для реализации описанного алгоритма в пакете MatLab создадим
три m-файла:
1) файл InitD.m, содержащий описание функции, возвращающей аб-
солютные значения скоростей в момент времени t = 0, массу час-
тиц можно принять за единицу;
2) файл Demon.m, содержащий описание функции, возвращающей
усредненные по ансамблю реализаций значения: энергии демона
(Edave), средней энергии системы на одну частицу (Esysave),
средней скорости на одну частицу системы (Vave), среднего числа
принятия (Accept);
3) запускающую программу Start_Demon.m.

ЛИСТИНГ ФАЙЛА INITD.M


function z = InitD(N,Esystem)
% функция, возвращающая абсолютные значения скоростей

140
в момент
% времени t = 0
% N - число частиц системы
% Esystem - энергия системы
V=sqrt(2*Esystem/N); z=V*ones(size(1:N));

ЛИСТИНГ ФАЙЛА DEMON.M


function [Edave,Esysave,Vave,Accept] = ...
Demon(N,Esystem,NTrial,Vel,dV)
% функция, возвращающая усредненные по ансамблю
% реализаций значения: энергии демона (Edave),
% средней энергии системы на одну частицу (Esysave),
% средней скорости на одну частицу системы (Vave),
% среднего числа принятия (Accept).
Edemon=0; Vtot=sum(Vel); Vcum=0;
Escum=0; Edcum=0; Accept=0;
for j=1:NTrial
for i=1:N
dv=(2*rand(1)-1)*dV; % случайное изменение
% скорости
Ip=floor(N*rand(1)+1); % случайный выбор частицы
VTrial=Vel(Ip)+dv; % пробное изменение скорости
de=0.5*(VTrial.^2-Vel(Ip)^2); % пробное
%изменение энергии
if de<=Edemon % если энергия демона больше,
% чем изменение энергии, то изменение принимается
Vel(Ip)=VTrial;
Vtot=Vtot+dv;
Accept=Accept+1;
Edemon=Edemon-de;
Esystem=Esystem+de;
end;
Edcum=Edcum+Edemon;
Escum=Escum+Esystem;
Vcum=Vcum+Vtot;
end;

141
end;
Edave=Edcum/(NTrial*N);
Accept=Accept/(NTrial*N);
Esysave=1/N*Escum/(NTrial*N);
Vave=1/N*Vcum/(NTrial*N);

ЛИСТИНГ ФАЙЛА START_DEMON.M


clear all
%начальный диалог
Esystem=40; % энергия системы
N=40; % число частиц системы
NTrial=4000; % число испытаний
dV=2*sqrt(2); % максимальное значение
% изменения скорости
%графический интерфейс для изменения значений
titul='Можете изменить значения входных данных';
prompt = {'Энергия системы, Esystem', ...
'число частиц системы, N', ...
'максимальное изменение скорости, dV', ...
'число испытаний, NTrial'};
lines= 1;
def = {num2str(Esystem),num2str(N), ...
num2str(dV),num2str(NTrial)};
answer = inputdlg(prompt,titul,lines,def);
Esystem=str2num(answer{1});
N=str2num(answer{2});
dV=str2num(answer{3});
NTrial=str2num(answer{4});
% подготовка данных для вывода:
% sprintf('\n') – перевод строки!
txt0=['Входные данные:' sprintf('\n')];
for ii=1:4
txt=[prompt{ii}, ' = ',answer{ii} ...
sprintf('\n') ];,
txt0=[txt0 txt];
end
% конец графического интерфейса
Vel=InitD(N,Esystem); % задание начальных скоростей
142
% вычисление характеристик состояния идеального газа
[Edave Esysave Vave Accept]= Demon(N,Esystem, ...
NTrial,Vel,dV)
%графический интерфейс для вывода результатов
str_Edave=num2str(Edave);%
str_Esysave=num2str(Esysave);%
str_Vave=num2str(Vave);%
str_Accept=num2str(Accept);%
txt1=['Результаты - усредненные по ансамблю ...
реализаций значения:' sprintf('\n') ...
'- энергии демона (Edave) =>' str_Edave...
sprintf('\n') '- средней энергии системы ...
на одну частицу (Esysave) =>' str_Esysave ...
sprintf('\n')...
'- средней скорости на одну частицу ...
системы (Vave) =>' str_Vave sprintf('\n') ...
'- среднего числа принятия (Accept) =>'...
str_Accept];
txtSum=[txt0 sprintf('\n') txt1]
CreateStruct.Interpreter = ...
'tex';CreateStruct.WindowStyle='replace';
msgbox(txtSum,'Результаты', CreateStruct);
Результатом будет 2 окна с примерно следующими значениями.

Рис. 1. Результаты работы программы Start_Demon.m


В командном окне появятся аналогичные результаты
Входные данные:
Энергия системы, Esystem = 40
число частиц системы, N = 40
максимальное изменение скорости, dV = 2.8284
число испытаний, NTrial = 4000

143
Результаты - усредненные по ансамблю реализаций значения:
- энергии демона (Edave) =>1.9057
- средней энергии системы на одну частицу (Esysave) =>0.95236
- средней скорости на одну частицу системы (Vave) =>-0.0074738
- среднего числа принятия (Accept) =>0.6285

Задания

ЗАДАЧА 1. ИССЛЕДОВАНИЕ СИСТЕМЫ


Проведите численные расчеты для заданных значений числа час-
тиц (N = 10, 20, 40, 80), и различных значений отношения
dV/(2*(Esystem/N)1/2). Изобразите графически зависимости коэффици-
ента принятия (Accept) от dV/(2*(Esystem/N)1/2) при заданном числе
частиц. Используя метод наименьших квадратов, подберите аналити-
ческое выражение, описывающее зависимость коэффициента принятия
(Accept) от dV/(2*(Esystem/N)1/2). При каком отношении
1/2
dV/(2*(Esystem/N) ) значение коэффициента принятия оказывается
приблизительно равным 0.5?

ЗАДАЧА 2. ПОСЛЕДОВАТЕЛЬНЫЙ ВЫБОР ЧАСТИЦ


Модифицируйте функцию Demon, представленную выше, так
чтобы номера частиц, скорость которых подлежит изменению (пере-
менная Ip), выбирались последовательно. Приводит ли изменение спо-
соба выбора номера частицы к изменению средней энергии системы на
частицу и средней энергии демона?

ЗАДАЧА 3. ТЕМПЕРАТУРА И ЭНЕРГИЯ ДЕМОНА


Можно ввести кинетическое определение температуры, в соответ-
ствие с которым температура определяется из соотношения
1 1
m v 2 = Tkin , (3)
2 2
1
где m v 2 – средняя кинетическая энергия на частицу, Tkin – темпе-
2
ратура газа, измеряемая в единицах k B . Модифицируйте функцию
Demon( ), представленную выше, так чтобы в программе дополни-
тельно вычислялось и дополнительно выводилось в векторе, возвра-
щаемом данной функцией, значение средней кинетической энергии на
144
одну частицу. Используя соотношение (3), получите Tkin . Как связаны
значения температуры и энергии демона?

Моделирование канонического ансамбля методом Монте-Карло


Один из наиболее важных результатов, полученных в задаче 3, со-
стоит в демонстрации возможности введения кинетического определе-
ния температуры, как средней на одну частицу кинетической энергии
частицы микроканонического ансамбля. При этом значение темпера-
туры с некоторой погрешностью оказывается равной энергии демона.
В то же время микроканонический ансамбль нельзя считать абсолютно
адекватной моделью реальных статистических систем, так данные сис-
темы не являются термодинамически изолированными, но находятся в
тепловом контакте с окружающей средой. Это приводит к возникнове-
нию потока тепла между изучаемой системой и окружающей средой.
Так как размер исследуемой системы обычно много меньше размера
окружающей среды, первую будем называть микросистемой, а по-
следнюю – тепловым резервуаром (термостатом). При этом закон со-
хранения полной энергии относится к составной системе, состоящей
из микросистемы и теплового резервуара.
Рассмотрим большое число воображаемых копий микросистемы и
теплового резервуара. Рассматриваемые как единое целое микросис-
тема и тепловой резервуар являются изолированной термодинамиче-
ской системой и могут быть описаны с помощью микроканонического
ансамбля. Так как в данном случае наибольший интерес представляют
равновесные значения физических величин, описывающих микросис-
тему, необходимо знать вероятность Ps , с которой микросистема обна-
руживается в состоянии s с энергией Es . Ансамбль, который описыва-
ет распределение вероятностей состояний микросистемы, находящей-
ся в термодинамическом равновесии с тепловым резервуаром, называ-
ется каноническим.
В общем случае в качестве микросистемы, может выступать лю-
бая макроскопическая система, размер которой меньше теплового ре-
зервуара, в том числе и отдельная частица, выделенная среди других
частиц теплового резервуара. Примером такой микросистемы служит
демон, которого можно считать микросистемой, микроканоническое
состояние которой определяется только ее энергией. Таким образом,
метод отыскания распределения вероятностей в каноническом ансамб-
145
ле заключается в том, чтобы выполнить численное моделирование де-
мона, который обменивается энергией с идеальным газом, состоящим
из N частиц. Идеальный газ в данном случае играет роль термостата и
задача состоит в определении плотности вероятности P ( Ed ) того, что
демон имеет энергию Ed . Вычислительный алгоритм, позволяющий
решить данную задачу, достаточно очевиден:
1. Провести моделирование канонического ансамбля методом Мон-
те-Карло, сохраняя на каждом шаге Монте-Карло значение энер-
гии демона.
2. Для найденной реализации значений энергии демона вычислить
распределение вероятностей P ( Ed ) ΔE .
3. Определить функциональную зависимость P ( Ed ) ΔE от темпера-
туры.
Для реализации данного алгоритма в пакете MatLab создадим m-
файл DemonE.m, содержащий описание функции, возвращающей
мгновенные (на каждом шаге Монте-Карло) значения энергии демона.

ЛИСТИНГ ФАЙЛА DEMONE.M

function z = DemonE(N,Esystem,NTrial,Vel,dV)
% функция, возвращающая мгновенные
% значения энергии демона - вектор
% размерностью (1,N*NTrial)
% N - число частиц системы
% Esystem - энергия системы
% NTrial - число испытаний
% Vel - вектор, возвращенный функцией InitD
% dV - максимальное изменение скорости
Edemon=0; z=zeros(size(1,N*NTrial)); z(1)=Edemon;
k=1;
for j=1:NTrial
for i=1:N
dv=(2*rand(1)-1)*dV; % случайное изменение
% скорости
Ip=floor(N*rand(1)+1); % случайный выбор номера
% частицы
Vtrial=Vel(Ip)+dv;
146
de=0.5*(Vtrial.^2-Vel(Ip).^2); % пробное
% изменение энергии
if de<=Edemon % если энергия уменьшается, то
% пробное изменение принимается
Vel(Ip)=Vtrial;
Edemon=Edemon-de;
end;
k=k+1;
z(k)=Edemon;
end;
end; …………………………
Далее необходимо выполнить программу Start_DemonE.m:

clear all
Esystem=40; % энергия системы
N=40;% число частиц системы
dV=2*sqrt(2); % максимальное изменение скорости
NTrial=500; % число испытаний

% начальный диалог и графический интерфейс берется


% из программы Start_Demon.m
????????????
% конец графического интерфейса

Vel=InitD(N,Esystem); % вычисление начальных скоро-


стей частиц
Ed=DemonE(N,Esystem,NTrial,Vel,dV); % вычисление
% мгновенных значений энергии демона
% визуализация зависимости мгновенных значений демона
% энергии от времени
i=1:length(Ed);
figure(1);plot(i,Ed,'k');axis([0 NTrial*N 0 16])
% вычисление и визуализация распределения вероятностей
x1=min(Ed); x2=max(Ed); Nint=50; i=1:Nint;
x(i)=x1+(x2-x1)/(Nint-1)*(i-1/2); стояний!
x11(i)=x1+(x2-x1)/(Nint-1)*(i-1);
h=hist(Ed,x);

147
figure(2);bar(x,h); colormap white
% вычисление и визуализация функции, аппроксимирующей
% распределение
F10=inline('u(1)*exp(-u(2)*z)','u','z'); % задание
% аппроксимирующей функции
beta=nlinfit(x11,h,F10,[3000 1]); % вычисление
% коэффициентов аппроксимирующей функции
% визуализация гистограммы последовательности
% мгновенных значений энергии демона
% и аппроксимирующей функции F10(beta,z)
Ni=500; j=1:Ni; X(j)=x1+(x2-x1)/(Ni-1)*(j-1);
figure(3);bar(x,h); colormap white
%axis([0 8 0 3000])
hold on
plot(X,F10(beta,X),'k')
%axis([0 8 0 3000])
hold off
AA=beta(1) % множитель перед Больцмановской
% экспонентой
Temp=1/beta(2)% Температура в Больцмановской
% экспоненте
str_AA=num2str(AA);% множитель перед Больцмановской
% экспонентой
str_Temp=num2str(Temp);% Температура в Больцмановской
% экспоненте
txt1=['Результаты:' sprintf('\n') ...
'- Множитель перед Больцмановской ...
экспонентой =>' str_AA sprintf('\n' ...
'- Температура в Больцмановской ...
экспоненте =>' str_Temp];
txtSum=[txt0 sprintf('\n') txt1]
CreateStruct.Interpreter = ...
'tex';CreateStruct.WindowStyle='replace';
msgbox(txtSum,'Результаты');
Предусмотреть вывод коэффициентов аппроксимирующей функ-
ции (4). Значения функции аппроксимируется по левой границе стол-
биков гистограмм. Результаты выполнения описанной последователь-
ности команд представлены на рис. 2−4.

148
15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
4
x 10

Рис. 2 Зависимость мгновенных значений энергии демона от времени (но-


мера шага Монте-Карло)
3500

3000

2500

2000

1500

1000

500

0
0 2 4 6 8 10 12 14 16 18

Рис. 3 Распределение по энергии демона N ⋅ P ( Ed ) ΔE с аппроксимирую-


щей функцией

Рис. 4 Окно результатов

149
Анализ моделирования идеального газа

Таким образом, результаты моделирования идеального газа мето-


дами микроканонического и канонического ансамблей позволяют сде-
лать следующие выводы:
1. Распределение вероятностей энергии демона в данном экспери-
менте описывается функцией вида
Ed

P ( Ed ) = Ae Tterm
, (4)

где A = 2731.2, Tterm = 2.1567.


2. Температура идеального газа, определяемая как средняя кине-
тическая энергия, приходящаяся на одну частицу, Tkin совпадает в
пределах точности модели с температурой термостата Tterm . Это
позволяет сделать вывод о том, что демон находится в термоди-
намическом равновесии с термостатом.

Распределение вероятности (4) называется распределением


Больцмана или каноническим распределением. Данное распределение
принято записывать в следующем виде:
E
1 −
P ( E ) = e kb T , (5)
Z
где k B = 1.38 ⋅ 10−16 эрг ⋅ град −1 – постоянная Больцмана, Z – нормиро-
вочный множитель, выбираемый из условия равенства единице суммы
по всем состояниям демона. Параметр T называется абсолютной тем-
пературой. Температура может измеряться в единицах k B , тогда рас-
пределение Больцмана принимает вид
1 − TE
P(E) = e . (6)
Z
Формулы (5), (6) обеспечивают простой способ вычисления тем-
пературы по средней энергии демона Ed , которая по определению
равняется

150
E

Ed =
∫ Ee T
dE
=T . (7)
E

∫e T
dE

Таким образом, средняя энергия демона равняется температуре


термостата. Данный результат справедлив, только при условии, что
значения энергии принимают непрерывные значения.
Отметим, что формулы (5), (6) применимы для любой микросис-
темы, находящейся в тепловом равновесии с термостатом, – канониче-
ского ансамбля – при этом всякое макросостояние задается температу-
рой T, числом частиц системы N и объемом V. В отличие от канониче-
ского ансамбля микроканонический ансамбль характеризуется энерги-
ей E, числом частиц системы N и объемом V.

Задания

ЗАДАЧА 4. ТОЧНОСТЬ ОПРЕДЕЛЕНИЯ ТЕМПЕРАТУРЫ


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

ЗАДАЧА 5. ДВУМЕРНЫЙ И ТРЕХМЕРНЫЙ ГАЗ


Повторить задачи 1-3 для двумерного и трехмерного газа. Пара-
метры задачи выбирать с учетом возможностей компьютера, стремясь
к репрезентативности выборок.

Модель Изинга

Основные положения
Одной из простейших моделей, используемых в статистической
физике для моделирования фазовых переходов в магнитных веществах
или бинарных составах, является модель Изинга. Данная модель отно-
сится к широкому классу решеточных моделей, в которых рассматри-
ваются локальные взаимодействия, то есть взаимодействия между
ближайшими узлами решетки. В магнитных системах локальные взаи-
модействия обусловлены спинами, расположенными в узлах решетки.
151
Спины могут представлять собой, например, магнитные моменты ато-
мов в твердом теле, взаимодействующие друг с другом и внешним
магнитным полем.
Рассмотрим решетку, состоящую из N узлов. Свяжем с каждым
i-ым узлом решетки число si = ±1, характеризующее направление маг-
нитного момента системы, где si = +1, если спин ориентирован в по-
ложительном направлении оси 0Z, и si = −1, если спин ориентирован в
отрицательном направлении оси 0Z. (Данная картина характерна для
частиц с полуцелым спином, хотя далее мы рассматриваем спины как
классические степени свободы и не вводим для них используемых в
квантовой механике правил коммутации углового момента). Любое
микросостояние решетки задается набором переменных {s1 , s2 ,…, sN } .
Так как макроскопическое свойства системы определяются свойствами
ее достижимых микросостояний, необходимо вычислить зависимость
энергии E от конфигурации спинов. Полная энергия при наличии маг-
нитного поля h в модели Изинга равняется
N N
E = − J ∑ si s j − h ∑ si , (8)
i, j i =1

где обозначение i, j означает, что сумма берется по всем ближайшим


соседним парам спинов, константа обменной связи J характеризует
силу взаимодействия соседних спинов (рис. 4).

Рис. 5 Энергия взаимодействия между ближайшими соседними спинами в


отсутствие магнитного поля
Если J > 0 , то в состоянии ↑↑ и ↓↓ , т.е. при одинаковой ориента-
ции спинов ближайших соседей, энергетически выгоднее состояний
↑↓ и ↓↑ , у которых соседние спины ориентированы в противополож-
ные стороны. Следовательно, можно ожидать, что для J > 0 состояние
с наименьшей полной энергией является ферромагнитным, т.е. в сред-
нее число спинов сориентированных в одном направлении не равно
нулю. Если J < 0 , то с энергетической точки зрения более предпочти-

152
тельными оказываются состояния ↑↓ , ↓↑ , для которых соседние спи-
ны антипараллельны. Следовательно, среднее число спинов, сориенти-
рованных в одном направлении, равно нулю, т.е. спины упорядочены
через один (антиферромагнитное состояние). При наложении внешне-
го магнитного поля, направленного параллельно оси oZ , спины ↑ и ↓
приобретают дополнительную внутреннюю энергию, равную −h и + h ,
соответственно.
Выделим основные упрощающие предположения, положенные в
основу модели Изинга:
1. Кинетическая энергия узлов решетки принимается равной нулю.
2. В выражении, описывающем энергию взаимодействия, учитыва-
ется только вклад от ближайших соседей и предусматривается
только два дискретных состояния для спинов.
Так как в дальнейшем нас будут интересовать термодинамические
характеристики данной системы, оказывается удобным измерять энер-
гии связей J и h в единицах температуры. Тогда нагревание системы
будет приводить к ослаблению этих связей. Возможные конфигурации
системы определяются заданием значений всех спиновых переменных,
число которых составляет 2 N , а вклад любой из 2 N спиновых конфигу-
раций s определяется функцией распределения для канонического ан-
самбля
− E(s)
e
w(s) = , (9)
Z
где
N
Z ( J ,h) = ∑e
− E ( si )
. (10)
i

Предваряя применения алгоритма демона к исследованию модели


Изинга методом микроканонического ансамбля, необходимо получить
выражение, связывающее энергию демона и температуру термостата.
Напомним, что в непрерывном случае распределение энергии демона
подчинялось формуле Больцмана (6). Предположим, что данное рас-
пределение вероятностей справедливо для любой макроскопической
системы, находящейся в состоянии термодинамического равновесия.
Тогда Ed равно

153
Ed

Ed =
∑E e d
T
, (11)
Ed

∑e T

где суммы вычисляются по всем возможным значениям Ed . Мини-


мальная ненулевая потеря энергии системы в нулевом магнитном поле
составляет, как видно из рис. 5, 2sJ, где s – суммарный спин ближай-
ших соседей, опрокидывающегося спина.

Рис. 5. Изменение энергии, обусловленное изменения ориентации цен-


трального спина
В одномерном случаем суммарный спин ближайших соседей ра-
вен 0, или 2, т.е. минимальная не нулевая потеря энергии равняется 2J.
Следовательно, энергия демона, может равняться 0, 2J, 4J, … . Если
ввести обозначение x = 2 J T , то выражение (11) для бесконечной ре-
шетки принимает вид

Ed ∑( x ⋅ n)e − n⋅ x

= n =0

. (12)
T
∑e
n =0
− n⋅ x

Бесконечные суммы, стоящие в числителе и знаменателе, могут быть


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

4
Сумма бесконечного ряда (13) находится выполнением следующей последова-
тельности команд:
>> expr=sym('x*n*exp(-x*n)') % задание выражения,
% стоящего под знаком суммы
expr =
x*n*exp(-x*n)
>> symsum(expr,'n',0,inf) % вычисление суммы ряда
ans =
x*exp(-x)/(1-exp(-x))^2
Аналогично находится сумма бесконечного ряда (14).
154

exp ( − x )
∑ ( x ⋅ n ) e − n⋅ x → x ⋅ , (13)
(1 − exp ( − x ) )
2
n =0


1
∑e
n =0
− n⋅ x

1 − exp ( − x )
. (14)

Разделив (13) на (14) и выполнив очевидное преобразование, получаем


Ed x
= x . (15)
T e −1
Подставив в (15) вместо x выражение 2J T и решив получившее
уравнение относительно T, получаем
2J
T= . (16)
ln (1 + 2 J Ed )

Задания

ЗАДАЧА 6. СРАВНЕНИЕ АНАЛИТИЧЕСКИХ И ЧИСЛЕННЫХ РЕЗУЛЬТАТОВ


Получите аналитические выражения для средней энергии демона
для системы, состоящей из конечного числа спинов. Может ли быть
найдено аналитическое выражение для зависимости температуры от
энергии демона в данном случае? Сравните значения средней энергии
демона для системы, состоящей из N спинов Ed N , получаемые по
точной формуле с соответствующими значениями Ed ∞
, получаемы-
ми по формуле (15). Постройте зависимости Ed N
− Ed ∞
при раз-
личных температурах. Оцените погрешность определения значения
температуры, получаемого по формуле (16), для системы, состоящей
из N спинов. Как зависит данная погрешность от N и T?

Моделирование одномерной модели Изинга


Отметим, что в одномерной модели Изинга демон должен выби-
рать спины случайно, что позволит избежать подсчета периодически
повторяющихся конфигураций. Так как нашей целью является оценка
термодинамических характеристик бесконечной термодинамической
системы, следует учесть краевые условия. В качестве таковых в опи-
155
сываемом ниже документе нами выбраны периодические (тороидаль-
ные) краевые условия: решетка считается кольцом, в котором спины
si , находящиеся в узлах i = 1 и i = N , взаимодействуют друг с другом.
Это обеспечивает равное число взаимодействий для всех спинов в изу-
чаемой системе.
Для моделирования одномерной модели Изинга методом микро-
канонического ансамбля в пакете MatLab необходимо создать файл
Ising.m, содержащий описание функции, возвращающей значения
полной энергии системы, энергии демона, намагниченности и среднее
число принятия решений.

ЛИСТИНГ ФАЙЛА ISING.M


function
[Es,Ed,SpM,Accept]=Ising(Nspin,J,h,Esi,NTrial)
% функция, возвращающая мгновенные значения полной
% энергии системы (Es), энергии демона (Ed),
% намагниченность (SpM) и
% среднее число принятия (Accept)
% Nspin - число спинов системы
% J - константа обменного взаимодействия
% h - внешнее магнитное поле
% Esi - конечная энергия системы
% NTrial - число испытаний
% задание конфигурации спинов в момент времени t = 0
s=ones(size(1:Nspin));
Es=zeros(size(1:Nspin*NTrial));
Ed=Es;
SpM=Es;
M=Nspin;
Esystem=-(J+h)*Nspin;
Edemon=2*J*ceil((Esi-Esystem)/(2*J));
Es(1)=Esystem;
% энергия системы в момент времени t = 0
Ed(1)=Edemon; % энергия демона в момент времени t = 0
SpM(1)=M;
% магнитный момент системы в момент времени t = 0
Accept=0;

156
k=1;
% реализация метода микроканонического ансамбля
for i=1:NTrial
for j=1:Nspin
Ispin=floor(Nspin*rand(1)+1);
% случайный выбор номера спина
% периодические граничные условия
if Ispin==1
Left=s(Nspin);
else
Left=s(Ispin-1);
end;
if Ispin==Nspin
Right=s(1);
else
Right=s(Ispin+1);
end;
de=2*s(Ispin)*(-h+J*(Left+Right));
% пробное изменение энергии спина
if de<=Edemon % принятие пробного изменения
s(Ispin)=-s(Ispin);
Accept=Accept+1;
Edemon=Edemon-de;
Esystem=Esystem+de;
end;
k=k+1;
Es(k)=Esystem;
Ed(k)=Edemon;
SpM(k)=sum(s);
end;
end;
Accept=Accept/(NTrial*Nspin);
Далее необходимо выполнить запускающую программу
Start_Ising.m:
clear all
Nspin=200; % число спинов системы
J=1; % константа обменного взаимодействия

157
h=0; % внешнее поле
Esi=-10; % задание конечного значения энергии системы
NTrial=100; % число испытаний
titul='Можете изменить значения входных данных';
prompt = {'Число спинов системы, Nspin', ...
'константа обменного взаимодействия, J'
'напряженность внешнего магнитного поля, h', ...
'конечная энергия системы, Esi', ...
'число испытаний, NTrial'};
lines= 1;
def ={num2str(Nspin),num2str(J),num2str(h), ...
num2str(Esi),num2str(NTrial)};
answer = inputdlg(prompt,titul,lines,def);
Nspin=str2num(answer{1}); % число спинов системы
J=str2num(answer{2}); % конст. обмен. взаимодействия
h=str2num(answer{3}); % напряжен. внеш. маг. поля
Esi=str2num(answer{4}); % конечная энергия системы
NTrial=str2num(answer{5}); % число испытаний
txt0=['Входные данные:' sprintf('\n')];
for ii=1:5
txt=[prompt{ii}, ' = ', ...
answer{ii} sprintf('\n') ];,
txt0=[txt0 txt];
end
% вычисление мгновенных значений полной
% энергии системы (Es),
% энергии демона (Ed), мгновенной намагниченности
% (SpM), числа принятия решений
[Es Ed SpM Accept]=Ising(Nspin,J,h,Esi,NTrial);
% визуализация зависимостей мгновенных значений
% полной энергии системы и энергии демона от времени
i=1:1200;
figure(1);plot(i,Es(i), 'k');
figure(2);plot(i,Ed(i), 'k');
% вычисление распределения вероятностей мгновенных
% значений энергии демона
Nint=50;
i=1:Nint;
158
x1=min(Ed);
x2=max(Ed);
x(i)=x1+(x2-x1)/(Nint-1)*(i-1/2);
x11(i)=x1+(x2-x1)/(Nint-1)*(i-1);
h=hist(Ed,x);
% нахождение и визуализация функции,
% описывающей распределение вероятности
F10=inline('u(1)*exp(-u(2)*z)','u','z');
beta=nlinfit(x11,h,F10,[10000 0.05]);
figure(3);bar(x,h);colormap white
hold on
Ni=500;j=1:Ni;
X(j)=x1+(x2-x1)/(Ni-1)*(j-1);
plot(X,F10(beta,X),'k')
hold off
meanEsSys=mean(Es)/Nspin % средняя энергия системы
% на один спин
meanSpMSys= mean(SpM) % средняя намагниченность
% системы
meanSpM=mean(SpM)/Nspin % средняя намагниченность
% на один спин
TempRav=2/log(1+2./mean(Ed))% равновесная температура
% системы??
AA=beta(1) % множитель перед Больцмановской
% экспонентой
Temp=1/beta(2) % Температура в Больцмановской
% экспоненте
str_meanEsSys=num2str(meanEsSys); % средняя энергия
% системы на один спин
str_meanSpMSys=num2str(meanSpMSys);% средняя
% намагниченность системы
str_meanSpM=num2str(meanSpM);% средняя намагниченность
% на один спин
sstr_TempRav=num2str(TempRav);% равновесная
% температура системы??
str_AA=num2str(AA);% множитель перед Больцмановской
% экспонентой
str_Temp=num2str(Temp);% Температура в Больцмановской

159
% экспоненте
txt1=['Результаты:' sprintf('\n')
'- Cредняя энергия системы на один спин =>'...
str_meanEsSys sprintf('\n')...
'- Cредняя намагниченность системы =>'...
str_meanSpMSys sprintf('\n')...
'- Cредняя намагниченность на один спин =>'...
str_meanSpM sprintf('\n')...
'- Равновесная температура системы =>'...
sstr_TempRav sprintf('\n')...
'- Множитель перед Больцмановской эксп-той =>'...
str_AA sprintf('\n')...
'- "Температура" в Больцмановской эксп-те =>'...
str_Temp];
txtSum=[txt0 sprintf('\n') txt1]
CreateStruct.WindowStyle='replace';
msgbox(txtSum,'Результаты');

Результаты выполнения описанной последовательности команд


представлены в окне Результаты (см. ниже).

и на рис. 6−8

160
0

-50

-100

-150

-200
0 200 400 600 800 1000 1200

Рис. 6. Зависимость мгновенных значений полной энергии системы от


времени
200

150

100

50

0
0 200 400 600 800 1000 1200

Рис. 7. Зависимость мгновенных значений энергии демона от времени


4
x 10
3

2.5

1.5

0.5

0
0 50 100 150 200

Рис. 8. Функция распределения энергии демона

161
Задания

ЗАДАЧА 7. ВРЕМЯ РЕЛАКСАЦИИ


Так как изначально неизвестны конфигурации спинов, обеспечи-
вающие искомое значение энергии, в качестве начальной конфигура-
ции мы выбираем конфигурацию с минимальной энергией, поэтому
для достижения равновесного состояния с заданной полной энергией
системе требуется некоторое конечное время (время релаксации). Это
хорошо видно из рис. 6, 7. Аппроксимируйте зависимости Esystem ( t ) ,
Edemon ( t ) , используя метод наименьших квадратов. Оцените время ре-
лаксации полной энергии системы τ system и время релаксации энергии
демона τ demon . Как зависят τ system , τ demon от числа спинов Nspin, обра-
зующих систему?

ЗАДАЧА 8. РАВНОВЕСНЫЕ ЗНАЧЕНИЯ ПАРАМЕТРОВ


Создайте собственные функции, позволяющие исключать пере-
ходный период и вычислять равновесные значения средней полной
энергии системы Esystem , среднюю энергию демона Edemon , среднюю
намагниченность системы M , средний квадрат намагниченности
M 2 . Сравните значения равновесной температуры системы с соот-
ветствующим значением температуры, полученной без учета процесса
релаксации системы к равновесному состоянию.

ЗАДАЧА 9. СЛУЧАЙНЫЕ ФЛУКТУАЦИИ


После достижения равновесного состояния значения полной энер-
гии системы и энергии демона, как видно из рис. 6, 7, испытывают
случайные флуктуации около средних значений. Исследуйте как зави-
сит величина флуктуаций средней полной энергии системы Esystem ,
средней энергии демона Edemon , средней намагниченности системы
M , среднего квадрата намагниченности M 2 от Nspin.

162
ЗАДАЧА 10. СРЕДНЯЯ ЭНЕРГИЯ

Вычислите Esystem для систем, состоящих из различного числа


спинов N. Сравните полученные результаты с точным ответом для
бесконечной одномерной решетки
Esystem ⎛J ⎞
= − th ⎜ ⎟. (17)
N ⎝T ⎠
Как полученные результаты зависят от числа спинов N и количества
шагов метода Монте-Карло?

ЗАДАЧА 11. СРЕДНЯЯ НАМАГНИЧЕННОСТЬ

Проведите вычисления и постройте зависимость M 2 от темпе-


ратуры T для системы, состоящей из N спинов (N = 200). Аппроксими-
руйте данную зависимость методом наименьших квадратов. Зависит
ли вид аппроксимирующей функции от числа спинов.

ЗАДАЧА 12. ВЫЧИСЛЕНИЯ В МАГНИТНОМ ПОЛЕ


Введите ненулевое магнитное поле h и вычислите Edemon , M ,
M 2 , как функции от h для заданной полной энергии. Определите
связь Edemon с температурой для h ≠ 0 . Сравните значения равновес-
ных температур для случаев h = 0 , h ≠ 0 при одинаковых значениях
средней полной энергии.

Двумерная система спинов


Обобщим, использованный выше метод микроканонического ан-
самбля, использованный нами для одномерной системы спинов, на
случай двумерной системы (рис. 9).

Рис. 9. Квадратная двумерная решетка, состоящая из N = 16 спинов


163
Рис. 10. Задание граничных условий в двумерном случае
Как и в одномерном случае выбираем периодические (тороидаль-
ные) краевые условия, т.е. будем представлять решетку кольцом, в ко-
тором спины sij , находящиеся в узлах ( i = 1 , j = 1,…, N ) взаимодейст-
вуют со спинами, находящимися в узлах ( i = N , j = 1,…, N ), а спины,
расположенные в узлах ( i = 1,…, N , j = 1 ), взаимодействуют со спинами,
расположенными в узлах ( i = 1,…, N , j = N ) (рис. 10). Это обеспечивает
равное число взаимодействий для всех спинов в изучаемой системе.
Взаимодействие выбранного спина с соседями можно рассматри-
вать, как взаимодействие с одним спином, величина которого равна
алгебраической сумме величин четырех соседних спинов, которая, как
очевидно, может принимать три значения: 0, 2, 4. Следовательно, ми-
нимально возможное значение изменение энергии при опрокидывании
одного спина составляет 2 J − ( −2 J ) = 4 J , в отличие от одномерного
случая в котором квант изменения энергии равнялся 2 J . Отмеченное
обстоятельство определяет необходимость замены в (16) 2 J → 4 J :
4J
T= . (18)
ln (1 + 4 J Ed )

164
АЛГОРИТМ МОДЕЛИРОВАНИЯ ДВУМЕРНОЙ СИСТЕМЫ
Алгоритм моделирования двумерной системы, состоящей из N
спинов, методом Монте-Карло реализуется следующей последова-
тельностью действий:
1. Задание числа спинов решетки Nspin .
2. Задание числа шагов метода Монте-Карло на спин.
3. Задание ориентации спинов в узлах квадратной решетки в момент
времени t = 0 (начальной конфигурации системы).
4. Выбор случайным образом одного из спинов системы.
5. Вычисление пробного изменения энергии.
6. Если пробное изменение приводит к уменьшению энергии систе-
мы, то система отдает энергию демону и новая конфигурация
принимается.
7. Если пробное изменение увеличивает энергию системы, то новая
конфигурация принимается в том случае, если демон имеет доста-
точную энергию для передачи ее системе.
8. Если пробное изменение не меняет энергию системы, то принима-
ется новая конфигурация.
9. Повторение пп. 4−8 (число повторений равно числу спинов в сис-
теме).
10. Повторение пп. 4−9 (число повторений равно числу шагов метода
Монте-Карло на спин).
Для реализации описанного алгоритма моделирования двумерной
системы спинов методом Монте-Карло в пакете MatLab создадим файл
Ising2.m, содержащий описание функции, возвращающей мгновенные
значения: энергии системы, энергии демона, намагниченности, числа
принятия решений, а также мгновенные конфигурации спинов.

ЛИСТИНГ ФАЙЛА ISING2.M


% листинг файла Ising2.m
function [Es,Ed,SpM,A,S] = ...
Ising2(Nspin,J,h,Esi,NTrial)
% функция, возвращающая мгновенные значения
% : энергии системы, энергии демона, намагниченности,
% числа принятия решений, а также мгновенные
165
% конфигурации спинов
% Nspin - число спинов решетки
% J - константа обменного взаимодействия
% h - напряженность внешнего магнитного поля
% Esi - конечная энергия системы
% NTrial - число испытаний
Ns=sqrt(Nspin); % число спинов вдоль одной стороны
s=ones(Ns,Ns); % начальная конфигурация спинов
Esystem=-(J+h)*Nspin; % начальная энергия системы
Edemon=4*J*floor((Esi-Esystem)/(4*J)); % начальная
% энергия демона
Es=zeros(size(1:Nspin*NTrial)); %задание "пустых"
% векторов для ускорения счета
Ed=Es; SpM=Es; ASpM=Es;
Es(1)=Esystem; Ed(1)=Edemon; S=s; k=1;
for i=1:NTrial
Accept=0;
for j=1:Nspin
% случайный выбор узла сетки
Ix=floor(Ns*rand(1)+1); Iy=floor(Ns*rand(1)+1);
% граничные условия
if Ix==1
Left=Ns;
else
Left=Ix-1;
end;
if Ix==Ns
Right=1;
else;
Right=Ix+1;
end;
if Iy==1
Down=Ns;
else;
Down=Iy-1;
end;
if Iy==Ns

166
Up=1;
else
Up=Iy+1;
end;
% пробное изменение энергии
de=2*s(Iy,Ix)*(-
h+J*(s(Iy,Left)+s(Iy,Right)+s(Down,Ix)+s(Up,Ix)));
if de<=Edemon % принятие пробного изменения
% энергии
s(Iy,Ix)=-s(Iy,Ix); Accept=Accept+1;
Edemon=Edemon-de; Esystem=Esystem+de;
end;
k=k+1; Es(k)=Esystem; Ed(k)=Edemon;
A(k-1)=Accept; s1=sum(s); SpM(k)=sum(s1);
S=cat(3,S,s);
end;
end;
A=A/NTrial;
Далее необходимо выполнить запускающую программу
Start_Ising2.m.

ЛИСТИНГ START_ISING2.M
%% Start_Ising2.m
h=0; % напряженность внешнего магнитного поля
Esi=-10; % конечная энергия системы
NTrial=50; % число испытаний
titul='Можете изменить значения входных данных';
prompt = {'Число спинов системы, Nspin', ...
'константа обменного взаимодействия, J', ...
'напряженность внешнего магнитного поля, h', ...
'конечная энергия системы, Esi', ...
'число испытаний, NTrial'};
lines= 1;
def = {num2str(Nspin),num2str(J),num2str(h), ...
num2str(Esi),num2str(NTrial)};
answer = inputdlg(prompt,titul,lines,def);
Nspin=str2num(answer{1}); % число спинов системы
J=str2num(answer{2}); % константа обменного
167
% взаимодействия
h=str2num(answer{3}); % напряженность внешнего
% магнитного поля
Esi=str2num(answer{4}); % конечная энергия системы
NTrial=str2num(answer{5}); % число испытаний
txt0=['Входные данные:' sprintf('\n')];
for ii=1:5
txt=[prompt{ii}, ' = ',answer{ii} ...
sprintf('\n') ];,
txt0=[txt0 txt];
end
[Es,Ed,SpM,A,S]=Ising2(Nspin,J,h,Esi,NTrial);
% визуализация зависимости мгновенных значений полной
% энергии системы и энергии демона от времени
i=1:2000;
figure(1);plot(i,Es(i),'LineWidth',1.)
figure(2);plot(i,Ed(i),'LineWidth',1.)
% визуализация мгновенных конфигураций системы в виде
% векторного поля
i=1:9; j=1:9; V(i,j)=0; U(i,j)=0; Z(i,j)=0;
figure(3);quiver3(Z,U,V,S(:,:,1),.5,'LineWidth',2);
colormap white
axis([0 10 0 10 -1.5 1.5]);view(-35,55)
figure(4);quiver3(Z,U,V,S(:,:,100),.5,'LineWidth',2);
colormap white
axis([0 10 0 10 -1.5 1.5]);view(-35,55)
figure(5);
quiver3(Z,U,V,S(:,:,1000),.5,'LineWidth',2);
colormap white
axis([0 10 0 10 -1.5 1.5]);view(-35,55)
figure(6);
quiver3(Z,U,V,S(:,:,2000),.5,'LineWidth',2);
colormap white
axis([0 10 0 10 -1.5 1.5]);view(-35,55)
% визуализация мгновенных конфигураций системы в виде
% прямоугольных параллелепипедов
figure(7);bar3(S(:,:,1));

168
axis([0 10 0 10 -1.5 1.5]);
colormap white;view(-46,22);grid off
figure(8);bar3(S(:,:,100));
axis([0 10 0 10 -1.5 1.5]);
colormap white;view(-46,22);grid off
figure(9);bar3(S(:,:,1000));
axis([0 10 0 10 -1.5 1.5]);
colormap white;view(-46,22);grid off
figure(10);bar3(S(:,:,2000));
axis([0 10 0 10 -1.5 1.5]);
colormap white;view(-46,22);grid off
mean(Es); % средняя энергия системы
mean(Es)/Nspin; % средняя энергия системы на один спин
mean(SpM)/Nspin % средняя намагниченность на один спин
mean(A) % среднее значение коэффициента принятия
% на один шаг
4/log(1+4/mean(Ed)) % равновесная температура системы
meanEs=mean(Es) % средняя энергия системы
meanEsSys=mean(Es)/Nspin % средняя энергия системы
% на один спин
meanSpM=mean(SpM)/Nspin % средняя намагниченность на
% один спин
meanA=mean(A) % среднее значение коэффициента принятия
% на один шаг
TempRav=4/log(1+4/mean(Ed)) % равновесная температура
% системы
str_meanEs=num2str(meanEs); % средняя энергия системы
str_meanEsSys=num2str(meanEsSys); % средняя энергия
% системы на один спин
str_meanSpM=num2str(meanSpM);% средняя намагниченность
% на один спин
sstr_TempRav=num2str(TempRav);% равновесная
% температура системы
str_meanA=num2str(meanA);% среднее значение
% коэффициента принятия на один шаг

txt1=['Результаты:' sprintf('\n')...
'- Cредняя энергия системы =>' ...
169
str_meanEs sprintf('\n')...
'- Cредняя энергия системы на один спин =>' ...
str_meanEsSys sprintf('\n')...
'- Cредняя намагниченность на один спин =>' ...
str_meanSpM sprintf('\n')...
'- Равновесная температура системы =>' ...
sstr_TempRav sprintf('\n')...
'- Cреднее значение коэффициента принятия ...
на один шаг =>' str_meanA sprintf('\n')];
txtSum=[txt0 sprintf('\n') txt1]
msgbox(txtSum,'Результаты');

Результаты выполнения приведенных выше программ представ-


лены на рис. 11−21.
-10

-20

-30

-40

-50

-60

-70

-80

-90
0 500 1000 1500 2000

Рис. 11 Зависимость мгновенных значений энергии системы от времени


70

60

50

40

30

20

10

0
0 500 1000 1500 2000

Рис. 12 Зависимость мгновенных значений энергии демона от времени

170
1

0
-1

10

10
5 8
6
4
2
0 0

Рис. 13 Конфигурация системы спинов в момент времени t = 0

1
0
-1

10

10
5 8
6
4
2
0 0

Рис. 14 Конфигурация системы спинов в момент времени t = 100

1
0
-1

10

10
5 8
6
4
2
0 0

Рис. 15 Конфигурация системы спинов в момент времени t = 1000

171
1
0
-1

10

10
5 8
6
4
2
0 0

Рис. 16 Конфигурация системы спинов в момент времени t=2000

-1

1 2
3 4 8 9
5 6 5 6 7
7 8 3 4
9 1 2

Рис. 17 Конфигурация системы спинов в момент времени t = 0

-1

1 2
3 4 8 9
5 6 5 6 7
7 8 3 4
9 1 2

Рис. 18 Конфигурация системы спинов в момент времени t = 100

172
1

-1

1 2 9
3 4
6 78
5 6 5
7 8 3 4
9 1 2

Рис. 19 Конфигурация системы спинов в момент времени t = 1000

-1

1 2
3 4 8 9
5 6 5 6 7
7 8 3 4
9 1 2

Рис. 20 Конфигурация системы спинов в момент времени t = 2000

Рис. 21 Окно "Результаты" программы Start_Ising2

Задания

ЗАДАЧА 13. ЭНЕРГИЯ ДЕМОНА И СРЕДНЯЯ ТЕМПЕРАТУРА СИСТЕМЫ


Проверьте, что распределение энергии демона описывается функ-
цией распределения Больцмана. Сравните значение средней темпера-
туру системы, вычисленной по формуле (18), и значение температуры,
полученное из распределения Больцмана.
173
ЗАДАЧА 14. ЗАВИСИМОСТЬ РЕЗУЛЬТАТОВ ОТ РАЗМЕРНОСТИ СИСТЕМЫ
Решите задачи 6−11 для рассмотренной выше двумерной системы
спинов. Сравните полученные результаты с аналогичными результа-
тами, полученными для одномерной системы спинов.

Литература
1. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. М.:
Мир, 1990. Т. 2.
2. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. М.: Горячая линия – Телеком, 592 с., 2003.
3. Ландау Л.Д., Лифшиц Е.М. Статистическая физика. М.: Наука,
2000.
4. Кунин С. Вычислительная физика. М.: Мир, 1992.
5. Методы Монте-Карло в статистической физике / Под ред. К. Бинде-
ра, М.: Мир, 1982.
6. Биндер К., Хеерман Д.В. Моделирование методом Монте-Карло в
статистической физике. М.: Наука, 1995.

174
Содержание

Введение ..................................................................................................... 3
Литература .............................................................................................. 4
Работа 1. Решатели систем дифференциальных уравнений
в пакете MatLab.......................................................................... 7
Простой пример ...................................................................................... 7
Метод Рунге-Кутта ................................................................................. 9
Два примера (механика)....................................................................... 11
Движение заряженной частицы. Закон Кулона ............................ 11
Движение под действием сил тяжести и трения ........................... 15
Осциллятор Ван дер Поля. Жесткость системы ОДУ ....................... 19
Отображение Пуанкаре ........................................................................ 23
Задания на дифференциальные уравнения ........................................ 25
Задание 1. Движение спутника по орбите .................................. 25
Задание 2. Полет пули .................................................................. 26
Задание 3. Уравнение Ван дер Поля ........................................... 27
Задание 4. Движение заряда в кулоновском поле ..................... 27
Задание 5. Уравнения Лоренца.
Турбулентное течение и хаос ................................... 31
Задание 6. Сила Архимеда ........................................................... 27
Задание 7. Падение шарика в воду.............................................. 28
Задание 8. Задача трех тел ........................................................... 28
Задание 9. Брусок на пружине ..................................................... 29
Задание 10. Фононная лавина ...................................................... 29
Задание 11. Фазовые диаграммы и отображение Пуанкаре ..... 30
Задание 12. Модель Эно-Эйлеса и отображение Пуанкаре ...... 30
Задание 13. Хаос в нелинейном осцилляторе
с внешним периодическом полем ............................ 31
Задание 14. Численное решение ДУ (13 задач) ......................... 33
Задание 15. Сравнение аналитических и
численных решений ДУ (14 задач) .......................... 34
Приложение 1. Решатели систем обыкновенных дифференциальных
уравнений в MatLab ............................................................... 35

175
Выводы ..................................................................................... 41
Приложение 2. Решение систем дифференциальных уравнений в
символьном виде в системе MatLAB ................................... 41
Литература ............................................................................................ 42
Работа 2. Цепочка связанных гармонических осцилляторов:
свободные колебания .............................................................. 44
Введение ................................................................................................ 44
Математическая модель ....................................................................... 45
Алгоритм ............................................................................................... 49
Анализ результатов. Замечания к программной реализации ........... 55
Задание. Свободные колебания двух связанных осцилляторов
(7 задач) ................................................................................... 56
Задача 1. Формулировка .............................................................. 56
Задача 2. Другие параметры для Задачи 1. Зависимость
частот от жесткости................................................... 57
Задача 3. Зависимость энергии и частот от параметров. I ........ 57
Задача 4. Зависимость энергии и частот от параметров. II ....... 57
Задача 5. Зависимость частот от массы тел................................ 58
Задача 6. Обратная задача............................................................ 58
Задача 7. Биения ........................................................................... 58
Выводы по заданию...................................................................... 59
Задание. Свободные колебания трех связанных осцилляторов ....... 59
Задача 8. Формулировка .............................................................. 59
Задача 9. Три набора параметров для Задачи 8.......................... 59
Задание. Колебания N связанных осцилляторов (N ≥ 10) ................. 60
Задача 10. Сравнение решений. Фазовая скорость .................... 60
Задача 11. Исследование «большой» системы. I ....................... 60
Задача 12. Исследование «большой» системы. II ...................... 61
Литература ............................................................................................ 62
Работа 3. Цепочка связанных гармонических осцилляторов:
вынужденные колебания ......................................................... 63
Введение ................................................................................................ 63
Математическая модель и алгоритм ................................................... 63
Устойчивость метода ........................................................................... 67
Задание. Сравнение решений .............................................................. 70
176
Задача 1. Свободные колебания .................................................. 70
Задача 2. Исследование вынужденных колебаний .................... 71
Выводы по решению задачи 2. .................................................... 71
Задание. Варианты ............................................................................... 72
Задача 3. Вариант I ....................................................................... 72
Задача 4. Вариант II ...................................................................... 72
Задание. Системы с различающимися параметрами ......................... 72
Задача 5. Различия в массах тел .................................................. 72
Задача 6. Различия в жесткости пружин..................................... 72
Литература ............................................................................................ 72
Работа 4. Волновые пакеты, движущихся в среде с дисперсией:
Фурье-анализ ............................................................................ 74
Введение ................................................................................................ 74
Математическая модель ....................................................................... 74
Алгоритм ............................................................................................... 76
Комментарии для составления программы. ....................................... 77
Анализ результатов .............................................................................. 81
Задания ................................................................................................. 82
Задача 1. Формулировка исследований ...................................... 82
Задача 2. Проверка закона сохранения ....................................... 82
Задача 3. Ширина волнового пакета ........................................... 83
Задача 4. Волновой пакет с прямоугольной огибающей .......... 83
Задача 5. Волновой пакет с треугольной огибающей ............... 83
Задача 6. Два прямоугольных импульса..................................... 83
Движение волновых пакетов, локализованных во времени ........ 84
Комментарии к составлению программы. .................................. 86
Анализ результатов ......................................................................... 88
Задания ..................................................................................... 90
Задача 7. Формулировка исследований ...................................... 90
Задача 8. Энергия волнового пакета ........................................... 90
Задача 9. Ширина волнового пакета ........................................... 90
Задача 9. Волновой пакет с прямоугольной огибающей .......... 91
Задача 10. Волновой пакет с треугольной огибающей ............. 91
Задача 11. Два импульса, разнесенные во времени ................... 91

177
Задача 12. Распространение волн на поверхности воды ........... 91
Приложение 1. Нахождение корней функции............................... 92
Приложение 2. Создание простого интерфейса ввода-вывода .... 93
Литература ............................................................................................ 94
Работа 5. Стационарное уравнение Шредингера: моделирование
квантовых систем .................................................................... 95
Введение ................................................................................................ 95
Квантовые системы .............................................................................. 95
Стационарное уравнение Шредингера ............................................... 97
Алгоритм для нахождения собственных функций и собственных
значений ................................................................... 101
Листинг файла Num.m ............................................................... 102
Листинг файла U.m..................................................................... 104
Листинг файла Elevel.m ............................................................. 105
Задания ............................................................................................... 110
Задача 1. Ортогональность собственных функций.................. 110
Задача 2. Бесконечная прямоугольная яма (сравнение
численных и аналитических решений) .................. 110
Задача 3. Вычисление средних значений ................................. 111
Задача 4. Влияние малого возмущения .................................... 111
Задача 5. Прямоугольная потенциальная яма конечной глубины
................................................................................... 112
Задача 6. Гармонический осциллятор....................................... 112
Задача 7. Ангармонический осциллятор .................................. 113
Задача 8. Линейный потенциал ................................................. 113
Дополнительные задания ................................................................... 113
Задача 9. Теория возмущений (вариационный метод Ритца) . 113
Задача 10. Средняя величина компоненты спина Sz от
температуры для простой кубической решетки
(квантовая статистика) ............................................ 114
Задача 11. Вычисление плотности одноэлектронных состояний
(квантовая статистика) ............................................ 115
Вариационный метод решения уравнений Шредингера................. 115
Задача 12. Вариационный метод Монте-Карло ....................... 121
Литература .......................................................................................... 122
178
Работа 6. Моделирование случайных систем ...................................... 123
Введение .............................................................................................. 123
Случайные системы ........................................................................... 123
Случайные шаги (random walk) ......................................................... 124
Движение без пересечений (SAW) ................................................... 126
Симуляция роста кластеров, фрактальная размерность объектов . 128
Задания 131
Задача 1. Процедура случайных шагов .................................... 131
Задача 2. Процедура случайных шагов без пересечения ........ 131
Задача 3. DLA кластер................................................................ 132
Задача 4. Фрактальная размерность. Кривая Коха .................. 132
Задача 5. Перколяция ................................................................. 134
Литература .......................................................................................... 136
Работа 7. Метод Монте-Карло для статистических систем.
Модель Изинга. ...................................................................... 137
Введение .............................................................................................. 137
Микроканонический ансамбль .......................................................... 137
Моделирование микроканонического ансамбля ............................. 139
Алгоритм Монте-Карло для микроканонического ансамбля .... 139
Листинг файла InitD.m ............................................................... 140
Листинг файла Demon.m ............................................................ 141
Листинг файла Start_Demon.m .................................................. 142
Задания 144
Задача 1. Исследование системы .............................................. 144
Задача 2. Последовательный выбор частиц ............................. 144
Задача 3. Температура и энергия демона ................................. 144
Моделирование канонического ансамбля методом
Монте-Карло ............................................................ 145
листинг файла DemonE.m .......................................................... 146
Анализ моделирования идеального газа ...................................... 150
Задания ................................................................................... 151
Задача 4. Точность определения температуры ........................ 151
Задача 5. Двумерный и трехмерный газ ................................... 151
Модель Изинга.................................................................................... 151

179
Основные положения .................................................................... 151
Задания ................................................................................... 155
Задача 6. Сравнение аналитических и численных результатов
................................................................................... 155
Моделирование одномерной модели Изинга .............................. 155
Листинг файла Ising.m ............................................................... 156
Задания ................................................................................... 162
Задача 7. Время релаксации....................................................... 162
Задача 8. Равновесные значения параметров ........................... 162
Задача 9. Случайные флуктуации ............................................. 162
Задача 10. Средняя энергия ....................................................... 163
Задача 11. Средняя намагниченность ....................................... 163
Задача 12. Вычисления в магнитном поле ............................... 163
Двумерная система спинов ........................................................... 163
Алгоритм моделирования двумерной системы ....................... 165
Листинг файла Ising2.m ............................................................. 165
Листинг Start_Ising2.m ............................................................... 167
Задания ................................................................................... 173
Задача 13. Энергия демона и средняя температура системы.. 173
Задача 14. Зависимость результатов от размерности
системы .................................................................... 174
Литература .......................................................................................... 174
Содержание.............................................................................................. 175

180

Вам также может понравиться