- •Предисловие
- •Введение
- •Зачем нужен такой практикум?
- •О чем сказано далее
- •О системе 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
D.Моделирование распределения случайных величин
Датчик случайных чисел rand является встроенной функцией системы MATLAB. При каждом обращении возвращает случайное число из равномерного распределения на интервале (0,1).
Легко построить функцию, генерирующую равномерное распределение на произвольном интервале [А,В]:
Х=А+(В-А)*rand.
Пусть нужно получить значения случайной величины Х, распределенной на интервале [А,В] с плотностью f(X) (рис. 17). Выберем прямоугольник АВСD, высота которого Н не меньше максимального значения функции f(X) на [А,В].
Будем набрасывать на прямоугольник точки равномерно по его площади и браковать те из них, которые попадают выше кривой f(X). Значения Х для принятых точек и будут реализовать искомое распределение, т.е получаемые значения X будут распределены на интервале [A,B] с плотностью f(X).
Участок программы, реализующий этот алгоритм, может выглядеть, например, следующим образом:
.......................
x=A+(B-A)*rand; while (f(x) < H*rand) x=A+(B-A)*rand; end;
.......................
При этом функция f(X) должна быть описана в смысле функции MATLAB. При каждом обращении он будет давать значение X из требуемого распределения. Ясно, что чем больше площадь над кривой f(X), тем реже мы будем браковать точки. Поэтому лучше всего выбрать Н равным максимальному значению f(X). Указанный способ позволяет генерировать и многомерные распределения случайных величин.
91
Еще одна важная задача, возникающая при моделировании угловых распределений, – это реализация равномерного (изотропного) распределения в пространстве. Если задавать направление единичным вектором, выходящим из начала координат, то концы таких векторов расположены на поверхности единичной сферы. Равная вероятность для любого направления означает, что конец вектора – случайная точка Ω, равномерно распределенная на поверхности этой сферы. Вероятность того, что Ω окажется в любом элементе поверхности dS , равна dS/4π. Выбирая на поверхности сферы сферические координаты (θ, ϕ) с полярной осью ОZ, имеем dS = sin θdθdϕ, где 0 ≤ θ ≤ π, 0 ≤ ϕ ≤ 2π. Для получения (розыгрыша) случайного направления нам понадобятся два случайных числа. Соответствующий участок программы имеет вид
.................
C=2.0*rand-1;
Fi=2.0*pi*rand;
.................
Здесь Fi – угол ϕ , а С – косинус угла θ.
В системе MATLAB есть также встроенная функция, задающая нормальное распределение – randn(m,n). Эта функция генерирует матрицу m x n случайных чисел с нормальным распределением. Это распределение имеет нулевое среднее и единичную дисперсию.
92
E. Краткий справочник по функциям MATLAB
Краткий справочник по функциям MATLAB содержит 20 основных групп функций. По команде help осуществляется вывод списка этих групп. По команде help <имя группы> выводится список функций, содержащихся в этой группе. Порядок, в котором приведены далее группы функций, может служить указателем для всего краткого справочника.
Функция |
Действие |
|
|
|
Группы функций |
general |
команды общего назначения |
ops |
операторы и специальные символы |
lang |
конструкции языка |
elmat |
элементарные матрицы и действия с матрицами |
specmat |
специальные матрицы |
elfun |
элементарные математические функции |
specfun |
специальные математические функции |
matfun |
матричные функции - численные методы линейной алгебры |
datafun |
обработка данных и преобразование Фурье |
polyfun |
полиномиальные функции и интерполяция |
sparfun |
работа с разреженными матрицами |
plotxy |
двумерная графика |
plotxyz |
трехмерная графика |
graphics |
графические функции общего назначения |
color |
управление цветом и освещением |
sounds |
функции работы со звуком |
strfun |
функции работы со строковыми переменными |
iofun |
функции ввода/вывода низкого уровня |
demos |
демонстрации и примеры |
|
|
|
|
|
Клавиши редактирования |
↑ (Ctrl+P) |
Вызов предыдущей строки |
↓ (Ctrl+N) |
Вызов следующей строки |
|
|
|
Команды общего назначения |
|
Управление командами и функциями |
demo |
запуск демонстрационных примеров |
help |
онлайновая помощь |
lookfor |
поиск ключевых слов в помощи |
|
|
93
Функция |
|
Действие |
|
|
|
path |
|
исполняемая команда операционной системы |
what |
|
список M-, MAT-, и MEX-файлов в директории |
|
|
|
|
Управление переменными и рабочим пространством |
|
clear |
|
очистка переменных и функций в памяти |
length |
|
длина вектора |
load |
|
восстановить переменные с диска |
save |
|
сохранить переменные рабочей области на диске |
size |
|
размерность матрицы |
who |
|
список текущих переменных |
whos |
|
список текущих переменных, развернутая форма. |
|
|
|
|
Работа с файлами и операционной системой |
|
cd |
|
сменить текущую рабочую директорию |
delete |
|
удалить файл |
diary |
|
сохранить в файле протокол текущей сессии |
dir |
|
листинг текущей директории |
! |
|
Выполнять команду DOS |
|
|
|
|
|
Управление командным окном |
clc |
|
Очистить командное окно |
echo |
|
Печатать выполняемые команды программы |
|
|
|
|
|
Запуск и выход из MATLAB’а |
quit |
|
выйти из MATLAB’а |
startup |
|
файл, выполняемый при запуске MATLAB’а |
|
|
|
|
|
|
|
Операторы и специальные символы |
|
|
Арифметические и матричные операторы |
|
* |
|
умножение матриц |
.* |
|
поэлементное умножение матриц |
ˆ |
|
возведение матрицы в степень |
.ˆ |
|
возведение элементов матрицы в степень |
kron |
|
тензорное произведение матриц |
\ |
|
левое деление матриц |
/ |
|
правое деление матриц |
./ |
|
поэлементное деление матриц |
’ |
|
эрмитовское сопряжение |
.’ |
|
транспонирование |
|
|
|
|
|
Операторы отношения |
94
Функция |
|
Действие |
|
|
|
> |
|
больше |
< |
|
меньше |
>= |
|
больше или равно |
<= |
|
меньше или равно |
== |
|
равно |
˜= |
|
не равно |
|
|
|
|
|
Логические операторы |
& |
|
и (AND) |
| |
|
или (OR) |
˜ |
|
не (NOT) |
xor |
|
исключающее или (XOR) |
|
|
|
|
|
Специальные символы |
. |
|
десятичная точка |
.. |
|
родительская директория |
... |
|
продолжение (перенос на следующую строку) |
% |
|
комментарий |
|
|
|
|
|
Логические функции |
all |
|
истина, если верно для всех элементов матрицы |
any |
|
истина, если верно хотя бы для одного элемента матрицы |
exist |
|
проверяет, существует ли переменная или функция |
find |
|
находит индексы ненулевых элементов |
finite |
|
истина для конечных элементов |
|
|
|
|
|
|
|
|
Языковые конструкции и отладка |
|
MATLAB как язык программирования |
|
eval |
|
выполнить строку |
feval |
|
выполнить функцию |
function |
|
определить функцию |
global |
|
сделать переменную глобальной |
nargchk |
|
установить кол-во входных аргументов |
|
|
|
|
|
Операторы управления |
break |
|
выйти из цикла |
end |
|
конец цикла или условного оператора |
error |
|
выдать сообщение и прекратить выполнение функции |
for |
|
цикл с заданным числом повторений |
if,else, elseif |
|
условные операторы |
|
|
|
95
Функция |
Действие |
|
|
return |
возврат в вызвавшую функцию |
while |
цикл с неопределенным числом повторений |
|
|
|
Интерактивный ввод |
input |
ожидает ввод пользователя |
pause |
ожидает нажатия клавиши (или заданное время) |
|
|
|
|
|
Матрицы и операции с ними |
|
Элементарные матрицы |
eye |
единичная матрица |
linspace |
вектор с равноотстоящими элементами |
logspace |
вектор с равноотстоящими в логарифмическом масштабе |
|
элементами |
meshgrid |
задает двумерную сетку для 3d-графика |
ones |
матрица единиц |
rand |
равномерно распределенные случайные числа |
randn |
нормально распределенные случайные числа |
zeros |
нулевая матрица |
: |
вектор с равноотстоящими элементами |
|
|
|
Специальные переменные и константы |
ans |
результат последней операции |
eps |
относительная точность вычислений с плавающей запятой |
flops |
счетчик числа операций с плавающей запятой |
i,j |
мнимая единица |
inf |
бесконечность |
nargin |
кол-во входных параметров функции |
nargout |
кол-во выходных параметров функции |
pi |
число π |
realmax |
максимальное действительное число |
realmin |
минимальное действительное число |
|
|
|
Дата и время |
clock |
время |
cputime |
затраченное время процессора |
date |
дата |
etime |
затраченное время |
tiс,toс |
запуск-останов времени |
|
|
|
Операции с матрицами |
96
Функция |
|
Действие |
|
|
|
diag |
|
выделить диагональ |
fliplr |
|
отразить матрицу по строкам |
flipud |
|
отразить матрицу по столбцам |
reshape |
|
изменить размер |
rot90 |
|
повернуть матрицу на 90 градусов |
tril |
|
выделить нижнюю треугольную часть матрицы |
triu |
|
выделить верхнюю треугольную часть матрицы |
|
|
|
|
|
|
|
|
Математические функции |
|
Элементарные математические функции |
|
abs |
|
модуль |
acos |
|
арккосинус |
acosh |
|
гиперболический арккосинус |
angle |
|
угол |
asin |
|
арксинус |
asinh |
|
гиперболический арксинус |
atan |
|
арктангенс |
atanh |
|
гиперболический арктангенс |
conj |
|
сопряжение |
cos |
|
косинус |
cosh |
|
гиперболический косинус |
exp |
|
экспонента |
imag |
|
мнимая часть |
log |
|
натуральный логарифм |
log10 |
|
десятичный логарифм |
real |
|
действительная часть |
rem |
|
остаток от деления |
round |
|
округление до ближайшего целого |
sign |
|
сигнум-функция (знак) |
sin |
|
синус |
sinh |
|
гиперболический синус |
sqrt |
|
квадратный корень |
tan |
|
тангенс |
tanh |
|
гиперболический тангенс |
|
|
|
|
|
Спецфункции |
bessel |
|
функция Бесселя |
besselh |
|
функция Ганкеля |
|
|
|
97
Функция |
|
Действие |
|
|
|
betainс |
|
неполная бета-функция |
betaln |
|
логарифм бета-функции |
ellipj |
|
эллиптическая функция Якоби |
ellipke |
|
полный эллиптический интеграл |
erf |
|
функция ошибок |
erfinv |
|
обратная функция ошибок |
gamma |
|
гамма-функция |
gammaln |
|
логарифм гамма-функции |
gammainc |
|
неполная гамма-функция |
|
|
|
|
|
|
|
Функции от матриц - линейная алгебра |
|
|
|
Матричный анализ |
cond |
|
число обусловленности |
det |
|
определитель |
norm |
|
норма |
orth |
|
ортогонализация |
rank |
|
ранг |
trace |
|
сумма диагональных элементов |
|
|
|
|
|
Системы линейных уравнений |
inv |
|
обратная матрица |
\ or / |
|
решение линейной системы |
|
|
Собственные значения |
eig |
|
собственные значения и собственные вектора |
poly |
|
характеристический полином |
|
|
|
|
|
Функции от матриц |
expm |
|
матричная экспонента, 4 варианта |
funm |
|
любая функция от матриц |
logm |
|
логарифм матрицы |
sqrtm |
|
корень из матрицы |
|
|
|
|
|
|
|
Обработка данных и преобразование Фурье |
|
|
|
Основные операции |
cumprod |
|
произведение элементов с накоплением |
cumsum |
|
сумма элементов с накоплением |
max |
|
максимальный элемент |
mean |
|
среднее значение |
min |
|
минимальный элемент |
|
|
|
98
Функция |
|
Действие |
|
|
|
prod |
|
произведение всех элементов |
sort |
|
сортировка по возрастанию |
std |
|
дисперсия |
sum |
|
сумма всех элементов |
trapz |
|
интегрирование методом трапеций |
|
|
|
|
|
Конечные разности |
diff |
|
численное дифференцирование |
gradient |
|
градиент |
|
|
|
|
|
Корреляция |
corrcoef |
|
коэффициенты корреляции |
cov |
|
матрица ковариации |
|
|
|
|
|
Фильтрация и конволюция |
conv |
|
конволюция и умножение полиномов |
deconv |
|
деконволюция и деление полиномов |
filter |
|
цифровой фильтр |
|
|
|
|
|
Преобразование Фурье |
abs |
|
модуль |
angle |
|
фаза |
fft |
|
дискретное преобразование Фурье |
fftshift |
|
сдвигает 0 в середину спектра |
ifft |
|
обратное дискретное преобразование Фурье |
nextpow2 |
|
ближайшая большая степень двойки |
|
|
|
|
|
|
|
Полиномиальные и интерполяционные функции |
|
|
|
Полиномиальные функции |
conv |
|
умножение полиномов |
deconv |
|
деление полиномов |
poly |
|
задать полином с известными корнями |
polyder |
|
производная полинома |
polyfit |
|
аппроксимация полиномом данных |
polyval |
|
вычислить полином |
polyvalm |
|
вычислить полином от матрицы |
roots |
|
корни полинома |
|
|
|
|
|
Интерполяция данных |
interp1 |
|
интерполяция |
|
|
|
|
|
Функции от функций |
99
Функция |
Действие |
|
|
|
Нелинейные численные методы |
fmin |
минимизирует функцию одной переменной |
fmins |
минимизирует функцию нескольких переменных |
fzero |
находит 0 функции |
ode23 |
решает систему дифференциальных уравнений (несколько |
|
вариантов) |
quad |
численно вычисляет интеграл |
|
|
|
|
|
Двумерная графика |
|
Элементарная x-y графика |
comet |
отрисовка плоской траектории |
fill |
рисует закрашенный многоугольник |
line |
рисует график |
loglog |
график с логарифмическими осями |
plot |
линейный график |
semilogx |
график с логарифмической осью х |
semilogy |
график с логарифмической осью y |
|
|
|
Специализированные графики |
bar |
рисует диаграмму |
errorbar |
график экспериментальных данных с ошибкой измерения |
fplot |
график функции |
hist |
насчитывает и рисует гистограмму |
polar |
график в полярных координатах |
|
|
|
Разметка графика |
grid |
показать сетку |
gtext |
выводит текст, перемещаемый с помощью мыши |
text |
выводит текст в заданные координаты |
title |
выводит название графика |
xlabel |
подпись оси x |
ylabel |
подпись оси y |
|
|
|
Трехмерная графика |
comet3 |
отрисовка 3-мерной траектории |
plot3 |
рисует линии и точки в 3d |
contour |
рисует изолинии |
image |
выводит рисунок |
mesh |
3d поверхность |
|
|
100
Функция |
|
Действие |
|
|
|
surf |
|
3d поверхность с тенями |
colormap |
|
задает цветовую палитру |
|
|
|
|
|
|
|
Графические функции общего назначения |
|
|
|
Создание и контроль окна графика |
clf |
|
очистить окно |
close |
|
закрыть окно |
figure |
|
создать окно |
gcf |
|
получить дескриптор активного окна |
|
|
|
|
|
Создание и контроль осей |
axes |
|
создать оси |
axis |
|
задать масштаб и внешний вид осей |
cla |
|
очистить активные оси |
gca |
|
получить дескриптор активных осей |
hold on/off |
|
рисовать поверх или стирая |
subplot |
|
разбить окно на несколько графиков |
|
|
|
|
|
Операции управления графикой |
delete |
|
удалить объект |
drawnow |
|
нарисовать всю накопленную графику |
get |
|
получить свойства объекта |
reset |
|
восстановить свойства объекта (по умолчанию) |
set |
|
установить свойства объекта |
|
печатать график |
|
|
|
|
|
|
|
|
|
Строковые функции |
setstr |
|
преобразует число в строку |
strcmp |
|
сравнить строки |
int2str |
|
преобразует целое число в строку |
num2str |
|
преобразует число в строку |
str2num |
|
преобразует строку в число |
|
|
|
|
|
|
|
|
Функции ввода/вывода |
fclose |
|
закрыть файл |
fopen |
|
открыть файл |
fread |
|
читать бинарный файл |
fwrite |
|
писать в бинарный файл |
fgetl |
|
прочитать строку из файла |
fprintf |
|
писать данные в файл по формату |
|
|
|
101