Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Красавин Компютерныы практикум в среде МатЛаб 2015

.pdf
Скачиваний:
119
Добавлен:
12.11.2022
Размер:
9.22 Mб
Скачать

Министерство образования и науки Российской Федерации

Национальный исследовательский ядерный университет «МИФИ»

А.В. Красавин, Я.В. Жумагулов

Компьютерный практикум в среде 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]