Красавин Компютерныы практикум в среде МатЛаб 2015
.pdfМинистерство образования и науки Российской Федерации
Национальный исследовательский ядерный университет «МИФИ»
А.В. Красавин, Я.В. Жумагулов
Компьютерный практикум в среде MatLab
Рекомендовано к изданию УМО «Ядерные физика и технологии»
Москва 2015
УДК [(530.145+538.9):004.41](076.5) ББК 22.314я7 К78
Красавин А. В. , Жумагулов Я. В. Компьютерный практикум в среде MatLab. Учебное пособие. М.: НИЯУ МИФИ, 2015. 280 с.
В книге рассмотрены основные приемы программирования в среде MatLab применительно к решению задач физики конденсированного состояния. Пособие может быть использовано как вводный практический курс численного моделирования квантовых физических систем. Книга снабжена большим количеством примеров, иллюстраций и упражнений.
Предназначено для студентов, специализирующихся в физике конденсированного состояния. Книга также может быть полезна студентам и аспирантам других физических специальностей, а также преподавателям и специалистам, занимающимся физикой конденсированного состояния.
Подготовлено в рамках Программы создания и развития НИЯУ МИФИ.
Рецензент д-р физ.-мат. наук, проф. В.А. Кашурников
ISBN 978-5-7262-2194-6 |
© Национальный исследовательский ядерный |
|
университет «МИФИ», 2015 |
Содержание
1. |
Знакомство с MatLab |
7 |
1.1. |
Простейшие вычисления |
7 |
1.2. |
Массивы |
9 |
1.3. |
Матрицы |
11 |
1.4. |
M-Файлы |
14 |
1.5. |
Операторы цикла |
17 |
|
Задания |
18 |
2. |
Векторы и матрицы |
20 |
2.1. |
Создание матриц |
20 |
2.2. |
Определение размеров матриц |
22 |
2.3. |
Обращение к элементам матрицы |
23 |
2.4. |
Поэлементные операции с матрицами |
24 |
2.5. |
Функции для работы с матрицами и векторами |
26 |
2.6. |
Фильтрация и логическое индексирование |
28 |
|
Задания |
30 |
3. |
Операторы ветвления |
32 |
3.1. |
If |
32 |
3.2. |
If-else, elseif |
33 |
|
Задания |
37 |
4. |
Циклы |
39 |
4.1. |
For |
39 |
4.2. |
While |
41 |
4.3. |
Конвертация цикла for в цикл while |
43 |
4.4. |
Вложенные циклы |
43 |
4.5. |
Эффективность |
46 |
4.6. |
Отладка |
47 |
|
Задания |
48 |
5. |
2D-Графики |
50 |
5.1. |
Простой график |
50 |
5.2. |
График с погрешностями |
52 |
5.3. |
Несколько графиков на одном рисунке |
54 |
5.4. |
График с двумя разными вертикальными осями |
56 |
5.5. |
Создание врезки на графике |
58 |
|
3 |
|
6. |
3D-Графики |
60 |
6.1. |
Гистограммы |
60 |
6.2. |
Линейные графики в 3D |
61 |
6.3. |
Поверхности |
64 |
6.4. |
Разные примеры |
69 |
7. |
Сортировка и поиск |
75 |
7.1. |
Базисные состояния и матрицы |
75 |
7.2. |
Сортировка вставками |
79 |
7.3. |
Сортировка выбором |
80 |
7.4. |
Сортировка обменами |
81 |
7.5. |
Оптимизированный метод |
82 |
|
Задания |
84 |
8. |
Работа с файлами |
86 |
8.1. |
Запись информации в файл |
86 |
8.2. |
Чтение информации из файла |
88 |
8.3. |
Функции низкоуровневого общения с файловой системой |
88 |
8.4. |
Mat-Файлы |
100 |
9. |
Работа со строками |
102 |
9.1. |
Простые способы создания строк |
102 |
9.2. |
Представление строк в виде векторов |
103 |
9.3. |
Функции работы со строками |
105 |
9.4. |
Создание строк при помощи встроенных функций |
107 |
9.5. |
Удаление пробелов |
110 |
9.6. |
Изменение регистра |
111 |
9.7. |
Сравнение строк |
111 |
9.8. |
Поиск, замена и разделение строк |
113 |
9.9. |
Интерпретирование строки. Функция eval |
116 |
9.10. |
Функции определения строк |
117 |
9.11. |
Преобразование междустроками и типами чисел |
118 |
|
Задания |
119 |
10. |
Функции |
121 |
10.1. |
Функции, возвращающие несколько переменных |
121 |
10.2. |
Функции, не возвращающие переменные |
124 |
10.3. |
Анонимные функции |
126 |
10.4. |
Использование дескриптора функции |
127 |
10.5. |
Переменное число аргументов |
130 |
|
Задания |
132 |
|
4 |
|
11. |
Массивы ячеек |
133 |
11.1. |
Создание массива ячеек |
133 |
11.2. |
Отображение и вызов элементов и атрибутов ячеек |
134 |
11.3. |
Хранение строк в массиве ячеек |
138 |
|
Задания |
139 |
12. |
Структуры |
141 |
12.1. |
Создание структур |
141 |
12.2. |
Использование структур в качестве аргументов функции |
143 |
12.3. |
Векторы структур |
144 |
|
Задание |
148 |
13. |
Фитирование и интерполяция |
149 |
13.1. |
Полиномы |
149 |
13.2. |
Аппроксимация методом наименьших квадратов |
153 |
13.3. |
Сплайны |
155 |
14. |
Частица в потенциальной яме. Численное решение |
157 |
|
уравнения Шредингера |
|
14.1. |
Уравнение Шредингера |
157 |
14.2. |
Бесконечная потенциальная яма |
159 |
14.3. |
Конечная потенциальная яма |
164 |
|
Задания |
171 |
15. |
Атом водорода |
172 |
16. |
Случайные распределения |
184 |
16.1. |
Метод обратной функции |
184 |
16.2. |
Метод Неймана |
189 |
|
Задания |
192 |
17. |
Расчет интегралов методом Монте-Карло |
193 |
|
Задания |
199 |
18. |
Алгоритм Метрополиса |
200 |
18.1. |
Марковская цепь. Понятие эргодичности |
200 |
18.2. |
Принцип детального равновесия |
203 |
18.3. |
Одномерный вариант алгоритма Метрополиса |
207 |
|
Задания |
212 |
19. |
Фурье-преобразование |
213 |
|
5 |
|
20. |
Разреженные матрицы |
226 |
20.1. |
Схема хранения |
226 |
20.2. |
Создание разреженных матриц |
227 |
20.3. |
Операции с разреженными матрицами |
230 |
|
Задание |
234 |
21. |
Фракталы. Рекурсия |
235 |
21.1. |
Рекурсивные функции |
235 |
21.2. |
Ковер Серпинского |
237 |
21.3. |
Губка Менгера |
240 |
|
Задания |
244 |
22. |
L-Системы |
245 |
|
Задания |
251 |
23. |
Параллельные вычисления |
255 |
23.1. |
Математическая основа параллельных вычислений |
255 |
23.2. |
Parallel Computing Toolbox |
257 |
23.3. |
Параллельный цикл for |
257 |
23.4. |
spmd |
260 |
23.5. |
Параллельные вычисления с pmode |
260 |
|
Задания |
266 |
24. |
Решетки |
267 |
Список литературы и интернет-ресурсов |
277 |
6
1
Знакомство с MatLab
1.1.Простейшие вычисления
Вэтой главе и далее в книге текст, набранный машинописным шрифтом, означает команды MatLab, которые можно вводить непосредственно в командном окне.
demo обзор возможностей MatLab
Справочная информация о любой функции вызывается командой: help <имя функции>
Операторы
+ – сложение;
– – вычитание; * – умножение;
/– деление;
^– возведение в степень;
.' – транспонирование матрицы;
'– транспонирование с комплексным сопряжением.
Функции
abs – модуль;
sqrt – квадратный корень; log – натуральный логарифм; sin – синус;
cos – косинус; tan – тангенс;
sinh – гиперболический синус;
fix – округление до ближайшего целого по направлению к нулю;
mod(x,y) – остаток от деления на .
7
Справка об элементарных функциях: help elfun Справка о специальных функциях: help specfun Справка о матричных функциях: help elmat
Полезные константы
pi – число пи;
i– мнимая единица;
j– мнимая единица;
eps – относительная точность вычислений с плавающей запятой;
realmin – наименьшее число с плавающей запятой, 2–1022; realmax – наибольшее число с плавающей запятой, (2 - eps)21023; Inf – бесконечность (1/0 = Inf);
NaN – not a number («не число»), например, 0/0 = NaN.
Пример 1.1. Вычислить выражение:
. |
ln11.3 |
. |
sin 2.45π |
cos 3.78π |
. |
|
|
tg 3.3 |
Решение. exp(-2.5)*log(11.3)^0.3-sqrt((sin(2.45*pi)+cos(3.78*pi))...
/tan(3.3))
Результат: ans = -3.2105
Троеточие «...» – символ продолжения строки; по умолчанию результат вычислений заносится в переменную с именем ans.
Переменные
Переменные образуются при помощи оператора присваивания «=», например:
w = 3.54;
Строчные и прописные буквы различаются, например переменные t1 и T1 будут двумя разными переменными. Точка с запятой в конце строки используется для подавления вывода
8
результата вычислений на экран. Комментарии в MatLab вводятся командой %, например:
с = a + b % вычисление суммы векторов a и b
d = sum(a.*b) % вычисление скалярного произведения векторов a и b
1.2. Массивы
Вектор-столбцы и вектор-строки
a = [1.3; 5.4; 6.9] % вектор-столбец a b = [7.1; 3.5; 8.2] % вектор-столбец b c = a + b % сумма a и b
a = [1.3 5.4 6.9] % вектор-строка a b = [7.1 3.5 8.2] % вектор-строка b c = a + b % сумма a и b
size (c) % размер массива c
d = sin(a) – вычисление значений функции sin для всех элементов массива a.
Обращение к элементам вектора
v = [1 2 6 4 8 34];
v(4) % обращение к четвертому элементу вектора v
v(2) = 100 % присвоение второму элементу нового значения
v1 = [5 4 3 2 1];
v2 = [v v1] % формирование нового вектора из двух вектор-строк
v(2:4) % обращение к элементам вектора v со второго по четвертый
v1(3:end) % обращение к элементам вектора v1 с третьего по последний
v3 = [v(2:4) v1(1:4)] % формирование нового вектора из частей v и v1
9
ind = [4 2 5];
v4 = v(ind) % формирование вектора при помощи индексации
Применение функций обработки данных к векторам
v = [5 2 4 3 1];
p = prod(v) % перемножение элементов вектора s = sum(v) % сумма элементов вектора
l = length(v) % длина вектора
mean(v) % среднее арифметическое элементов вектора
% mean(v) = sum(v)/length(v)
M = max(v) % максимальный элемент вектора v m = min(v) % минимальный элемент вектора v
[m, k] = min(v) % m – минимальный элемент v, k – его место в v
R = sort(v) % сортировка элементов v
[R, ind] = sort(v) % сортировка с выводом массива соответствия
Поэлементные операции с векторами
v1 = [2 -3 4 1];
v2 = [7 5 -6 9];
u = v1.*v2 % поэлементное умножение векторов одинаковой длины
p = v1.^2 % поэлементное возведение в степень вектора v1
P = v1.^v2 d = v1./v2 s = v1 + 4 q = v2/2
Q = v1*v2 – умножение вектора на вектор, в данном случае приведет к ошибке, так как вектор-строки можно умножать лишь на вектор-столбцы соответствующей длины.
V2 = v2' % транспонирование v2, получается векторстолбец V2
Q = v1*V2 % теперь матричное умножение возможно
10