Теория фильтрации Лаба4 / Справочная информация
.pdfматрицы в степень (оператор ".^"), причем для операций поэлементного умножения и деления матрицы должны быть одинакового размера).
Построение простейших графиков функций
MATLAB обладает мощными средствами визуализации данных. Рассмотрим кратко пример построения с использованием MATLAB функции одной переменной. Построение простейшего графика функции состоит из трех этапов:
-задание вектора значений аргумента;
-вычисление вектора значений функции для заданных значений аргумента;
-вызов команды plot для построения графика функции.
Например (см. рисунок 1.10):
x = [0:0.1:1.0]; |
% формируется вектор x из (1х11) |
элементов |
y = exp(x) .* (10*x); |
% формируется вектор y из (1х11) |
элементов, причем yi = exi * (10*xi) |
plot(x, y); |
% создается окно с областью рисунка, в котором выводится график функции |
Рисунок 1.10 – Результат использования функции plot() для построения графика функции
Если в списке аргументов функции plot() указать только один аргумент, то он будет интерпретирован как вектор значений функции для значений аргумента 0, 1, 2, ...
Если в качестве аргумента значений функции указать не одномерный, а двумерный массив, то для каждого столбца (!) этого массива в области рисунка будет построен свой график. Например, для двумерного массива C = [1 2 3; 4 5 6; 7 8 9] будут построены три графика со значениями функции *1 4 7+, *2 5 8+ и *3 6 9+ и общими значениями аргумента *1 2 3+.
MATLAB поддерживает более 30 способов графического представления двумерных данных и более 20 способов – трехмерных. Детально они описаны в *10].
25
Управление программой на языке MATLAB
Помимо программ с линейной структурой, инструкции которых исполняются строго по порядку, существует множество программ, структура которых нелинейна. При этом ветви программ могут выполняться в зависимости от определенных условий, иногда с конечным числом повторений — циклов, иногда в виде циклов, завершаемых при выполнении заданного условия. Практически любая серьезная программа имеет нелинейную структуру. Для создания таких программ необходимы специальные управляющие структуры. К таким управляющим структурам в языке MATLAB относятся условные операторы, операторы организации цикла, оператор обработки исключений и оператор возврата из функции.
|
Синтаксис |
Пример |
|
|
|
Комментарии |
|
|
|
||||
|
|
Условные операторы: |
|
|
|
|
|
|
|
|
|||
|
|
if A(2, 3) == 0 |
Проверка |
на |
эквивалентность |
значений |
|||||||
|
|
B = A*C; |
выполняется с использованием оператора "=", на |
||||||||||
if logical_expression_1 |
end |
неравенство – оператора "~=" |
|
|
|
|
|||||||
|
Если |
оцениваемое |
логическое |
выражение |
|||||||||
|
statements_1 |
if A |
|||||||||||
|
приводит к получению нескалярного значения, то |
||||||||||||
[elseif logical_expression_2 |
B = A*C; |
||||||||||||
условие |
считается |
истинным, |
если |
все(!) |
|||||||||
|
statements_2] |
end |
|||||||||||
|
элементы аргумента не равны нулю |
|
|
|
|||||||||
[else |
|
|
|
|
|||||||||
if A(1,1) > 0 |
Для |
организации |
"вложенных" |
условных |
|||||||||
|
statements_3] |
||||||||||||
|
B = A*C |
операторов можно использовать оператор elseif |
|||||||||||
end |
|||||||||||||
elseif A(1,1) < 0 |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
B = A*A |
|
|
|
|
|
|
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
switch expression |
switch input_num |
В качестве оцениваемого |
значения |
expression |
|||||||||
case -10 |
может использовать либо скаляр, либо строка. В |
||||||||||||
|
case value_1 |
||||||||||||
|
a = 32; |
отличие от языка С при попадании в одну из |
|||||||||||
|
statements_1 |
||||||||||||
|
case {-5, 0, 5} |
ветвей |
case, управление не |
"проваливается" в |
|||||||||
[ |
case value_2 |
||||||||||||
a = 64; |
нижеследующие |
ветви |
– |
остальные |
case- |
||||||||
|
statements_2] |
||||||||||||
|
case 10 |
варианты |
не выполняются. |
Поэтому |
оператор |
||||||||
|
... |
||||||||||||
|
a = 128; |
break в данном случае не используется. |
|
|
|||||||||
[ |
otherwise |
|
|
||||||||||
otherwise |
Оператор |
switch |
может |
отрабатывать |
|||||||||
|
statements_n] |
||||||||||||
|
a = 0; |
множественные проверки в каждой ветви case |
|||||||||||
end |
|||||||||||||
end |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
Операторы цикла: |
|
|
|
|
|
|
|
|
|
||
|
|
|
Выполнение итераций завершается, когда |
||||||||||
|
|
|
значение переменной цикла становится больше |
||||||||||
|
|
|
(меньше) верхней границы для положительного |
||||||||||
for index=start:inc:end |
for i=2:1:10 |
(отрицательного) модификатора. Допускается |
|||||||||||
|
statements |
a(i) = a(i-1) |
формат записи пределов изменения переменной |
||||||||||
end |
end |
цикла в виде start:end. В этом случае MATLAB |
|||||||||||
|
|
|
использует значение модификатора переменной, |
||||||||||
|
|
|
равное единице. В цикле for можно использовать |
||||||||||
|
|
|
операторы continue и break |
|
|
|
|
|
|||||
while expression |
n = 1; |
В цикле while можно использовать операторы |
|||||||||||
while n < 100 |
continue и break |
|
|
|
|
|
|
|
|||||
|
statements |
|
|
|
|
|
|
|
|||||
|
n = n + 1; |
|
|
|
|
|
|
|
|
|
|
||
end |
|
|
|
|
|
|
|
|
|
|
|||
end |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
Оператор обработки исключений |
|
|
|
Последовательность между операторами try и |
try |
|
catch выполняется до тех пор, пока не |
statements_1 |
|
произойдет ошибка. В этом случае управление |
catch |
|
передается на операторы внутри блока catch. |
statements_2 |
|
Текст сообщения о причине ошибки, |
end |
|
идентификатор ошибки и состояние стека можно |
|
|
получить с использованием функции lasterror |
|
Оператор возврата из функции |
|
|
|
Оператор позволяет вернуть управление из |
return |
|
функции в вызывающую программу до |
|
|
нормального завершения выполнения функции |
Примеры реализации простейших алгоритмов обработки векторных и матричных данных средствами MATLAB
Ниже приводятся примеры вычисления типовых математических операций над векторами и матрицами, которые лежат в основе большинства алгоритмов обработки данных [15, 16].
Скалярное произведение двух векторов одинакового размера. Скалярное произведение векторов a и b длины N, состоящих из действительных чисел, определяется как сумма попарных произведений элементов этих векторов. Для вычисления скалярного произведения можно использовать следующее выражение MATLAB:
res1 = sum(a .* b)
Результатом вычислений будет число res1 (массив размером 1х1).
Модуль вектора. Модуль вектора равен квадратному корню из суммы квадратов всех элементов вектора. На языке MATLAB выражения для вычисления модуля вектора можно записать следующим образом:
res2 = sqrt(sum(a .* a))
Результатом вычислений будет число res2 (массив размером 1х1).
Векторное произведение векторов. Векторное произведение векторов a x b определено в MATLAB только для векторов из трехмерного пространства, т.е. состоящих из трех элементов. Для вычисления векторного произведения может использоваться специальная функция cross:
res3 = cross(a, b)
Результат res3 является вектор в трехмерном пространстве (массив 1х3 или 3х1, в зависимости от того, являлись ли исходные вектора соответственно строками или столбцами).
Вычисление среднего значения вектора. Для вычисления среднего значения вектора необходимо найти сумму всех его элементов и разделить на число элементов (размер вектора). Размер массива a можно определить функцией size(a), однако следует помнить, что функция вернет вектор, содержащий количество значений, равное размерности массива (т.е. будет подсчитано число элементов для каждого измерения массива). Чтобы подсчитать число элементов для какого-то конкретного измерения массива, следует использовать формат вызова size(a, номер_измерения), которая вернет единственное число.
27
Таким образом, требуемый результат для случая, если вектора а – вектор строка, можно получить, применив выражение
res4 = sum(a) / size(a, 2)
Более простым способом получения желаемого является использование встроенной функции MATLAB mean():
res4 = mean(a)
Результатом вычислений в обоих случаях будет число res4 (массив размером 1х1). Вычисления евклидова расстояния между двумя векторами. Евклидово расстояние между
двумя векторами равно квадрату из суммы квадратов поэлементных разностей векторов. res5 = sqrt(sum( (a-b) .^ 2))
Результатом вычислений будет число res5 (массив размером 1х1).
Нахождение суммы элементов матрицы. Как отмечалось выше применение функции суммирования sum() к двумерному массиву приведет к вычислению суммы независимо по каждому столбцу матрицы (т.е. формируется вектор-строка с суммами по столбцам). Чтобы получить итоговую сумму матрицы надо сложить найденные суммы:
res6 = sum(sum(a))
Результатом вычислений будет число res6 (массив размером 1х1).
Сортировка строк в массиве. Рассмотрим случай, когда имеется матрица, все строки которой представляют собой последовательности символов одинаковой длины, например: a = ['abcd '; 'as ', 'asdfg']. Для сортировки строк такой матрицы по возрастанию удобно использовать функцию sortrows():
res7 = sortrows(a)
Результатом вычислений будет массив res7 той же размерности, что и а.