Материал: Sb97309

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Операторы выполняются до тех пор, пока в коде не встретится следующее ключевое слово: case, либо otherwise, либо end. Необязательный опера-

тор otherwise предлагает альтернативу для случая по умолчанию – когда переменная выбора не принимает предложенных значений.

Оператор цикла типа for…end используется для организации вычислений

с заданным числом повторяющихся итераций. Конструкция такого оператора имеет вид

for v=М

операторы end

Параметр М – это чаще всего вектор. В большинстве случаев он представляется с использованием оператора перечисления «:» в виде s:d:e, где s – начальное значение управляющей переменной цикла (v); d – приращение этой переменной; e – конечное значение управляющей переменной. На каждом шаге цикла переменная v последовательно принимает значения, соответствующие компонентам вектора М. Цикл выполняется до тех пор, пока v<=d.

Возможен также вариант, когда М – не вектор, а матрица. Тогда цикл будет работать иначе: на каждом шаге управляющая переменная будет вектором, последовательно совпадающим со столбцами матрицы М. В этом случае в цикле будет столько шагов, сколько имеется столбцов в указанной матрице.

Оператор цикла типа while выполняется до тех пор, пока выполняется условие, указанное в заголовке:

while условие операторы

end

Если есть необходимость в досрочном прерывании выполнения цикла, используется оператор break. Оператор continue досрочно возобновляет цикл. Вне циклов слова continue и break не применяются.

Подробную справку по любой функции или оператору можно получить,

введя команду help имя_функции/оператора.

4.2. Функции пользователя

Создание функций позволяет организовать алгоритм модульной структуры, локализовать часто выполняющиеся операции с разными наборами входных данных, распределить области видимости переменных.

16

f_name

Файлы-функции в языке MATLAB обязательно начинаются с объявления function, после которого указывается имя переменной (или имена нескольких переменных) – выходного параметра, имя самой функции и список ее входных параметров.

Все переменные, используемые в теле файла-функции, являются локальными, т. е. действуют только в пределах тела функции. При этом переменные общего рабочего пространства внутри функции не видны.

Структура файла-функции с одним выходным параметром выглядит следующим образом:

function var=f_name(список_параметров) заголовок

%Основной комментарий

%Дополнительный комментарий

Тело функции, состоящее из любой совокупности операторов var=выражение

Замечания: 1. Оператор var=выражение (и сама переменная var) используются в тех случаях, когда требуется, чтобы функция возвращала некоторый результат.

2. Если выходных параметров больше одного, то необходимо использовать конструкцию типа

function [var1, var2, …] = f_name(список_параметров)

В теле функции должны быть проинициализированы все выходные параметры.

3. Имя функции f_name, указанное в определении функции, может не совпадать с именем файла, но вызов функции будет осуществляться по имени файла. Для лучшей читаемости программы рекомендуется назначать одинаковыми имена файлов и функций в описании (функция должна соответствовать файлу f_name.m).

Как уже было сказано, в файлах-функциях используются локальные переменные. Но наряду с ними нередко возникает необходимость в использовании данных, находящихся в рабочем пространстве MATLAB, или передача данных из одной функции в другую не через выходные параметры. В этих случаях используется понятие глобальных переменных, объявляемых командой

global var1 var2 …;

Чтобы несколько программных модулей могли совместно использовать глобальную переменную, ее идентификатор должен быть объявлен как global

17

во всех этих модулях. Если в функции будут использоваться общие переменные, их необходимо также объявить глобальными в функции.

Внутри файла-функции также допускается описывать и вызывать другие функции, называемые локальными. Программный модуль будет иметь вид

function val = func(var1, var2)

%осн. комментарий

%доп. комментарий xl = sub_func(var1)

операторы

val = выражение

end

val = sub_func(x1) val = выражение

end

Функция sub_func локальная для функции func. Другим функциям и программным модулям локальная функция будет недоступна. При этом у локальной функции область видимости своя, отличающаяся от области видимости «старшей» функции. При наличии локальных функций для обозначения тел функций необходимо писать ключевое слово end.

Кроме файлов-функций в MATLAB также различают файлы-сценарии. Они не имеют ключевого слова function, используют общую область переменных. В прежних версиях пакета MATLAB не допускалось размещение локальных функций внутри сценариев, но в последних версиях такая возможность реализована.

4.3. Индексация матриц

Пакет MATLAB специально предназначен для обработки матриц, или многомерных массивов. Операции над матрицами, реализуемые в других языках с помощью дополнительных библиотек, в MATLAB – встроенные.

Как видно из постановки задачи курсового проекта, информацию о графах удобно хранить в виде матриц, например в виде матрицы смежности и матрицы весов. В то же время, рассмотренные алгоритмы обработки графов не содержат операций над матрицами. Зато многие действия в указанных алгоритмах связаны с получением и обработкой индексов матриц. Рассмотрим возможности MATLAB, связанные с индексацией матриц.

