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

Теория фильтрации Лаба4 / Справочная информация

.pdf
Скачиваний:
22
Добавлен:
26.03.2015
Размер:
908.39 Кб
Скачать

матрицы в степень (оператор ".^"), причем для операций поэлементного умножения и деления матрицы должны быть одинакового размера).

Построение простейших графиков функций

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 той же размерности, что и а.

Соседние файлы в папке Теория фильтрации Лаба4