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), но этот аспект в данном пособии не рассматривается.
- Оглавление
- Предисловие
- Раздел 1. Основные сведения о среде программирования «matlab»
- Глава 1. Вычисления в командном режиме
- 1.1. Простейшие математические операции в matlab
- 1.2. Переменные
- 1.3. Создание матриц
- 1.4. Доступ к элементам матриц
- 1.5. Операции с матрицами
- 1.6. Ввод, вывод и работа со строками
- Глава 2. Построение графиков в matlab
- 2.1. Построение графика в виде двумерной линии
- 2.2. Оформление графиков
- 2.3. Построение трехмерных графиков
- 2.4. Построение линий уровня
- 2.5. Построение векторного поля
- 2.6. Отображение нескольких графиков в одном окне
- Глава 3. Скрипты в matlab и управляющие конструкции
- 3.1. Создание и выполнение скриптов в matlab
- 3.2. Оператор for
- 3.3. Логические операции
- 3.4. Оператор if / elseif / else
- 3.5. Оператор while
- 3.6. Операторы break / continue
- 3.7. Оператор switch
- 3.8. Создание функций
- Раздел 2. Краткие теоретические сведения и задания Тема 1. Векторный анализ
- 1.1. Элементы векторного анализа
- Задания
- Тема 2. Уравнения Максвелла (произвольная и гармоническая временная зависимость, статические, стационарные и квазистационарные поля)
- 2.1. Система уравнений электродинамики – уравнения Максвелла
- 2.2. Граничные условия. Принцип эквивалентности
- Задания
- Тема 3. Плоские волны
- 3.1. Явление дисперсии и групповая скорость
- Задания
- Тема 4. Граничные задачи, уравнения и методы
- 4.1. К классификации электромагнитных явлений
- Задания
- 4.2. Метод конечных разностей
- 4.2.1. Конечно-разностная аппроксимация
- 4.2.2. Конечно-разностная аппроксимация уравнений Лапласа и Пуассона
- 4.2.3. Конечно-разностная аппроксимация для граничных узлов
- Задания
- Литература