18

При обращении к элементам матриц можно использовать один индекс вместо двух. В памяти матрицы хранятся по столбцам, поэтому увеличение индекса соответствует направлению сверху вниз по первому столбцу, затем по второму, и т. д. Взаимный переход между линейной и матричной (по строкам

истолбцам) индексацией осуществляется функциями sub2ind() и ind2sub().

Вкачестве индексов матрицы можно указывать не только целые числа, но также векторы или матрицы, состоящие из целых чисел. Такая индексация называется блочной, поскольку ее результат – матрица, блоком входящая в индексируемую:

A1

= 2:2:20;

% A1 = [2 4 6 8 10 12 14 16 18 20]

B1

= A1(1:2:9);

% B1 = [2 4 10 14 18]

C1 = B1([2 4]):

% C1 = [4 14]

При обращении к матрицам можно применять индексы типа logical, т. е. имеющие два значения: «истина» (true или 1) и «ложь» (false или 0). При этом элементы с индексами, соответствующими значению «ложь», будут удалены из матрицы:

A2

= 1:9;

% A2

= [1 2 3 4 5 6 7 8 9]

B2

= A2 > 6 | A2 < 3: %

B2 = [1 1 0 0 0 0 1 1 1]

C2 = A2(B2);

%

C2

= [1 2 7 8 9]

Функция find() позволяет определить индексы ненулевых элементов для аргумента числового типа либо индексы истинных элементов, если аргумент относится к логическому типу. Данную функцию можно использовать, чтобы найти индекс элемента матрицы по его значению:

A3 = [1 2 3; 4 5 6; 7 8 9];

 

ind = find(A3 == 6);

% ind = 8 – линейный индекс элемента

 

% со значением 6 в матрице A3

[i, j] = ind2sub(size(A3), ind);

% i = 2, j = 3 – матричный индекс элемента

4.4. Функции ввода-вывода в MATLAB

При разработке программы необходимо предусмотреть способы получения исходных данных и вид представления результатов обработки этих данных. Типовыми источниками информации для программы служат средства ввода (клавиатура, мышь) или файлы. Результаты обработки данных могут выводиться на экран в виде текста и графики, а также в файлы различных форматов. Рассмотрим функции MATLAB для ввода и вывода данных.

Функция input(‘prompt’) позволяет ввести с клавиатуры любые данные, в соответствии с синтаксическими правилами языка программирования

19

MATLAB. Таким способом можно задавать числа, матрицы, выражения, даже вызывать функции, которые в текущем состоянии программы вычисляемы. Если при вызове функции input указать второй параметр ‘s’, данные, задаваемые с клавиатуры, воспринимаются как последовательность символов – вектор-строка.

Вывод на экран осуществляет функция disp(x), в качестве аргумента могут быть указаны любые однотипные данные – числа, матрицы, строки символов, а также структуры. Если необходимо вывести на экран комбинированные данные, например сочетание текста и числовых значений, нужно использовать функцию форматного вывода в строку sprintf(). Данная функция формирует строку, которую затем можно вывести стандартной функцией disp().

Обратная функция sscanf() позволяет считать произвольные данные из строки символов.

Для обмена информацией с файлами (чтение и запись) существует много различных функций, их список можно получить, введя в командном окне команду help iofun. Рекомендуется использовать функции форматного чтения и записи fscanf() и fprintf(), аналогичные рассмотренным выше sscanf() и sprintf(). Для работы с функциями форматного чтения и записи требуется создать идентификатор файла в MATLAB с помощью функции fopen(). После окончания операций чтения и записи его необходимо освободить с помощью функции fclose():

fileid1 = fopen(‘my_file1.txt’, ‘r’); % открытие файла для чтения fileid2 = fopen(‘my_file2.txt’, ‘w’); % открытие файла для записи

A = fscanf(fileid1, ‘%d’, inf); % считывание целых чисел из файла fprintf(fileid2, ‘%d’, A); % запись целых чисел из матрицы А в файл fclose(fileid1); % закрытие файла my_file1.txt

fclose(fileid2); % закрытие файла my_file2.txt

Примечание. Функция fprintf без указания идентификатора файла осуществляет вывод форматированной строки в командное окно.

Средства графического вывода в MATLAB объединены в целую графическую подсистему. Простейшей функцией для вывода двумерного графика является функция plot(). Оформление графического окна (вывод сетки, подписи осей и т. д.) осуществляется функциями grid, title, xlabel, ylabel, subplot, hold, legend и др. Пример программы вывода на экран нескольких графиков представлен далее, соответствующий график показан на рис. 3.1.

20

Источник: https://studfile.net/preview/16439023/