- •Предисловие
- •Введение
- •Зачем нужен такой практикум?
- •О чем сказано далее
- •О системе MATLAB
- •Первые задачи
- •Фигуры Лиссажу
- •Биения
- •Волны
- •Основные графические объекты и их использование
- •Отрисовка движущихся кривых
- •Об использовании безразмерных переменных
- •Маятник
- •Свободные колебания
- •Вынужденные колебания
- •Переходные колебания
- •Резонанс
- •О случайном движении
- •Движение частиц в центральном поле
- •Траектория финитного движения
- •Влияние малого возмущения
- •Движение двух частиц
- •Случайные блуждания и диффузия
- •Закономерности случайных блужданий
- •Оценка параметров движения броуновской частицы в жидкости
- •Программа, изображающая случайные блуждания
- •Броуновские частицы в поле тяжести
- •Броуновское движение
- •Случайные силы
- •Корреляционные функции
- •Шары
- •Расчет движения шаров
- •Алгоритм расчета
- •Процедура Balls
- •Динамический хаос
- •Почему движение шаров становится непредсказуемым?
- •Как убедиться в появлении хаоса?
- •Функции распределения
- •Стохастический нагрев и стохастическое охлаждение
- •Потери пучка при прохождении через вещество
- •Эффективные сечения
- •Потери частиц пучка при прохождении слоя
- •Потери энергии
- •Распределение по углам и энергиям
- •Работа с сигналами и модель диодного выпрямителя
- •Работа с сигналами
- •Расчет простейших цепей
- •Статическая модель диода. Решение нелинейных уравнений
- •ПРИЛОЖЕНИЕ
- •Свободные колебания
- •Электрические и магнитные поля
- •Частица в магнитной ловушке
- •Фокусировка пучков частиц
- •Концентрация частиц
- •Приближенные методы решения систем дифференциальных уравнений
- •Моделирование распределения случайных величин
- •Компиляция файлов MATLAB
- •Список литературы
- •Работа в командном окне
- •Вход в систему MATLAB
- •Интерактивный доступ к справочной информации и документации
- •Команда hеlр
- •Команда lookfor
- •Меню Help
- •Редактирование и перевызов командной строки
- •Формат вывода
- •Копия протокола сессии
- •Введение матриц
- •Явное определение матриц
- •Функции построения матриц
- •Операции, выражения и переменные
- •Правила записи операторов
- •Матричные операции
- •Операции с массивами
- •Сохранение данных из рабочей области
- •Операторы for, while, if, case и операторы отношения
- •Цикл for
- •Цикл while
- •Условный оператор if
- •Оператор переключения case
- •Условия (операторы отношения)
- •Функция find
- •Функции MATLAB
- •Скалярные функции
- •Векторные функции
- •Матричные функции
- •M-файлы
- •Файлы-программы, или сценарии
- •Файлы-функции
- •Текстовые строки, сообщения об ошибках, ввод
- •Работа с m-файлами
- •Список путей доступа
- •Работа со списком путей доступа
- •Текущий каталог
- •Средство просмотра и редактирования путей доступа Path Browser
- •Использование редактора/отладчика
- •Отладка m-файлов
- •Сравнение алгоритмов: flops и etime
- •Графика
- •Плоские графики
- •Команда plot
- •Разметка графика и надписи
- •Управление осями при выводе графиков
- •Несколько графиков на листе
- •Специальные виды графиков
- •Столбиковые диаграммы
- •Ступенчатые кривые
- •Гистограммы
- •Изображение функций
- •Трехмерные изображения
- •Одномерная кривая
- •Сеточные поверхности
- •Изолинии
- •Дескрипторная графика (графика низкого уровня)
- •Графические объекты и их иерархия
- •Дескрипторы и работа с ними
- •Свойства графических объектов и работа с ними. Функции get и set
- •Движущиеся графики (анимация)
- •Разработка графического интерфейса пользователя
- •Создание внешнего вида интерфейса
- •Способы взаимодействия графического интерфейса с функциями пользователя
- •Общая структура функции NAME.M графического интерфейса
- •Функционирование графического интерфейса
- •Разработка функции Run
- •Разработка функции Exit
- •Разработка функции Edit
если перед ними поставить точку. Например, операция [1,2,3,4].*[1,2,3,4] или [1,2,3,4].ˆ2 дадут один и тот же результат [1,4,9,16]. Попробуйте эти операции или им подобные выполнить самостоятельно. Эти действия в особенности полезны при использовании графики.
3.4.Сохранение данных из рабочей области
При выходе из системы MATLAB все переменные рабочей области теряются. Однако при вызове команды save перед выходом все переменные рабочей области записываются на диск в нетекстовом формате в файл с именем matlab.mat. Если впоследствии загрузить MATLAB, то команда load восстановит все переменные рабочего пространства.
4. Операторы for, while, if, case и операторы отношения
При использовании в своей основной форме перечисленные выше операторы управления MATLAB работают так же, как и в большинстве языков программирования.
4.1.Цикл for
Например, для данного n, оператор x = [ ]; for i = 1:n,x=[x,iˆ2], end
или
x = [ ]; for i = 1:n x = [x,iˆ2] end
создает определенный вектор размерности n, а оператор x = []; for i = n:-1:1, x=[x,iˆ2], end
создает вектор с теми же элементами, но размещенными в обратном порядке. Попробуйте выполнить это сами. Заметим, что матрица может быть пустой (например, в случае оператора x = [ ].) Последовательность опреаторов
for i = 1:m for j = 1:n
H(i, j) = 1/(i+j-1); end
end H
создаст и напечатает на экране матрицу Гильберта размерности mxn. Точка с запятой, которая завершает внутренний оператор, предотвращает вывод на экран
117
ненужных промежуточных результатов, в то время как последний оператор H выводит на экран окончательный результат.
4.2. Цикл while
В общем виде цикл while записывается в виде
while <условие> <операторы> end
<Операторы> будут повторяться до тех пор, пока <условие> будет оставаться истинным. Например, для заданного числа a приведенная далее последовательность операторов вычислит и выведет на дисплей наименьшее неотрицательное число n, такое что 2n < a:
n = 0;
while 2^n < a n = n + 1; end
n
4.3.Условный оператор if
В общем виде простой оператор if используется следующим образом:
if <условие> <операторы> end
<Операторы> будут выполняться только если <условие> истинно. Возможно также множественное ветвление, что демонстрируется приведенным далее примером.
if n < 0 parity = 0;
elseif rem(n,2) == 0 parity = 2;
else
parity = 1; end
118
При использовании двухвариантного условного оператора часть, связанная с elseif, конечно, не используется.
4.4.Оператор переключения case
При необходимости построить конструкцию ветвления с более чем двумя логическими условиями удобнее использовать не вложенные операторы if, а оператор переключения switch ... case. Этот оператор имеет следующую структуру:
switch <выражение>
%<выражение> - это обязательно скаляр или строка case <значение1>
операторы
%выполняется, если <выражение>=<значение1> case <значение2>
операторы
%выполняется, если <выражение>=<значение2>
...
otherwise операторы
%выполняется, если <выражение> не совпало
%ни с одним значением
end
4.5.Условия (операторы отношения)
В MATLAB используются следующие операторы отношения:
< |
меньше чем |
> |
больше чем |
<= |
меньше или равно |
>= |
больше или равно |
== |
равно |
˜= |
не равно |
Отметим, что знак = используется в операторах присваивания, в то время как знак == используется в операторах отношения. Операторы отношения (или, другими словами, логические переменные, которые они создают) могут объединяться с помощью следующих логических операторов:
119
& |
И |
| |
ИЛИ |
˜ |
НЕ |
Когда эти операторы применяются к скалярам, то результатом является тоже скаляр 1 или 0 в зависимости от того, является ли результат истиной или ложью. Попробуйте вычислить 3 < 5, 3 > 5, 3 == 5, и 3 == 3. Когда операторы отношения применяются к матрицам одного размера, результатом является матрица того же размера, у которой в качестве элементов стоят 0 или 1, в зависимости от соотношения между соответствующими элементами исходных матриц. Попробуйте вычислить a=rand(5), b=triu(a), a == b. Операторы while и if интерпретируют отношение между матрицами как истинное в том случае, если результирующая матрица не имеет нулевых элементов.
Так, если вы хотите выполнить оператор в том случае, когда матрицы A и B полностью совпадают, вы можете написать
if A == B <операторы> end
но если вы хотите выполнить оператор в том случае, когда матрицы A и B не равны, вы должны ввести if any(any(A ˜= B)) <оператор> end или, что проще, if A == B else <оператор> end. Заметим, что конструкция if A ˜= B, <оператор>, end почти наверняка не даст того, что нужно, поскольку оператор будет выполняться только если каждый элемент матрицы A будет отличаться от соответствующего элемента матрицы B. Для сведения матричных отношений к вектору или скаляру можно воспользоваться функциями any и all. В предыдущем примере необходимо использование функции any два раза, поскольку эта функция - векторная (см. 5.2). Оператор for допускает использовать любую матрицу вместо 1:n. Для более полного знакомства с возможностями, расширяющими мощь оператора for, см.[6].
4.6. Функция find
Хотя функция find не относится формально к условным операторам или операторам отношения, тем не менее мы решили поместить ее в этот раздел, поскольку ее использование весьма полезно для работы с циклами и условными операторами.
Оператор k=find(x) возвращает вектор k номеров ненулевых элементов вектора/матрицы x. Если x- матрица, то при определении индексов она рассматривается как вектор, образованный последовательно соединенными столбцами матрицы. Вектор find(x) можно использовать совместно с операторами отношения, поскольку результатом применения оператора отношения к матрицам является мат-
120