МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ РФ
ДАГЕСТАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет математики и компьютерных наук
Бейбалаев В.Д.
ЭЛЕКТРОННЫЙ
ЛАБОРАТОРНЫЙ ПРАКТИКУМ
MAT LAB
Махачкала 2016
2.
Математические
вычисления в среде MATLAB
5.
Аналитические
вычисления в Matlab
6. Алгоритмы
и технологии численного вычисления в системе Matlab
Одной из основных областей применения современных
компьютеров при решении прикладных задач
являются математические и научно-технические расчеты. Сложные задачи,
возникающие при решении прикладных задач и моделировании различных процессов,
можно разбить на ряд элементарных: решение алгебраических и дифференциальных уравнений,
вычисление интегралов и т.д. Для решения таких задач на сегодняшний день разработаны методы их решения, созданы различные
математические системы, доступные для изучения. Одной из таких систем является Matlab.
Matlab (MATrix LABoratory) – это:
•
математические
вычисления;
•
создание
алгоритмов;
•
моделирование;
•
анализ, обработка
и визуализация данных;
•
научная и
инженерная графика;
•
огромное
количество прикладных пакетов.
В Matlab встроены
следующие основные пакеты:
•
Matlab Web Server
•
Bioinformatics
Toolbox
•
Communications
Toolbox
•
Control System
Toolbox
•
Database Toolbox
•
Distributed
Computing Toolbox
•
Financial Toolbox
•
Fuzzy Logic
Toolbox
•
Genetic Algorithm and Direct Search Toolbox
•
Image Processing
Toolbox
•
Neural Networks
Toolbox
•
Partial
Differential Equation Toolbox
•
Signal Processing
Toolbox
•
SimBiology
•
Spline Toolbox
•
Statistics
Toolbox
•
Symbolic Toolbox
•
Virtual Reality
Toolbox
•
Wavelet Toolbox
•
Simulink
•
Aerospace Blockset
•
Communications
Blockset
•
Video and Image Processing
•
Real-Time Workshop
•
Matlab Builder for .NET
•
Matlab Compiler
•
Интеграция в MS Office
В среде Matlab можно
выделить пять основных частей:
1.
Язык Matlab.
2.
Среда Matlab.
3.
Управляемая
графика.
4.
Библиотека математических
функций.
5.
Программный
интерфейс.
Языком Matlab является:
•
Си- и
Паскаль-подобный объектно-ориентированный.
•
Огромный набор
встроенных функций, расширяемый пользователем.
Среда Matlab это:
•
Интерактивная работа.
•
Управление
переменными в рабочем пространстве.
•
Редактор.
•
Отладчик.
Управляемая
графика Matlab состоит из
команд:
•
высокого уровня
для работы с 2D- и 3D-графикой;
•
анимации;
•
низкого уровня
для работы с графикой.
В среде Matlab имеется хорошая библиотека математических функций:
•
Обширная
коллекция вычислительных алгоритмов от
элементарных функций (sin, cos и т. П.)
до более сложных
– обращение матриц;
– вычисление собственных значений;
– минимизация функций;
– дифференцирование;
– интегрирование;
–
и пр.
В среде Matlab имеется программный
интерфейс API для
взаимодействия с программами на языках
Си и Фортран.
Matlab – язык для работы с матричными объектами. Основной
объект Matlab – матрица.
Число – это матрица размера (1x1). Использование матриц существенно облегчает
программирование и делает запись формул краткой и наглядной. В дальнейшем
изложении предполагается знакомство с матричной алгеброй и основами
программирования. Переменные в Matlab определяются пользователем при помощи оператора
присваивания: x=5. При этом в левой части – имя переменной. В
правой части оператора присваивания может стоять выражение: y=(2-x)/(x+3). Если выражение встречается вне оператора
присваивания, то его значение вычисляется и помещается в системную переменную ans (от answer).Переменную
ans можно использовать для задания новых выражений: z=ans*3. Если
оператор присваивания завершить символом «;», то результат на экране не
дублируется; в противном случае – выводится на экран:
В Matlab при составлении выражений могут
быть использованы операторы:
+
сложение
-
вычитание
*
умножение
/
деление
^
возведение в степень
Вернуться назад к содержанию
При этом приоритет операций обычный. Изменяется при
помощи круглых скобок.
В среде Matlab
используют следующие операции отношения:
< |
меньше |
<= |
меньше или равно |
> |
больше |
>= |
больше или равно |
== |
равно |
~= |
не равно |
Приоритет этих операций ниже
чем арифметических.
А также в среде Matlab используют следующие логические операции:
& |
и |
| |
или |
~ |
не |
0 – ложь (false) 1 – истина (true) |
Приоритет этих операций ниже
чем арифметических и операций отношения.
Простейший способ взаимодействия с Matlab – работа в командной строке (в режиме калькулятора).
Строка начинается с приглашения: символа >>. Перемещение по стеку ранее
введённых команд – клавиши ↑ и ↓. Для удобства размещения данных в
КС
можно разбивать вводимое выражение знаком «…». Очистить
командное окно можно командой clc.
Все
переменные в Matlab хранятся в рабочем пространстве
(Workspace). Порой это отнимает много места. Просмотреть список
существующих в рабочем пространстве переменных можно командой who.
Более подробную информацию о
переменных рабочего пространства можно вывести командой whos.
После закрытия сеанса работы Matlab все переменные, вычисленные в течение сеанса,
теряются. Однако их можно сохранить для последующего использования в иных
сеансах, сохранив содержимое рабочего пространства в файле на диске:
– командой меню: File \ Save
Workspace As…
–
командой Matlab: save.
Команды:
•
save – сохраняет
все переменные в файл matlab.mat
•
save filename – сохраняет все переменные в файл filename
•
save filename x
y z –
сохраняет переменные x, y, z в
файл filename (можно
по маске: a*)
•
save filename x
y z
–ASCII – сохраняет переменные x, y,
z в файл filename
в текстовом виде
•
save('filename’, ‘a',‘b','-ASCII') – процедурная форма вызова команды
–
параметры – в
виде строк (в одинарных апострофах)
Подробнее про эту и любую другую
команду Matlab можно узнать с помощью:
–
help <имя
команды>;
–
или F1.
Команда clear служит для удаления переменных из рабочего
пространства:
•
clear – удаляет
все переменные;
•
clear
all – удаляет всё, включая классы, функции,
скомпилированные файлы и пр.;
•
clear
x y
z – удаляет
переменные x, y и z.
Все файлы (данные, функции и
пр.), созданные пользователем сохраняются в текущем каталоге (Current Directory).
Изменить текущий каталог можно:
•
командой cd <путь>
•
в строке ввода Current Directory
на панели инструментов;
•
в окне Current Directory.
Рабочую сессию в Matlab можно сохранить следующим образом:
•
diary – сохраняет
лог текущей сессии (весь текстовый ввод и вывод) в файл по умолчанию – в файл diary в текущем каталоге;
•
diary
filename или diary(‘filename’) –
сохраняют сессию в указанном файле;
•
diary
off / diary on –
соответственно, приостанавливают и продолжают ведение лога;
Перейти к лабораторной работе 1
2. Математические вычисления в среде MATLAB
В среде Matlab используют следующие основные элементарные функции.
1. Тригонометрические
функции:
•
sin
•
cos
•
tan
•
cot
•
asin
•
acos
•
atan
•
acot
•
sinh
•
cosh
•
tanh
•
coth
•
asinh
•
acosh
•
atanh
•
acoth
•
sind
•
cosd
•
tand
•
cotd
2. Экспоненциальные:
•
exp
•
log – ln
•
log10
•
log2
•
sqrt
•
nthroot(x, n).
3. Элементарные
функции округления:
•
fix – округление
к нулю;
•
floor –
округление к минус бесконечности;
•
ceil –
округление к плюс бесконечности;
•
round –
округление к ближайшему целому;
•
mod(x,y) – остаток от
деления x на y без учёта
знака (x - n*y, где n = floor(x/y));
•
rem(x,y) – остаток от
деления x на y с учётом знака
(x - n*y, где n = fix(x/y)).
4. Элементарные
функции работы с комплексными числами:
•
abs(z) – модуль комплексного числа z;
•
angle(z) – фаза z (в
радианах);
•
real(z) – действительная часть z;
•
imag(z) – мнимая часть z;
•
conj(z) – комплексно сопряжённое число для z;
•
complex(a,b) –
конструирует комплексное число a+ib;
•
isreal(z) – возвращает истину, если z – действительное.
Просмотреть полный список элементарных
функций можно командой
•
help elfun.
Двумерные массивы в Matlab задаются в следующем виде a = [ 1 2; 3 4; 5 6].
Доступ к
элементу массива совершается следующим образом:
Любая строка и столбец матрицы – это вектор. Векторы,
расположенные вдоль строк – векторы-строки (размер 1xn). Векторы, расположенные вдоль столбцов –
векторы-столбцы (размер nx1). К векторам
любого типа применима функция length.
Размерность
массива определяется функцией ndims(A), а размер массива – функцией size(A):
Рассмотрим две матрицы:
Диапазоны можно использовать как
для задания значений векторов, так и для задания диапазонов индексации:
Для работы с матрицами удобно
пользоваться следующими функциями:
·
ones –
формирование массива из единиц;
·
zeros –
формирование массива из нулей;
·
eye –
формирование единичной матрицы;
·
rand –
формирование массива из чисел, случайно распределённых на отрезке [0, 1];
·
randn –
формирование массива из чисел, нормально распределённых на отрезке [0, 1];
·
magic – формирование
магического квадрата;
·
pascal – формирование
квадрата Паскаля;
·
diag – диагональная
матрица;
Рассмотрим
основной синтаксис на примере функции создания единичной матрицы (eye). С помощью функции eye(m) можно создать единичную матрицу размера [m, m], а с помощью функции
eye(m, n) единичную
матрицу размера [m, n]. При этом «лишние» строки или столбцы дополняются
нулями.
Функция zeros(m, n) – создает матрицу размером m на n с
нулевыми элементами, а команда ones (m, n) - создает
матрицу размером m на n с единичными элементами.
Функция
rand (m,n) - создает матрицу размером m на n из случайных
чисел, равномерно распределенных в диапазоне от 0 до 1.
Функция diag используют для работы с диагональными матрицами, у
которых ненулевые элементы расположены на диагоналях. Синтаксис:
·
X = diag(v) – на главной
диагонали матрицы X расположены элементы вектора v;
·
X = diag(v,k) – на k-ой диагонали
матрицы X расположены элементы вектора v (по умолчанию k=0);
·
v = diag(X,k) – извлечь из матрицы X k-ую диагональ и
сохранить её в векторе v. Вернуться назад к
содержанию
Над элементами массивов можно совершить
следующие простейшие операции:
·
sum- находит сумму элементов;
·
prod- находит
произведение элементов;
· cumsum- находит кумулятивную сумму элементов;
·
cumprod:
кумулятивное произведение элементов;
·
max- находит максимальный элемент;
·
min- находит
минимальный элемент;
· sort- сортируют элементы.
Рассмотрим работу некоторых из этих
функций на примерах. Для векторов функция sum возвращает сумму элементов. Для массивов – сумму
элементов по каждому из столбцов. Результатом является вектор-строка. Остальные функции работают по
этому же принципу. Вернуться назад к содержанию
Кумулятивная сумма вычисляется так же, только
происходит накопление вычисленных значений в элементах массива.
Максимальный и
минимальный элементы определяют следующим образом:
Вызов
функций max/min с двумя
выходными параметрами позволяет определить и индекс найденного элемента:
Функция sort производит сортировку элементов матрицы по столбцам:
Функция All(v) –
возвращает истину, если все элементы вектора v отличны от нуля. Для
матриц выдаёт вектор-строку с аналогичным результатом для каждого
столбца: Вернуться
назад к содержанию
Функция Any(v) –
возвращает истину, если хотя бы один элемент вектора v отличен от нуля. Для
матриц выдаёт вектор-строку с аналогичным результатом для каждого
столбца:
Функция find определяет индексы элементов, удовлетворяющих
заданному условию:
Функция det вычисляет
определитель квадратной матрицы.
При
работе с матрицами можно использовать два вида операторов:
·
матричные- производят действия по правилам матричной алгебры;
·
поэлементные- производят действия над соответствующими элементами
матриц. При этом размеры матриц должны быть одинаковыми. От матричных операций
отличаются точкой перед знаком операции.
Матричные
и поэлементные операции:
•
‘ транспонирование;
•
+ матричное (и поэлементное) сложение;
•
- матричное (и поэлементное) вычитание;
•
* матричное умножение;
•
/ матричное деление;
•
^ матричное возведение в степень;
•
\ матричное
деление «слева»;
•
.* поэлементное умножение;
•
./ поэлементное деление;
•
.^ поэлементное возведение в степень;
•
.\ поэлементное
деление «слева.
Операции «деления» слева и справа применяются для решения систем линейных
уравнений (СЛУ). Деление слева (\) для квадратных матриц реализует метод Гаусса,
а для прямоугольных матриц– метод наименьших квадратов.
Пример. Найти сумму и разность матриц:
>>А=[1 2 3 4 5; 6 7 8 9 11]
A= 1 2
3 4 5
6
7 8 9 11
>>B=[0 -1 -2
-3 -4; 5
6 7 8 9]
B = 0 -1 -2
-3 -4
5 6 7
8 9
>>A+B
ans = 1
1 1 1
1
11
13 15 17 20
>>А-B
ans = 1 3
5 7 9
1 1 1 1 2
Пример. Найти
произведение матрицы на число
>>А*5
ans = 5
10 15 20 25
30
35 40 45 55
Пример.
Транспонирование матрицы
>>А’
ans = 1 6
1
7
2
8
3
9
4
11
Пример.
Найти произведение двух матриц
>>A’*B
ans = 30 35 40
45 50
45
40 45 50 55
40 45
50 55 60
45 50
55 60 65
50 61
67 73 79
C помощью функции
inv (A) находят матрицу обратную заданной матрице А. При этом исходная матрица А должна быть
квадратной и её определитель должен быть отличен от нуля.
Весьма интересными в языке Matlab являются операции деления матриц слева направо и
справа налево .(/ и \)
Операция
А\В равносильна совокупности
операций inv(A)*B, которая является решением матричного уравнения: А*Х=В.
Для
примера рассмотрим решение системы линейных алгебраических уравнений:
x1 + 2x2 +
3x3 = 14
2x1 - x2 -
5x3 = -15
x1 - x2-
x3 = - 4
Вводим
матрицу коэффициентов А и вектор строку В:
>>A=[1 2 3; 2 -1 -5; 1 -1 -1]
A= 1 2 3
2
-1 -5
1
-1 -1
>>B= [14; -15; -4]
B = 14
-15
- 4
>>x = A \ B
x =
1
2
3
То есть x1 =1 x2 =2 x3 = 3 –
корни системы уравнений.
В
системе Matlab предусмотрены возможности математического оперирования с полиномами.
Полином (многочлен) как функция определяется
следующим выражением:
В Matlab полином задается и хранится
в виде вектора, элементами которого являются коэффициенты полинома от an до а0
P = [an … a2 a1 a0]
Ввод
полиномов осуществляется также как и ввод вектора длиной n+1, где n – порядок
полинома.
Система
Matlab имеет функцию roots(P) которая
вычисляет вектор, элементы которого являются корнями заданного полинома, по
вектору коэффициентов. Пусть требуется найти корни полинома:
Р(х) = х5+8x4+31x3+80x2+94x+20
>>P=[1
8 31 80
94 20]
>>roots(P)
ans=
-1.0000+3.0000i
-1.0000+3.0000i
-3.7321
-2.0000
-0.2679
Обратная
операция – построение вектора Р
коэффициентов полинома по заданному вектору его корней – осуществляется
функцией poly.
P = poly(R),
где R – заданный вектор корней полинома, Р – вычисленный вектор
коэффициентов полинома.
Пример:
>>P = [1 8
31 80 94
20]
ans =
1
8 31 80
94 20
>>R= roots (P)
ans =
-1.0000+3.0000i
-1.0000+3.0000i
-3.7321
-2.0000
-0.2679
>>P1 = poly(R)
ans=
1.0000
8.0000 31.0000 80.0000
94.0000 20.0000
Для вычисления значения
полинома по заданному значению его аргумента в Matlab предусмотрена функция polyval. Обращение к ней происходит по схеме:
y = polyval (Р, x),
где Р –
вектор коэффициентов полинома, x – значение
аргумента полинома.
Пример.
>>P = [1 8
31 80 94
20]
>>x = 2
>>y = polyval (P, x)
ans=
936
Вычисление производной от полинома производится функцией polyder. Эта функция создает вектор коэффициентов полинома
представляющий собой производную от заданного полинома:
>>dp = polyder (P)
dp = 5 32 93
160 94
Перейти к лабораторной работе 2
В среде Matlab имеется высокоуровневая, объектная и управляемая
графика. Графика Matlab не
требует от пользователя детальных знаний о работе графической подсистемы, каждый
объект на рисунке имеет свойства, которые можно менять и доступ к графическим
объектам возможен как через инспектор объектов, так и при помощи встроенных
функций.
Для
построения 2D-графика необходимо задать
область построения (диапазон), вычислить значение функции на области построения
и построить график при помощи одной из встроенных функций Matlab.
Например:
Если
сразу же построить другой график, то старый график будет удалён из графического
окна. Для построения двух графиков в одной СК необходимо «закрепить»
графическое окно при помощи команды hold on и применить
одну команду plot.
Например:
А
также два графика в одной СК можно построить с помощью дополнительных
параметров команды plot.
Например:
В
команде plot можно задать для каждого
графика цвет линии, тип маркера и тип
линии
Например:
В среде Matlab имеется возможность построения нескольких графиков в
одном окне но в разных системах координат. Для этого поверхность графического
окна с помощью команды subplot
можно разделить на зоны, в каждой из которых выводится график. В качестве
параметров ей передаётся трёхзначное целое число вида mnk (m и n определяют количество графических «подокон» по
горизонтали и вертикали, а k задаёт номер
графического «подокна»). При этом порядок нумерации - по строкам.
Например:
Для построения графиков в разных графических
окнах нужно создать новое графическое окно с помощью команды figure. Команда figure создаёт графическое окно и возвращает указатель на
него: h = figure, а активизировать ранее созданное
окно можно командой figure(h).
В среде Matlab для управления масштабом
имеется команда Axis. Команда axis([Xmin Xmax Ymin Ymax]) задаёт область построения графиков по осям X и Y.Команда используется,
если результат автомасштабирования неудовлетворителен.
Для
графиков можно задать масштабную сетку с помощью команды grid on, заголовок с помощью команды title(’заголовок’),
подписи осей координат с помощью команды xlabel(’текст’) и
ylabel (’текст’). В заголовках и подписях можно использовать
нотацию системы TeX.
А
также в Matlab можно
построить графики функций, заданных в параметрическом виде. Строятся они при
помощи оператора plot. Для этого вначале задаётся диапазон построения t, затем
вычисляются x(t) и y(t) и строится график. Графики параметрических функций
часто возникают в физических приложениях. Независимая переменная t в этом случае имеет смысл времени, а x и y –
координаты. Для построения динамического графика можно использовать функцию comet(x,y).
Пример 1 (оформление графика).
Пример 2 (Графики функций,
заданных в параметрическом виде).
Графики
в полярной системе координат строятся аналогично графикам функций в декартовой
системе. Для построения используется команда polar.
Графическое
представление функции в виде ступенчатого графика осуществляется с помощью
функции stairs (x, y). Для этого сначала
надо для значений аргумента x нужно сформировать
массив, а затем осуществить вывод функции в виде ступенчатого графика
Пример:
x = 0:.25:10;
stairs (x,sin(x))
В среде Matlab можно
также построить график функции в виде столбчатой диаграммы. Это осуществляется
с помощью функции bar(x, y)
x =
-2.9:0.2:2.9;
bar(x,exp(-x.*x))
colormap
hsv
Другим примером является построение графика в
виде гистограммы. Это осуществляется с помощью функции hist(y, х)
Построим гистограмму случайных величин,
которые формируются функцией randn.
x = -2.9:0.1:2.9;
y= randn(10000,1);
hist(y,x)
Система Matlab имеет очень
большие возможности построения трехмерных графиков. В Трёхмерную (3D-) графику Matlab
входит построение:
· поверхностей
· контурных диаграмм (линии равного уровня)
· 3D-линий
· векторных полей
· скалярных полей
· и др.
Мы рассмотрим только несколько функций,
позволяющих создавать трехмерные графики.
Для построения трехмерного графика z = f(x, у) необходимо иметь матрицы значений переменных х,
у. Для определения матриц предназначены следующие функции:
[X,Y] = meshgrid (x, у);
[X,Y] = meshgrid (x);
[X,Y,Z] = meshgrid (x, у, z);
Функция
[X,Y] = meshgrid(x,y) — преобразует область векторов х, у в массивы X, Y, которые
используются для вычисления функции z = f(x, у) и построения графиков.
Строки массива Х являются копиями вектора х, а
столбцы массива Y - копиями вектора у.
Функция [X,Y,Z] = meshgrid(x, у, z) возвращает трехмерный массив для построения
трехмерного графика.
Графики трехмерных поверхностей строятся с
помощью следующих функций:
plot3 (x, у, z),
plot3 (X, Y, Z),
plot3 (X, Y, Z, s),
plot3 ( x l , yl, zl, s1, x2, y2, z2, s2, . .
. , xn, yn, zn, sn),
где x, у, z — векторы
аргументов функции, Х, Y, Z — матрицы одинакового
размера, s— стили линий и точек графика,
аналогично функции plot ().
Приведенные функции строят точки трехмерного
графика и соединяют их отрезками прямых в соответствии с заданным стилем.
Функция plot3(xl,yl,zl,sl,x2,y2,z2,s2,...,xn, yn, zn,sn) строит на одном рисунке n функций.
Пример. Построить график функции z = ln х + ln у в диапазоне
аргументов [-4; 4] с шагом h = 0.1.
Рассмотрим пример построения поверхности f(x,y)=sin(r)/r, где r=sqrt(x2+y2).
Функции
для построения поверхностей:
Функция |
Для
чего используется |
mesh, surf |
Построение
поверхностей |
meshc, surfc |
Строит
поверхность и контурную диаграмму под ней |
meshz |
Поверхность
на «пьедестале» |
surfl |
Подсвеченная
поверхность |
contour |
Контурная
диаграмма |
plot3 |
Трёхмерная
линия (параметрическое задание) |
comet3 |
Движение
по трёхмерной линии |
О других графических функциях можно узнать
в системе помощи Matlab.
Перейти к лаборатоной работе 3
Написание программ – это
альтернатива работе в командной строке. Программный код Matlab размещают в файлах с расширением «m» (m-файлах). m-файлы бывают двух видов:
–
скрипты (scripts);
–
функции (functions).
К сожалению, Matlab плохо понимает кириллицу…
Скрипты представляют собой
последовательности команд Matlab, как если
бы мы перенесли их из командного окна в отдельный файл. Скрипт вызывается по
имени через командную строку и выполняется в режиме интерпретатора, и они полезны для автоматизации
последовательности действий, которые выполняются многократно. Скрипты не могут
принимать параметры и возвращать аргументы. Они хранят значения своих
переменных в рабочем пространстве, где переменные доступны для других скриптов
и из командной строки.
Функции- это специальный вид m-файлов. В отличие от скриптов могут принимать
аргументы и возвращать значения. Использование функций позволяет структурировать
программу и избежать повторения кода.
Создание функции преследует целью
расширение языка. Переменные, определённые внутри функции являются локальными,
то есть видны только внутри самой функции. Функция имеет собственное имя. Кроме
того, с ней связано имя m-файла, в
котором функция записана. При этом будем соблюдать правило: имя функции и имя m-файла должны быть одинаковы.
Функция состоит из заголовка и тела
function f = fact(n) Заголовок
% Вычисляет
факториал. Линия H1
% FACT(N) возвращает N!, Help
f = prod(1:n); Тело
функции
При этом H1 и Help выводятся по команде
help <имя функции>. Фактически, функция отличается
от скрипта наличием заголовка и способом вызова.
Function f = fact (n)
Комментарии используются для пояснения кода и временного
исключения
кода из текста. Они могут быть строчными и блочными. Строчные
начинаются с символа «%». С этого места и до конца строки всё игнорируется
компилятором %. Блочные начинаются с символа «%{» и заканчиваются символом «%}»
При этом эти символы должны обязательно стоять в отдельных строках.
Можно автоматически закомментировать
блок текста. Для этого нужно:
–
выделить блок;
–
щёлкнуть правой
кнопкой;
–
выбрать Comment (или Ctrl+R).
Для снятия
комментарий нужно:
–
выделить
закомментированный блок;
–
щёлкнуть правой кнопкой;
– выбрать Uncomment (или Ctrl+T).
Создать m-файл можно в любом
текстовом редакторе, например, во встроенном редакторе при помощи меню или
командой edit <имя файла>.
Функция вызывается по своему имени (которое
совпадает с именем её m-файла).
При написании функций в Matlab можно
проводить проверку количества входных и выходных параметров. Для этого в
описании функции используют служебные слова:
·
nargin- количество входных параметров;
·
nargout- количество выходных параметров.
В файлах-функциях Matlab могут быть реально описаны несколько функций. Синтаксически
это оформляется как две (или более) функций, записанных в одном файле. При
вызове такого m-файла происходит запуск самой
первой функции. При этом её имя должно совпадать с именем файла. Описание
следующих функций локально. Обычно они используются как вспомогательные для
первой функции.
При вызове m-файла сравнительно много времени тратится на его
компиляцию. Чтобы сократить время выполнения можно предварительно перевести m-файл в p-код («пи-код»)
с помощью команды pcode <имя m-файла>. Откомпилированный
в псевдокод файл получает расширение «p». Такой
файл будет выполняться быстрее, чем обычный m-файл.
Интерактивный ввод данных используется
при написании скриптов. Для ввода числовых данных применяют функцию input по формату x = input(’строка
приглашения’). Введённое
пользователем значение сохранится в переменной x. Для ввода строковых данных функция input
вызывается с дополнительным параметром: c = input(’строка
приглашения’,’s’). Кроме того, имеется Си-подобная функция sscanf.
Для вывода данных в командное окно
используют команду disp (от display)
по формату disp(<выводимая
строка>). Если выводимое значение
– число, то вначале его преобразуют к строковому типу при помощи функций int2str или num2str. Конкатенацию
строк производят как для одномерных векторов-строк.
Кроме
того, имеется Си-подобная функция sprintf.
Как и любой процедурный язык
высокого уровня, Matlab позволяет использовать при
написании программ:
·
следование,
·
ветвление,
·
циклы,
·
пользовательские
функции.
Следование
реализуется перечислением каждого из операторов в отдельной строке, либо в
одной строке через запятую (или точку с запятой).
Ветвление
реализуется в двух вариантах:
– при помощи оператора if,
–
при помощи
оператора switch.
Простейшая форма оператора if:
if <логическое выражение>
<операторы>
end
В полном варианте оператора могут
использоваться слова else и elseif. Слово elseif может использоваться в одном операторе многократно с
указанием условия. Слово else – только один раз в конце оператора и без условия.
Циклы.
В Matlab имеется два вида циклов:
· цикл с параметром for,
· цикл c предусловием while.
А также
имеются оператор досрочного выхода из цикла break и оператор перехода к следующей итерации continue.
Циклы с параметром имеют вид:
Обычно цикл for используется для обработки массивов. Важно помнить,
что если есть возможность обойтись без этого цикла (применить матричные или
векторные операции), то лучше избавиться от явного цикла. В этом
случае программа будет работать на порядок быстрее.
Пример.
Замена отрицательных элементов вектора на нули
(с циклом).
Цикл с
предусловием имеет вид:
while <логическое выражение>
<операторы>
end
Операторы
выполняются, пока логическое выражение есть истина (true).
Операторы break и continue аналогичны одноимённым
операторам Паскаля. Оператор break производит досрочный выход из цикла for или while, а continue
прекращает выполнение текущей итерации и переходит к следующей.
Напишем скрипт, который вводит с
клавиатуры произвольное количество чисел. Если число положительное, то оно прибавляется
к сумме, если отрицательное, то пропускается. Ноль – признак окончания работы.
Выход из
функции в вызывающую
программу обеспечивается выполнением последнего ее оператора или командой return.
Кроме упомянутых основных операторов, традиционных для любой системы
программирования, остановимся на ряде операторов обеспечения пользовательского
интерфейса.
Приостановка выполнения программы может быть предусмотрена
включением в текст команды:
pause (приостановка до нажатия
любой клавиши),
pause (n) (приостановка на n сек),
keyboard (приостановка с
возможностью выполнять практически любые команды и последующим возвратом в
программу командой return).
Можно построить выбор варианта с клавиатуры созданием
меню:
<переменная>=menu(‘заголовок’,’выбор1’,’выбор2’,...)
Например, команда:
k=menu(‘Использовать
метод’,’Гаусса’,’Краута’,’Простой итерации’) создаст на экране всплывающее меню с указанными пунктами
клавишами и щелчок по клавише задаст значение переменной k, равное 1, 2 или 3.
Перейти к лабораторной работе 5
5. Аналитические вычисления в Matlab
Изначально Matlab имел средства только для численного анализа. Сегодня
в Matlab встроены средства аналитических (символьных)
вычислений. Symbolic Math Toolbox- является вычислительным ядром системы Maple V. Установка
Maple не требуется.
Для символьного анализа в среде Matlab требуется создать символьные переменные и функции. Символьные
переменные создаются по одной переменной x=sym(’x’). Так же можно создать целое символьное выражение syms x y z. Символьные
функции определяются через символьные переменные f=x^2+y. Для построения символьных функций можно
воспользоваться командой ezplot. Представить в стандартной форме можно с помощью команды
pretty.
В
системе Matlab имеются следующие символьные вычисления: преобразования и
анализа (дифференцирование, пределы, интегрирование, разложение в ряд Тейлора),
упрощения и подстановки, точной арифметики, линейной алгебры и решения
уравнений и их систем (обычных и дифференциальных).
Символьное вычисление пределов (сводная
таблица).
Символьное вычисление интегралов (сводная
таблица).
Рассмотрим некоторые из них на примерах.
Пример. Символьное вычисление пределов.
Пример.
Символьное вычисление односторонних пределов.
Пример.
Символьное дифференцирование.
Пример.
Символьное вычисление частных производных.
Пример.
Символьное разложение в ряд Тейлора.
Пример. Нахождение экстремума функции.
Построение экстремумов функции.
В системе Matlab операции над полиномами реализуются при помощи
функций collect, expand, factor, horner. Операция collect – вычисляет коэффициенты при степенях независимой
переменной (по умолчанию – x). Можно
явно задать имя независимой переменной в виде: collect (f, VarName).
Операция expand – представляет полином суммой степеней без приведения
подобных.
Операция factor – разлагает полином на множители, если эти множители
имеют рациональные коэффициенты.
Операция simplify реализует мощный алгоритм упрощения с использованием
тригонометрических, степенных, логарифмических, экспоненциальных функций, а
также спецфункций (Бесселя, гипергеометрической, интеграла ошибок и пр.), а
операция simple пытается получить выражение, которое представляется
меньшим числом символов, чем исходное, последовательно применяя все функции
упрощения Symbolic Math Toolbox. Иногда
simple даёт более удачное решение, чем simplify
Операция simple особенно эффективна при работе с тригонометрическими
выражениями.
Операция subs
подставляет одно символьное выражение в другое. Общий формат операции имеет
вид:
–
subs(<куда>,
<вместо чего>, <что>)
Подстановка вместо переменной её
числового значения приводит к вычислению символьной функции от значения
аргумента.
Рассмотрим пример подстановки:
В системе Matlab точные
вычисления реализуются функцией vpa
(Variable-Precision Arithmetic). Формат вызова функции имеет вид:
–
vpa(<выражение>, <значащих цифр>)
–
В системе Matlab решение уравнений и систем выполняет команда solve. До 4-го
порядка включительно решаются точно. Ответ выводится в степенях рациональных
чисел. Уравнения высших порядков и трансцендентные, как правило, точно не
решаются и в этом случае выводится приближённый результат. С целью сокращения
записи при выводе могут использоваться подстановки.
Решение систем также выполняет команда solve. При этом входные
аргументы левые части уравнений, переменные, по которым нужно разрешить систему,
например: s = solve(f1, f2, x1, x2). Выходной аргумент структура (запись) s с полями (в данном случае) x1 и x2, хранящими
символьное представление решения.
6. Алгоритмы и технологии численного
вычисления в системе Matlab
Система
Matlab имеет большое число способов численного
интегрирования. Численное интегрирование необходимо в следующих случаях:
•
первообразная не выражается через элементарные функции;
•
аналитическое выражение интеграла слишком сложное;
•
подынтегральная функция задана в табличной форме или в виде матрицы.
При
вычислениях интегралов численными методами подынтегральную функцию
целесообразно представлять в наиболее простом виде. Это может ускорить
вычисления. Упрощение подынтегральной функции можно выполнить, воспользовавшись
функцией simplify(y).
Имеют
место случаи, когда система до упрощения не может вычислить неопределенный
интеграл и легко его определяет после упрощения.
Метод
вычисления интеграла выбирает пользователь. В этом особенность системы MATLAB.
С помощью MATLAB студент имеет возможность сравнивать различные методы
численного интегрирования.
Существует
ряд способов численного интегрирования. Во всех таких способах вычисление
осуществляется по приближенным формулам, называемым квадратурными. Приведем
некоторые из них.
где: h — шаг интегрирования, уk — значение подынтегральной функции при аргументе хk, k=0,1,2,..., n и n=(b-a)/h - число
частей, на которые разбивается область интегрирования.
Одна
из формул дает значение интеграла с избытком, другая с недостатком. Какая из
них выдает решение с избытком или с недостатком, зависит от вида
подынтегральной функции.
где у0 — значение подынтегральной
функции при х=а, уn — значение подынтегральной функции при х=b, h — шаг
интегрирования.
Формула
парабол (Симпсона). Эта формула имеет
вид:
В
этой формуле ординаты с нечетными индексами умножаются на 4, а с четными — на
2. Предполагается, что n — число
четное.
При
нечетном n формула имеет вид:
Крайние
ординаты имеют коэффициент, равный 1.
Существует
много других квадратурных формул вычисления интегралов: Котеса, Чебышева,
Гаусса и др.
В системе Matlab вычисление интегралов реализовано численными методами трапеций, парабол (Симпсона)
и Ньютона - Котеса.
Метод трапеций. Метод трапеции реализован в Matlab несколькими функциями, приведенными ниже.
1. Функция cumtrapz(у). Осуществляет вычисление интеграла в случае, когда
значения функции у заданы в виде вектора или матрицы неограниченных размеров.
Откликом этой функции является п интегралов, где п — число
элементов вектора или число элементов в каждом столбце матрицы. Такое
вычисление интеграла называется интегрированием с накоплением.
Пример 1. Пусть функция
у(х) имеет значения, представленные в виде следующего вектора: у=
[1,2,3,4,5,б,7,8,9,10]. Необходимо вычислить
При этом a=1; b=1,2, 3,...,
10.
Функция
вычисления интеграла методом трапеций будет иметь вид:
>> у=[1, 2, 3, 4, 5, 6,
7, 8, 9, 10];
>> cumtrapz (у)
ans =
0
1.5000 4.0000 7.5000
12.0000 17.5000 24.0000
31.5000 40.0000 49.5000
Пример 2. Пусть необходимо вычислить интеграл вида .
Чтобы
вычислить этот интеграл с помощью функции cumtrapz(), следует сначала вычислить
10 ординат подынтегральной функции, представив их в виде вектора.
Программа
вычисления интеграла с накоплением будет иметь вид:
» х=1:1:10;
» y=3*exp(x)+log(x)+l;
» cumtrapz(у)
ans =
1.0e+004 *
0 0.0017
0.0060 0.0174 0.0481
0.1311 0.3564 0.9684
2.6313 7.1510
Существует модификация данной
функции cumtrapz (х, у). Основным
недостатком метода трапеций является большая погрешность результата вычисления
интеграла.
2. Функция trapz(y). Отличие данной функции от функции cumtrapz(y) состоит в
том, что осуществляется простое интегрирование без накопления, то есть trapz(y) возвращает не столько интегралов, насколько шагов
разбивается область интегрирования, а общее значение интеграла.
Пример 3. Вычислить интеграл
вида с шагом 0,5.
x=1: 0.5: 10;
y=x.*exp(x) + log(x) + 1;
trapz(y)
ans = 4.0657e+005.
Существует
модификация данной функции trapz (х, у).
Следует иметь в виду, что при
вычислении интеграла с помощью функции trapz (х, у) его значение зависит от
шага интегрирования.
Метод
парабол (Симпсона). Для его
реализации в системе Matlab
используются следующие функции:
quad('fun', a, b),
quad('fun', a, b, tol),
quad('fun', a, b, tol, trace),
dblquad('fun', a, b, c, d),
dblquad('fun', a, b, c, d,
tol).
В
этих функциях приняты обозначения:
1) 'fun' - подынтегральная
функция, взятая в одинарные кавычки;
2) а, b - пределы интегрирования;
3)
tol - относительная погрешность,
задаваемая пользователем (по умолчанию tol = 10e -3);
4) с,d -
пределы интегрирования по другой переменной (внешней) при вычислении двойного
интеграла;
5) trace — число, отличное от
нуля, по которому система показывает ход вычислительного процесса.
Рассмотрим
перечисленные функции и приведем примеры.
1. Функция quad('fun',
a, b). Функция вычисляет
пределенный интеграл с погрешностью, не превышающей 10-3.
Пример 4. Подынтегральная функция
имеет вид: f(x) = е х +
х 2 + 2 sin х - 5 .
Необходимо вычислить
интеграл.
Решение:
>> у = ‘ехр(х) + х.^2 +
2*sin(х) –
>> quad (у, 1, 5)
ans
= 167.5415
Функция может быть
представлена одной строкой:
quad (‘ехр(х) + х.^2 + 2*sin(х) –
2. Функция dblquad('fun',a,b,c,d).В функции dblquad ('fun', a, b, с, d) приняты следующие обозначения:
'fun' - это функция с двумя
переменными;
а,
b - пределы по внутренней переменной;
с,
d - пределы по внешней переменной.
Пример 5.
Пусть функция двух переменных имеет вид:
z = x2 + y2 - 2 .Необходимо вычислить интеграл
Решение:
>> z='x.^2 + y.^2 - 2';
>> dblquad (z,1,2,0,3)
ans = 10.
Вычисления
кратных интегралов. Наиболее просто
кратный интеграл вычислить путем интегрирования ответа, полученного от
предыдущего значения интеграла.
Пример.
Пусть необходимо вычислить двойной неопределенный интеграл
Решение.
>> syms x;
>> y=x/(1-x^2);
>> int(int(y))
ans = -1/2*log(x-1)*(x-1)+x-1/2*log(x+1)*(x+1)
Перейти к лабораторной работе 4
Введение в систему научных и инженерных
расчетов Matlab
Целью данной
работы является ознакомление с системой научных и инженерных
расчетов Mat Lab, получение начальных сведений об окне управления,
окне встроенного редактора, ознакомление с простейшими операциями с числами,
векторами и матрицами, элементарными математическими функциями и создание
М-файлов.
Задание на лабораторную работу
1. Осуществить ввод действительного числа 2,15*10-7.
2. Выполнить простую арифметическую операцию 8,3/6*2,7-0,001^2*3,14
3. Осуществить ввод комплексного числа, действительная
часть которого равна 4, а мнимая равна -9.
4. Выполнить простую арифметическую операцию с двумя
комплексными числами, используя одну из дополнительных функций комплексного
аргумента.
5. Вычислить значение одной из элементарных
математических функций (смотри стр. 6 и 7 )
6. Сформировать вектор из 5 любых неотрицательных
элементов.
7. Сформировать матрицу размером 3х4 с 1 по главной
диагонали и нулевыми остальными элементами.
8. В созданной матрице извлечь элемент 2-й строки и
3-столбца
9. Растянуть данную матрицу в один вектор
10.
Создать 2 вектора х и y по 3 элемента каждый и провести операции сложения,
вычитания, транспонирования векторов, и их перемножения
11.
Создать М-файл, реализующий вычисление
следующей функции
Графика в Matlab
Целью данной
работы является ознакомление с графической системой Matlab, получение начальных сведений об окне управления,
окне встроенного редактора, ознакомление с функциями построения двумерных,
полярных и трехмерных графиков.
Задание на лабораторную работу
1.
Построить график функции y = (cos (x/π+ π)+sin(x))/2; на промежутке от -3π до +3π с шагом π/50.
Этот
график выполнить зеленым цветом, точки графика в виде звездочек, линия
сплошная.
2.
Добавить к полученному графику координатную сетку, заголовок и названия осей.
3.
Осуществить вывод функции y = cos (x/π+ π) в виде
ступенчатого графика в диапазоне от 0 до 100 с шагом 0.5
4.
Построить график функции y = ex в виде столбчатой диаграммы на отрезке от -3 до 3.
5. Построить 4 графика произвольных функций в одном
графическом окне.
6.
Построить график
функции z = sin х + 2cos у в диапазоне аргументов
[-3; 3] с шагом h = 0.05.
7.
Выполнить
построение каркаса поверхности и самой поверхности. Исходными данными является
матрица (5х5) из случайных чисел, равномерно распределенных в диапазоне от 0 до
1.
Матричные действия над матрицами. Операции с полиномами.
Целью работы
является ознакомление с матричными
действиями над матрицами в системе Matlab, получение
навыков для выполнения операций с полиномами в системе Matlab.
Задание на
лабораторную работу
1)
Провести операции сложения, вычитания, перемножения произвольных матриц
размером (4х4), умножения матрицы на целое положительное число,
транспонирования матрицы.
2)
Найти обратную матрицу для произвольной матрицы
3)
Используя функцию обращения матрицы и функцию деления матриц решить систему
линейных уравнений:
4)
Найти корни полинома Р(х) = 2х6+3х5+4x4+12x3+5x2+6x+5
5)По
заданному вектору корней полинома (R = [2;
4; 8; 16; 32]) найти его коэффициенты.
6)
Вычислить значение полинома из задания 4 при аргументе равном 5.
7)
Вычислить производную от полинома P(x).
Алгоритмы и технологии вычисления интегралов
Целью работы
является ознакомление с технологиями
вычисления интегралов в системе Matlab.
Задание на лабораторную работу
1)
Провести интегрирование с накоплением (шаг интегрирования равен 0,5) для
интеграла
2)
Вычислить значение интеграла (интегрирование с накоплением) от функции
представленной в виде вектора корней полинома:
Р(х) = х5+8x4+31x3+80x2+94x+20
3) Вычислить
с помощью метода трапеции (шаг интегрирования равен 1) значение интеграла
4) Подынтегральная функция
имеет вид:
f(x) = -е х
+ 8х 4 + 3 ctg х + 1.
Вычислить
методом Симпсона значение интеграла от f(x) с точностью 10-5.
Пределы интегрирования [1; 10].
5) Вычислить методом парабол значение двойного
интеграла от функции z = ln(x)+ln(y).
Пределы интегрирования по 1 переменной [1, 5], а по внешней переменной [2; 4].
6) C помощью аналитического метода
найти значение неопределенного интеграла
7) C помощью аналитического метода
вычислить значение определенного интеграла
8)
Вычислить интеграл
Режим программирования в Matlab
Целью работы является ознакомление с применением команд управления
потоками в системе Matlab.
Задание на лабораторную работу:
1) Имеются 3 переменные a, b и i. Переменная b=15,
переменная a=i/2 и переменная i=1. На каждом шаге i увеличивается на 1. Определить число шагов, за
которое, а достигнет большего, чем b значения.
2) Имеются 2 переменные n и m. Переменная n может принимать одно из двух значений
0 (m=n) или 1 (m=n+n/2). Используя оператор переключения
для переменной n, определить значение переменной m в каждом из этих случаев.
3) Дана матрица размером n x m. Произвести суммирование всех
элементов матрицы кроме элементов последнего столбца и последней строки
(используя вложенные циклы).
4) Создать функцию
зависимости y от k и t в виде:
Если k=1, то y=(k*t)/2
Если k=2, то y=0
Создать меню выбора значения
переменной k, которое может принимать значения 1 или 2.
5) Создать файл-функцию
для расчета факториала числа 8.
1.
В.П. Дьяконов. MATLAB 6.0/6.1/6.5/6.5 + SP1 +
Simulink 4/5. Обработка сигналов и изображений. М.: СОЛОН-Пресс, 2004. -
592 с.
2.
В.Потемкин. Вычисления в среде MATLAB. Диалог-МИФИ.
2004.
3.
Кривилев А. Основы компьютерной математики с
использованием системы MATLAB. Лекс-Книга, 2005.
4.
В.П.Дьяконов. MATLAB 6/6.1/6.5 + Simulink 4/5. Основы
применения. Полное руководство пользователя . СОЛОН-Пресс, 2004.
5.
Н.Мартынов. Введение в MATLAB 6. Кудиц-образ.
2002.