Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
matlab_final.doc
Скачиваний:
80
Добавлен:
24.09.2019
Размер:
5.3 Mб
Скачать

3.8. Создание функций

До сих пор в примерах использовались только стандартные функции, такие как sin, plot, input и т. п., но язык MATLAB позволяет создавать собственные функции, которые с точки зрения их использования ничем не отличаются от стандартных.

Функции используются для структурирования программы и выделения участков кода, которые могут быть использованы повторно. Также благодаря выделению части кода в функции повышается читаемость программы.

Каждая функция, создаваемая пользователем, должна располагаться в отдельном файле с именем, совпадающим с именем функции и с расширением .m. Первая строка файла должна описывать синтаксис новой функции. Затем могут располагаться необязательные комментарии, описывающие созданную функцию.

Для примера создадим функцию для расчета факториала числа. Так как в MATLAB уже есть функция factorial, поэтому новая функция будет называться myfactorial. В реальных, не демонстрационных, программах по возможности нужно пользоваться стандартными функциями. Чтобы создать функцию myfactorial, нужно создать файл myfactorial.m со следующим содержимым:

function result = myfactorial (n)

%myfactorial Функция возвращает факториал числа n

% В реальных программах лучше использовать встроенную функцию factorial,

% myfactorial сделан для демонстрации создания функций

result = 1;

for index = 2:n

result = result * index;

end

end

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

В первой строке файла с функцией описывается синтаксис функции myfactorial. Здесь function – ключевое слово, обозначающее, что далее будет идти описание функции. Слева от знака «=» располагается одно или несколько значений, которые возвращает функция. В данном случае функция возвращает только одно значение (переменная с именем result), если же функция возвращает несколько значений, то они должны быть перечислены в виде матрицы, что будет продемонстрировано ниже.

Функция myfactorial принимает один параметр n (подразумевается, что n – целое число, для упрощения в тексте функции не будем проверять это предположение).

Для того чтобы скрипты могли использовать новую функцию, файл myfactorial.m должен располагаться в той же папке, что и скрипт, который будет вызывать эту функцию. Теперь мы можем создать отдельный файл скрипта (например, файл test_myfactorial.m), который будет использовать функцию myfactorial. При этом важно, чтобы в качестве рабочей папки (рабочей директории) была установлена папка со скриптами test_myfactorial.m и myfactorial.m. Например, содержимое этого файла может быть следующим (скрипт выводит факториал чисел от 0 до 10):

clear;

for number=0:10

current_str = sprintf ('Факториал числа %d равен %d', ...

number, myfactorial (number) );

disp (current_str);

end

Результат работы этого скрипта выглядит следующим образом (результат будет выведен в окно «Command Window»):

Факториал числа 0 равен 1

Факториал числа 1 равен 1

Факториал числа 2 равен 2

Факториал числа 3 равен 6

Факториал числа 4 равен 24

Факториал числа 5 равен 120

Факториал числа 6 равен 720

Факториал числа 7 равен 5040

Факториал числа 8 равен 40320

Факториал числа 9 равен 362880

Факториал числа 10 равен 3628800

Функции могут не принимать никакие параметры, а также не возвращать значений. Если функция не принимает параметров, то после имени создаваемой функции можно ничего не указывать или указывать пустые скобки. Если функция не возвращает значений, то в объявлении функции имя функции следует сразу за ключевым словом function. В качестве примера приведем функцию square_10, которая выводит квадраты чисел от 0 до 10.

function square_10

for number = 0: 10

current_str = sprintf ('Квадрат числа %d равен %d', ...

number, number ^ 2);

disp (current_str);

end

end

Если вызвать эту функцию с помощью команды square_10 или square_10, то в окно «Command Window» будут выведены следующие строки:

>> square_10

Квадрат числа 0 равен 0

Квадрат числа 1 равен 1

Квадрат числа 2 равен 4

Квадрат числа 3 равен 9

Квадрат числа 4 равен 16

Квадрат числа 5 равен 25

Квадрат числа 6 равен 36

Квадрат числа 7 равен 49

Квадрат числа 8 равен 64

Квадрат числа 9 равен 81

Квадрат числа 10 равен 100

Функция может возвращать несколько значений, в этом случае синтаксис объявления функции выглядит следующим образом:

function [result1, result2, ...] = myfunction (param1, param2, ...)

...

end

Кроме того, в MATLAB есть возможность создавать функции, которые принимают не фиксированное число параметров (как, например, функции printf и fprintf), но этот аспект в данном пособии не рассматривается.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]