Пользовательские функции.
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Курс «Программирование»
Лекция 6.
Пользовательские функции.
Преподаватель:
Лысенко Александр Юрьевич
Национальный исследовательский университет «МИЭТ». Институт Биомедицинских Систем
Организационная часть
• Допуск к лабораторной работе: тест в Moodle.
o Пропуск теста: -2 балла.
o Меньше 50% правильных ответов: -1 балл.
Слайд 2/20
Примеры функций
Функция
Описание
Пример
size
Размер массива вдоль N-ой размерности
sum
Суммирование элементов матрицы
sum(x)
max
Поиск максимального значения
max(x)
min
Поиск минимального значения
min(x)
mean
Среднее значение матрицы
mean(x)
diff
Разность между элементами
diff(x)
abs
Модуль числа
abs(x)
Функция
Описание
size(x, N)
Пример
length
Длина строки
length(x)
strfind
Поиск подстроки Y в строке X
strfind(x, y)
strsplit
Деление строк на подстроки по строке Y
strsplit(x, y)
lower
Преобразовать все символы в строчные
lower(x)
upper
Преобразовать все символы в прописные
upper(x)
Слайд 3/20
"Простая" функция
"Простая" функция – код .m файла.
Слайд 4/20
Объявление главной функции
Главная функция – функция, чьё имя соответствует имени .m файла. В
случае именованных функций наличие такой функции строго обязательно
и выполнение программы будет начинаться с неё.
Синтаксис:
function имя_файла()
% код функции
end % опционально
Пример:
function say_hello()
disp('hello');
end
Вызов функции (использование):
say_hello();
% 'hello'
say_hello;
% 'hello'
Слайд 5/20
Создание локальных функций
Локальная функция (подфункция) – функция, которая расположена
в одном файле после главной функции. Таких функций может быть
неограниченное число.
Синтаксис:
function имя_функции()
% код функции
end
Пример:
% say_hello.m
function say_hello()
disp('hello');
say_world()
function say_world()
disp(', world');
Слайд 6/20
Функция с входными параметрами
Синтаксис:
function имя_функции(входные параметры через запятую)
% код функции
end
Пример:
function my_sum(a, b, c)
sum = a + b + c;
disp(num2str(sum));
end
Вызов функции:
my_sum(2, 4, 6);
% 12
d = 14;
e = 2;
f = -7;
my_sum(d, e, f);
% 9
Слайд 7/20
Функция с выходными параметрами
Синтаксис:
function [выходные параметры через запятую] = имя_функции()
% код функции
end
Пример:
function result = parse_input()
result = input('Введите число: ', 's');
result = str2double(result);
end
Вызов функции:
a = parse_input();
Слайд 8/20
Функция с несколькими выходными параметрами
Синтаксис:
function [выходные параметры через запятую] = имя_функции()
% код функции
end
Пример:
function [sum, dif] = two_in_one()
k = str2double(input('Введите 1 число: ', 's'));
n = str2double(input('Введите 2 число: ', 's'));
sum = k + n;
dif = k – n;
end
Вызов функции:
[x, y] = two_in_one();
Слайд 9/20
Функция с входными и выходными параметрами
Синтаксис:
function [выходные параметры] = имя_функции(входные параметры)
% код функции
end
Пример:
function [n] = positive_count(array)
n = array(array > 0);
end
Вызов функции:
positive = positive_count([1, 4, -5, 8; -2, 73, 14, -9]);
% 5
m = positive_count(rand(10));
% 100
Слайд 10/20
Изменение входного параметра
Синтаксис:
function [переменная] = имя_функции(переменная)
% код функции
end
Пример:
function [text] = parse_input(text)
text(text == ' ') = '';
end
Вызов функции:
string = input('Введите строку: ');
string = parse_input(string);
Слайд 11/20
Пропуск выходных параметров
Пример:
function [sum, dif] = two_in_one()
k = str2double(input('Введите 1 число: ', 's'));
n = str2double(input('Введите 2 число: ', 's'));
sum = k + n;
dif = k – n;
end
Вызов функции:
[~, y] = two_in_one();
[x] = two_in_one();
x = two_in_one();
two_in_one();
Слайд 12/20
Выход из функции
Синтаксис:
return
Пример:
function [phantom] = make_phantom(x, y)
if size(x) ~= size(y)
disp('Error: size(x) ~= size(y)')
return
end
phantom = x .* y;
end
Слайд 13/20
Область видимости переменной
Область видимости переменной (ОВП) – часть кода, в котором
существует переменная. Область видимости переменной определяется
функцией, в которой была создана переменная с момента её объявления.
По окончанию области видимости переменной переменная уничтожается
(удаляется из памяти компьютера).
Пример:
function [x, y] = encode_plot(x, y, t) % начало ОВП x, y, t
m = meshgrid(t); % начало ОВП m
x = x .* m;
y = y ./ m;
end % конец ОВП x, y, t, m. Они не существуют вне этой ф-и!
function [phantom] = make_phantom(t) % начало ОВП t
x = sin(t); % начало ОВП x
y = cos(t); % начало ОВП y
phantom = x .* y; % начало ОВП phantom
end % конец ОВП x, y, t, phantom. Они больше не существуют!
Слайд 14/20
Глобальные переменные
Глобальная переменная – переменная, область видимости которой
является вся программа. Глобальная переменная должна быть объявлена
до её использования.
Синтаксис:
global имя_переменной
Пример:
function make_phantom(x, y)
global phantom;
phantom = x .* y;
end
function show_phantom(x, y)
global phantom;
surf(x, y, phantom);
end
Слайд 15/20
Функция с произвольным количеством входных параметров
Функция с произвольным количеством входных параметров –
функция, которая может принимать любое количество входных
параметров. У такой функции есть одна явная переменная varargin,
которая является массивом ячеек с входными аргументами и неявная
переменная nargin, в которой содержится число переданных аргументов.
Синтаксис:
function [выходные параметры] = имя_функции(varargin)
% код функции
end
Пример:
function [phantom] = make_phantom(varargin)
if nargin ~= 2
disp('make_phantom usage: make_phantom(x, y)')
return
end
phantom = x .* y;
Слайд 16/20
Функция с произвольным количеством входных параметров (2)
Пример:
function [sum] = sum_variables(a, b, varargin)
sum = a + b;
for i = 1:nargin-2 % size(varargin, 2)
sum = sum + varargin{i};
end
end
Вызов функции:
sum_variables(1, 2, 3);
% 6
sum_variables(7, -2, 6, 11); % 22
a = -5; b = -3;
sum = sum_variables(a, b);
% -8
k = sum_variables(a, b, 4);
% -4
sum_variables(b);
% ошибка
Слайд 17/20
Функция с произвольным количеством выходных параметров
Функция с произвольным количеством выходных параметров –
функция, которая может возвращать любое количество выходных
параметров. При этом varargout должен быть массивом ячеек.
Синтаксис:
function [varargout] = имя_функции()
% код функции
end
Пример:
function [varargout] = spread_array(array)
for i = 1:length(array)
varargout{i} = array(i);
end
end
Вызов функции:
[a, b, c] = spread_array(1:3);
Слайд 18/20
Анонимные функции
Анонимная функция – локальная функция, у которой отсутствует имя.
Анонимная функция связывается с переменной, через которую она будет
вызываться. При этом анонимная функция может иметь множество
входных параметров, но только один выходной параметр. Кроме этого,
анонимная функция может содержать только одну операцию.
Синтаксис:
переменная = @(входные параметры) операция
Пример:
parabola = @(a, b, c, x) a*x.^2 + b*x + c;
Вызов функции:
parabola = @(a, b, c, x) a*x.^2 + b*x + c;
a = -3.9;
b = 52;
x = 1;
y = parabola(a, b, 0, x);
Слайд 19/20
Рекурсивные функции
Рекурсивная функция – функция, которая вызывает саму себя.
Пример:
function [result] = factorial(n)
if n > 1
result = n * factorial(n-1);
else
result = 1;
end
end
Вызов функции:
disp(factorial(4));
Слайд 20/20
Список использованных источников
1. Документация MatLab
https://www.mathworks.com/help/matlab/
2. Документация MatLab на русском языке
https://docs.exponenta.ru/R2019a/matlab/index.html
Слайд 21/20