Академический Документы
Профессиональный Документы
Культура Документы
УНИВЕРСИТЕТ
ФИЗИЧЕСКИЙ ФАКУЛЬТЕТ
ВЫЧИСЛИТЕЛЬНАЯ ФИЗИКА
(Практический курс)
Казань 2009
УДК 519.63
Авторы-составители
доктор физ. мат. наук, проф. Ю.Н. Прошин,
канд. физ. мат. наук И.М. Еремин
Научный редактор
доктор физ.-мат. наук, проф. Прошин Ю.Н.
Рецензент
доктор физ.-мат. наук, проф. Сушков С.В. (ТГГПУ)
© Казанский государственный
университет, 2009
2
Введение
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.
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
Два примера (механика)
⎩⎪
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
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
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
⎨ . (8)
k
⎪V = − g − V V + V 2 2
⎪⎩ y m
y x y
⎪ x (t ) = x0 + ∫ Vx (τ )dτ
⎪ t0
⎨ t
. (9)
⎪ y (t ) = y + V (τ )dτ
⎪ 0 ∫ y
⎩ t0
⎪ xi = x0 + ∑ Vxk (tk − tk −1 )
⎪ k =2
⎨ i
. (10)
⎪ y = y + V (t − t )
⎪⎩ i 0 ∑
k =2
yk k k −1
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
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).
dt 2
− μ (1 − x ) dt + x = 0 , (12)
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
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
-3
линейного слагаемого, время 0 20 40
t
60 80 100
tspan=[0,100]; mu=10 2
1
ode45 =>0.450 sec.
solution x
0
ode15s => 1.07 sec. -1
При росте параметра μ до 10 -2
21
3
van der Pol Equation, μ = 175 tspan =[0,2000];
2 mu = 175
1 ode45 => 190.4 sec.
solution x
-2
Система становится все более
-3
жесткой: период, по сравнению
0 500 1000
t
1500 2000
с предыдущим случаем, увели-
3
van der Pol Equation, μ = 1000 чился больше чем на порядок
2
(обратите внимание, что вре-
1 менной диапазон увеличился в
solution 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. Если, помимо интеграла энергии, су-
24
Задания на дифференциальные уравнения
где 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
28
1.9×1027 кг и 6.0×1024 кг соответственно, а средний радиус орбиты
Юпитера равен 5.2 а.е.
Следите за сохранением интегралов движения – полной энергии и
момента импульса.
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 – раз-
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].
32
уравнение второго порядка как систему уравнений первого порядка,
введя угловую скорость ω).
(а) Рассмотрите сначала ситуацию FD = 0 и исследуйте результат. За-
тем, делая FD ненулевым, пронаблюдайте в какой момент частота
осцилляций определяется частотой собственных колебаний и как
она переходит в частоту наведённых колебаний, ΩD. Увеличивая
FD, вы обнаружите, что поведение осциллятора перестанет быть
периодичным в какой-то момент. Объясните, почему поведение
системы, описываемой ОДУ, перестаёт быть предсказуемым. Для
этого исследуйте, как меняется решение, если вы слегка измените
начальные условия (θ1(0) и θ2(0)), покажите, как меняется |θ1-θ2|
на каждом шаге решения. Сравните эту ситуацию с периодиче-
ским решением. Введите величину
log ( Δθ ) ∼ λ t ,
и найдите постоянную Ляпунова, λ, для различных значений FD
при периодическом и хаотическом решениях. Как эта постоянная
зависит от характера движения?
(б) Покажите, что поведение угловой скорости ω также хаотично.
Рассмотрите также поведение θ(ω) для периодического и хаотиче-
ского решения для временных отрезков Пуанкаре ΩDt = 2nπ, где
n – целое число и проанализируйте полученные результаты.
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.
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
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 имеет очень небольшое число параметров, но при
работе с ним можно вводить не только матрицу Якоби интегрируемой
функции, но и матрицу Якоби, содержащую частные производные
функции граничных условий по границам интервала и по неизвестным
параметрам.
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)
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 - ½
Литература
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), со-
стоящие из конечного или бесконечного числа связанных осциллято-
ров, оказались весьма эффективными и в настоящее время использу-
ются в различных областях физики: физике твердого тела, физике
сплошных сред, химической физике, радиофизике и др. Используя мо-
дели линейных цепочек, оказывается возможным естественным обра-
зом осуществить переход к волновым процессам и ввести такие поня-
тия как длина волны, групповая скорость, фазовая скорость, дисперсия
и др.
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
45
Необходимым и достаточным условием существования решения
системы уравнений (4) является равенство нулю определителя матри-
цы B
ω ij2 − ω 2
= 0. (6)
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 ⎠
⎛ C0 cos(ϕ 0 ) ⎞
⎜ ⎟
C =⎜ ⎟, (16)
⎜ C cos(ϕ )⎟
⎝ N −1 N −1 ⎠
⎛ C0 sin (ϕ 0 ) ⎞
⎜ ⎟
Cv = ⎜ ⎟, (17)
⎜ C sin (ϕ )⎟
⎝ N −1 N −1 ⎠
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
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
-1
-2
-3
-4
0 10 20 30 40 50 60 70 80
53
4
-1
-2
-3
-4
-4 -3 -2 -1 0 1 2 3 4
-1
-2
-3
-4
-4 -3 -2 -1 0 1 2 3 4
-1
-2
-3
-4
-4 -3 -2 -1 0 1 2 3 4
54
2
10
0
10
-2
10
ЗАДАЧА 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 ),
ЗАДАЧА 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 ) ,
ВЫВОДЫ ПО ЗАДАНИЮ
Решив задачи 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 }, с ненулевыми начальными условиями. Опишите зави-
симость смещения частиц от времени.
59
Задание. Колебания N связанных осцилляторов (N ≥ 10)
3
В пакете MATLAB для нахождения наклона линии регрессии в смысле наименьших
квадратов необходимо выполнить следующую последовательность команд:
% задание исходных данных
60
линии регрессии.)
3) Для того, чтобы убедиться в независимости вашей оценки скоро-
сти распространения возмущений от N, повторите расчеты для
бóльших значений N.
4) Проведите исследование и определите зависимость скорости рас-
пространения возмущения от массы тел, образующих колебатель-
ную систему, и жесткости пружин.
5) Сравните численные решения для свободных колебаний при
больших N ≥ 10 в данной работе и в "Работа 3. Цепочка связанных
гармонических осцилляторов: вынужденные колебания". Рас-
смотреть случаи
– все массы и пружинки одинаковы,
– все пружинки одинаковы, а четные и нечетные частицы имеют
различные массы (появление "акустической" и "оптической
ветви".
5) Рассмотрите «неупорядоченную» систему при помощи приписы-
вания телам колебательной системы различных масс (например, с
помощью генератора случайных чисел). Как влияет беспорядок на
скорость распространения возмущения?
6) Рассмотрите «неупорядоченную» систему при помощи приписы-
вания пружинам колебательной системы различных жесткостей
(например, с помощью генератора случайных чисел). Как влияет
беспорядок на скорость распространения возмущения?
Литература
1. Коткин Г.Л., Сербо В.Г. Сборник задач по классической механике.
М.: Наука, 1977.
2. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. Т. 1-
2, 1990, М.: Мир.
3. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. – М.: Горячая линия – Телеком, 592 с., 2003.
4. Ландау Л.Д., Лифшиц Е.М. Механика. М.: Наука, 2000.
5. Крауфорд Ф. Волны. М.: Наука, 1974.
62
Работа 3. Цепочка связанных гармонических осцилля-
торов: вынужденные колебания
Введение
Рассмотрим движения движение цепочки связанных гармониче-
ских осцилляторов (рис. 1) под действием вынуждающей силы. Про-
водимое рассмотрение ограничим случаем, когда сила приложена к
точке А колебательной системы, что для достаточно длинных цепочек
не приводит, к потере общности получаемых результатов.
function f=F(t,A,Omega)
% функция, описывающая внешнюю вынуждающую силу
f=A*sin(Omega*t);
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 0 0 0
0 0 0 0
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
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
0.2498
0.2496
0.2494
0.2492
0.249
0.2488
0.2486
0.2484
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);
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) Исследуйте зависимость скорости распространения возмущения в
линейной системе от жесткости пружин.
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 }.
Литература
1. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. М.:
Мир, 1990. С. 220.
72
2. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. – М.: Горячая линия – Телеком, 592 с. , 2003.
3. Ландау Л.Д., Лифшиц Е.М. Механика. М.: Наука, 2000.
4. Коткин Г.Л., Сербо В.Г. Сборник задач по классической механике.
М.: Наука, 1977.
73
Работа 4. Волновые пакеты, движущихся в среде с дис-
персией: Фурье-анализ
Введение
При составлении лабораторной работы использованы материалы и
алгоритмы, изложенные в книгах [1,2].
Математическая модель
Как известно, функция, описывающая гармоническую волну, рас-
пространяющуюся в бездисперсионной среде, записывается в виде
u ( x, t ) = A cos( kx − ω t ) , (1)
ϕ ( x, t ) = ω t − kx . (2)
74
vf − фазовая скорость волны.
Выражение (4) дает связь между фазовой скоростью волны, часто-
той волны и волновым вектором. Вообще говоря, условия распростра-
нения волны определяются свойствами среды. При этом ω , а, следова-
тельно, и фазовая скорость, могут зависеть от волнового вектора k.
Волны, у которых фазовая скорость зависит от волнового вектора на-
зываются диспергирующими. В противном случае волны называются
недиспергирующими. Диспергирующая волна, представляющая собой
суперпозицию бегущих волн с различными волновыми числами, будет
менять свою форму по мере распространения в пространстве, так как
составляющие с различными длинами волн распространяются с раз-
личными скоростями.
Продемонстрируем влияние дисперсии на распространение волн
на примере задачи о движении волнового пакета в среде с дисперсией,
под которым мы будем понимать некоторую синусоидальную волну,
имеющую конечную протяженность в пространстве или во времени.
Решение данной задачи основано на представлении волнового пакета в
виде суперпозиции гармонических функций (метод Фурье) [3].
Рассмотрим задачу об описании движения волнового пакета, ло-
кализованного в момент времени t = 0 в пространстве. Данное условие
означает, что огибающая пакета является функций достаточно быстро
стремящейся к нулю при x → ±∞ . Введем обозначение
f ( x ) = u( x,0) . (5)
где
∞
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
2π
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
Напишем программу.
%% 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
0.8
0.6
0.4
0.2
0
-50 0 50 100 150 200
x
80
90
80
70
60
50
40
30
20
10
0
0 1 2 3 4 5 6 7 8
k
1
t=0
t=50
0.8 t=90
0.6
0.4
0.2
0
-50 0 50 100 150 200
x
Анализ результатов
∑ u ( ti , xn ) = const
2
(13)
n =0
Задания
82
ЗАДАЧА 3. ШИРИНА ВОЛНОВОГО ПАКЕТА
Дополните описанный выше документ фрагментом, позволяющим
определять ширину волнового пакета Δu при заданном значении его
огибающей.
а) Используя описанный выше документ, оцените закон изменения
ширины волнового пакета во времени ( Δu )t .
б) Сравните полученный результат с известной оценочной форму-
лой, приведенной в [1],
( Δu )t = ( Δu )0 + Δv pt , (15)
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
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
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
0.8
0.6
0.4
0.2
0
0 50 100 150 200 250 300
t
Анализ результатов
Анализ результатов, представленных на рис. 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
ω
1
x=0
x=50
0.8 x=150
0.6
0.4
0.2
0
0 50 100 150 200 250 300
t
89
Задания
90
лой, приведенной в [1],
( Δ u ) t = ( Δ u ) 0 + Δω t , (28)
Литература
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)
∫ ψ ( r , t )ψ ( r , t ) d r = 1 ,
∗ 3
(2)
−∞
95
Каждой физической классической характеристике частицы (на-
пример, координате, скорости, импульсу, моменту импульса, энергии
и др.) ставится в соответствие некоторый оператор. Наблюдаемое зна-
чение величины A есть среднее значение соответствующего оператора Â
A = ∫ψ ∗ ( r , t )Aˆψ ( r , t ) d 3 r . (4)
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)
∫ ϕ ( x )ϕ ( x ) dx = δ
∗
n n′ nn ′ . (12)
−∞
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)
dψ + dψ −
= . (17)
dx x = xm dx x = xm
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
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;
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, соответственно)
0.5
-0.5 1
-1 2
3
-1.5
-0.5 0 0.5
x
109
1.5
0.5
-0.5 4
-1 5
6
-1.5
-0.5 0 0.5
x
Задания
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), получите выражения для безразмерных значений энергии и
собственных функций. Сравните численные значения энергий и вол-
новых функций с соответствующими значениями, вычисляемыми по
аналитическим выражениям. Оцените точность численных значений
энергии и волновых функций. Почему точность зависит от номера соб-
ственного значения энергии?
∫ψ ( x )ψ ( x ) dx
0
b
∫ψ ( x ) dx
2
Дополнительные задания
€ p€x2 mω 2 x 2
где Η = + , используя пробные функции:
2m 2
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 π
3α
г) ϑ ( 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).
114
Используя переход от суммирования по волновому вектору k к
интегрированию
π /a π /a π /a
1 V
∑ ... ⇒ 3 ∫ ∫ ∫ ...dk x dk y dk z , (*)
N k ( ) −π / a − π / a −π / a
2π
∫ ϕ H ϕ dr ,
*
E* =
∫ ϕ ϕ dr
*
116
вариационную функцию ϕn0 = const на отрезке x = nΔx. Константа оп-
ределится из условия нормировки волновой функции
2
∫ ϕ dx = 1.
0
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
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
Литература
1. Ландау Л.Д., Лифшиц Е.М. Квантовая механика. Нерелятивистская
теория. М.: Наука, 2001.
2. Гулд Х., Тобочник Я. Компьютерное моделирование в физике. Т.
1-2, М.: Мир, 1990.
3. Поршнев С. В. Компьютерное моделирование физических процес-
сов в пакете MatLab. М.: Горячая линия – Телеком, 592 с. , 2003.
4. Флюгге З. Задачи по квантовой механике. Т. 1. М.: Мир, 1974.
5. Учебные задания по квантовой механике. Под ред. Кочелаева Б.И.
КГУ, каф. теор. физики, Казань, 1990, 38 с.
6. Деминов Р.Г., Сайкин С.К., Прошин Ю.Н. Вычислительные методы
в теоретической физике. 2000, Казань: КГУ.
122
Работа 6. Моделирование случайных систем
Введение
При составлении лабораторной работы использованы материалы и
алгоритмы, изложенные в книгах [1-3].
Случайные системы
Системы, которые мы до сих пор исследовали, были в основном
детерминистскими. Особенность этих систем заключается в том, что
их эволюция определяется набором ОДУ с определёнными начальны-
ми условиями. Решение этих уравнений даёт нам описание физической
системы для любого момента времени и, в этом смысле, полностью
предсказуемо, случайность практически не играет значения (хотя ме-
тоды их решения могут и не быть полностью детерминисткими, см.,
например, вариационный метод Монте-Карло, кратко рассмотренный в
последнем задании предыдущего раздела). Сейчас нас будут интересо-
вать именно случайные или стохастические процессы в системах, в ко-
торых случайность того или иного события играет определяющую
роль. Случайность может возникнуть по целому ряду причин. Напри-
мер, может оказаться, что мы не знаем (или не можем узнать) началь-
ные условия (положение координат и начальные скорости) для всех
частиц в системе. Или же наша система взаимодействует с термодина-
мическим резервуаром по какому-то сложному закону, и всё, что мы
знаем, – это только вероятность того или иного события. Чаще всего
речь идёт о системах с большим числом степеней свободы, которые
возникают при описании какого-либо макроскопического объекта, на-
пример, газа, жидкости или ансамбля спинов в магнетике.
Одна из таких типичных проблем – это диффузия или броуновское
движение. Рассмотрим распространение капли молока в чашке с кофе.
Вопрос, который мы зададим, очень прост: если в обычной чашке рас-
пространение молока от центра чашки до стенок длится, скажем, 20
секунд, то сколько времени займет такое движение для чашки с радиу-
сом в два раза больше? Решение ОДУ для всех "молекул" молока (час-
тиц) с начальными условиями даст нам положение каждой частицы в
любой момент времени и её скорости, но не поможет ответить на по-
123
ставленный вопрос. Поэтому мы обращаемся к статистическому опи-
санию, которое заменяет детерминистское описание стохастическим.
Так как число шагов – это не что иное, как время, мы видим, что пове-
дение частицы со случайным выбором шага сильно отличается от по-
ведения свободно движущейся частицы. Если для свободно движу-
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 . Это даёт нам дополнительную ин-
формацию о стохастическом движении, а именно, расстояние между
двумя отдельными частицами при диффузии также увеличивается со
временем. Здесь мы рассмотрели самый простой пример диффузион-
ного движения, есть множество способов его усложнить и теснее свя-
зать с реальностью. Примеры предлагаются в задачах ниже.
(a) (b)
Рис. 3 Два варианта развития движения без самопересечения (SAW) в
двумерном случае.
127
ждом новом шаге SAW будем выбирать шаги только из возможно дос-
тупных, то вероятность 4-го шага в случае (а) будет 2/3 от вероятности
шага в случае (b). Т.е. данные две конфигурации не будут статистиче-
скими равновероятными в таком случае. Для исправления ситуации
лучше сохранять равновероятность каждого нового шага (1/4 в дву-
мерном варианте) и прекращать реализацию SAW в том случае, если
новый шаг приведёт к самопересечению. Только в этом случае полу-
ченный статистический ансамбль из множества SAW будет правиль-
ным. Одна из задач в этой главе предлагает сравнить свойства SAW в
двух- и трёхмерном вариантах. В частности, особенность SAW заклю-
чается в том, что распространение частиц происходит быстрее, чем
при диффузном движении. В двумерном случае корень из среднего
квадратичного отклонения r 2 ~ t1.5 , т.е. что-то среднее между сво-
бодно движущейся и диффундирующей частицами.
130
дет увеличиваться как r 2 , где 2 – это и есть размерность объекта. Для
линейного объекта масса определится как
m ( r ) = 2λ r ,
где λ – это масса на единицу длины. Теперь масса при увеличении
длины r будет меняться также линейно, т.е. также как и размерность
объекта. Поэтому введём "размерность" нашего кластера как
d
m( r ) ~ r f ,
где df – это эффективная или фрактальная размерность объекта. Те-
перь ваша задача состоит в нахождении размерности наших кластеров
Эдена и DLA. Предполагая, что все частицы имеют одну и ту же мас-
су, найти фрактальную массу кластера как функцию расстояния от на-
чала координат. Рекомендуется использовать логарифмическую шкалу
log m ~ d f log r , тогда наклон полученной прямой в двойном логариф-
мическом масштабе (log-log) и даст искомую размерность.
Другие примеры случайного движения рассмотрим в задачах.
Задания
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.
ЗАДАЧА 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');
Литература
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, в противном случае
137
Для определения средних значений физических величин, характе-
ризующих макроскопическую систему, можно использовать два спо-
соба. В первом способе измеряют физические величины в течение дос-
таточно большого промежутка времени, в течение которого система
успевает побывать в большом числе достижимых микросостояний, и
проводят последующее усреднение. С точки зрения проведенного ус-
реднения во времени, вероятность Ps есть доля времени, которую сис-
тема за время наблюдений находится в данном микроскопическом со-
стоянии s.
Несмотря на очевидный физический смысл средних по времени, в
статистической физике вводят понятие статистических средних в дан-
ный момент времени, которые вычисляются по ансамблю микросо-
стояний, соответствующих заданному макросостоянию. (Гипотеза о
совпадении средних значений величин, вычисляемых усреднением по
времени и усреднением по ансамблю реализаций, называется эргоди-
ческой гипотезой). Полное число систем в ансамбле равно числу воз-
можных микросостояний. Вероятность обнаружить в ансамбле тожде-
ственных систем s-ую реализацию, определяется выражением (1). Ан-
самбль систем, характеризуемый величинами E, T, V, и описываемый
распределением вероятностей вида (1), называется микроканониче-
ским ансамблем.
Будем считать, что система характеризуется некоторой величиной
A, значение которой в s-ом состоянии равно As . Тогда среднее значе-
ние A по ансамблю определяется как взвешенное среднее
A = ∑ As Ps . (2)
s
138
Моделирование микроканонического ансамбля
Общая идея метода Монте-Карло для микроканонического ан-
самбля состоит в получении репрезентативной выборки из полного
числа микросостояний и оценке с ее использование значения вероят-
ности Ps . Для этого можно использовать достаточно очевидную про-
цедуру: зафиксировать полное число частиц N и объем системы V, из-
менять случайным образом координаты и скорости отдельных частиц,
принимать конфигурации микросостояний, имеющих заданную пол-
ную энергию. К сожалению, данная процедура оказывается весьма не-
эффективной, так как большинство конфигураций вообще не будут
иметь требуемую полную энергию и должны быть отвергнуты.
140
в момент
% времени t = 0
% N - число частиц системы
% Esystem - энергия системы
V=sqrt(2*Esystem/N); z=V*ones(size(1:N));
141
end;
Edave=Edcum/(NTrial*N);
Accept=Accept/(NTrial*N);
Esysave=1/N*Escum/(NTrial*N);
Vave=1/N*Vcum/(NTrial*N);
143
Результаты - усредненные по ансамблю реализаций значения:
- энергии демона (Edave) =>1.9057
- средней энергии системы на одну частицу (Esysave) =>0.95236
- средней скорости на одну частицу системы (Vave) =>-0.0074738
- среднего числа принятия (Accept) =>0.6285
Задания
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; % число испытаний
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
3000
2500
2000
1500
1000
500
0
0 2 4 6 8 10 12 14 16 18
149
Анализ моделирования идеального газа
150
E
−
Ed =
∫ Ee T
dE
=T . (7)
E
−
∫e T
dE
Задания
Модель Изинга
Основные положения
Одной из простейших моделей, используемых в статистической
физике для моделирования фазовых переходов в магнитных веществах
или бинарных составах, является модель Изинга. Данная модель отно-
сится к широкому классу решеточных моделей, в которых рассматри-
ваются локальные взаимодействия, то есть взаимодействия между
ближайшими узлами решетки. В магнитных системах локальные взаи-
модействия обусловлены спинами, расположенными в узлах решетки.
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
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
153
Ed
−
Ed =
∑E e d
T
, (11)
Ed
−
∑e T
Ed ∑( x ⋅ n)e − n⋅ x
= n =0
∞
. (12)
T
∑e
n =0
− n⋅ x
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)
Задания
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
150
100
50
0
0 200 400 600 800 1000 1200
2.5
1.5
0.5
0
0 50 100 150 200
161
Задания
162
ЗАДАЧА 10. СРЕДНЯЯ ЭНЕРГИЯ
164
АЛГОРИТМ МОДЕЛИРОВАНИЯ ДВУМЕРНОЙ СИСТЕМЫ
Алгоритм моделирования двумерной системы, состоящей из N
спинов, методом Монте-Карло реализуется следующей последова-
тельностью действий:
1. Задание числа спинов решетки Nspin .
2. Задание числа шагов метода Монте-Карло на спин.
3. Задание ориентации спинов в узлах квадратной решетки в момент
времени t = 0 (начальной конфигурации системы).
4. Выбор случайным образом одного из спинов системы.
5. Вычисление пробного изменения энергии.
6. Если пробное изменение приводит к уменьшению энергии систе-
мы, то система отдает энергию демону и новая конфигурация
принимается.
7. Если пробное изменение увеличивает энергию системы, то новая
конфигурация принимается в том случае, если демон имеет доста-
точную энергию для передачи ее системе.
8. Если пробное изменение не меняет энергию системы, то принима-
ется новая конфигурация.
9. Повторение пп. 4−8 (число повторений равно числу спинов в сис-
теме).
10. Повторение пп. 4−9 (число повторений равно числу шагов метода
Монте-Карло на спин).
Для реализации описанного алгоритма моделирования двумерной
системы спинов методом Монте-Карло в пакете MatLab создадим файл
Ising2.m, содержащий описание функции, возвращающей мгновенные
значения: энергии системы, энергии демона, намагниченности, числа
принятия решений, а также мгновенные конфигурации спинов.
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,'Результаты');
-20
-30
-40
-50
-60
-70
-80
-90
0 500 1000 1500 2000
60
50
40
30
20
10
0
0 500 1000 1500 2000
170
1
0
-1
10
10
5 8
6
4
2
0 0
1
0
-1
10
10
5 8
6
4
2
0 0
1
0
-1
10
10
5 8
6
4
2
0 0
171
1
0
-1
10
10
5 8
6
4
2
0 0
-1
1 2
3 4 8 9
5 6 5 6 7
7 8 3 4
9 1 2
-1
1 2
3 4 8 9
5 6 5 6 7
7 8 3 4
9 1 2
172
1
-1
1 2 9
3 4
6 78
5 6 5
7 8 3 4
9 1 2
-1
1 2
3 4 8 9
5 6 5 6 7
7 8 3 4
9 1 2
Задания
Литература
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