Учебники

MATLAB — Функции

Функция — это группа операторов, которые вместе выполняют задачу. В MATLAB функции определены в отдельных файлах. Имя файла и функции должны совпадать.

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

Функции могут принимать более одного входного аргумента и могут возвращать более одного выходного аргумента.

Синтаксис оператора функции —

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

пример

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

Создайте файл функции с именем mymax.m и введите в него следующий код —

function max = mymax(n1, n2, n3, n4, n5)

%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
   max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
   max = n4;
end
if(n5 > max)
   max = n5;
end

Первая строка функции начинается с ключевого слова function . Это дает название функции и порядок аргументов. В нашем примере функция mymax имеет пять входных аргументов и один выходной аргумент.

Строки комментариев, которые идут сразу после оператора функции, содержат текст справки. Эти строки печатаются при вводе —

help mymax

MATLAB выполнит приведенный выше оператор и вернет следующий результат —

This function calculates the maximum of the
   five numbers given as input

Вы можете вызвать функцию как —

mymax(34, 78, 89, 23, 11)

MATLAB выполнит приведенный выше оператор и вернет следующий результат —

ans = 89

Анонимные функции

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

Вы можете определить анонимную функцию прямо в командной строке MATLAB или в функции или скрипте.

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

Синтаксис для создания анонимной функции из выражения:

f = @(arglist)expression

пример

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

Создайте файл сценария и введите в нем следующий код —

Live Demo

power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)

Когда вы запускаете файл, он отображает —

result1 =  343
result2 =  7
result3 =  1.0000e-10
result4 =  9.5459

Основные и подфункции

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

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

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

пример

Напишем функцию с именем quadratic, которая будет вычислять корни квадратного уравнения. Функция будет принимать три входа: квадратичный коэффициент, линейный коэффициент и постоянный член. Это вернуло бы корни.

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

Создайте файл функции quadratic.m и введите в него следующий код —

function [x1,x2] = quadratic(a,b,c)

%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   % end of quadratic

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end   % end of sub-function

Вы можете вызвать вышеуказанную функцию из командной строки как —

quadratic(2,4,-4)

MATLAB выполнит приведенный выше оператор и вернет следующий результат —

ans = 0.7321

Вложенные функции

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

Вложенные функции определены в области действия другой функции и имеют общий доступ к рабочему пространству содержащей функции.

Вложенная функция имеет следующий синтаксис:

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

пример

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

Создайте файл функции quadratic2.m и введите в него следующий код —

function [x1,x2] = quadratic2(a,b,c)
function disc  % nested function
d = sqrt(b^2 - 4*a*c);
end   % end of function disc

disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end   % end of function quadratic2

Вы можете вызвать вышеуказанную функцию из командной строки как —

quadratic2(2,4,-4)

MATLAB выполнит приведенный выше оператор и вернет следующий результат —

ans =  0.73205

Частные функции

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

Закрытые функции находятся в подпапках со специальным именем private .

Они видны только функциям в родительской папке.

пример

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

Создайте подпапку с именем private в рабочем каталоге. Сохраните в нем следующий файл функции disc.m

function dis = disc(a,b,c) 
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end      % end of sub-function

Создайте функцию quadratic3.m в вашем рабочем каталоге и введите в нее следующий код:

function [x1,x2] = quadratic3(a,b,c)

%this function returns the roots of 
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the 
%constant term
% It returns the roots
d = disc(a,b,c); 

x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end      % end of quadratic3

Вы можете вызвать вышеуказанную функцию из командной строки как —

quadratic3(2,4,-4)

MATLAB выполнит приведенный выше оператор и вернет следующий результат —

ans =  0.73205

Глобальные переменные

Глобальные переменные могут совместно использоваться более чем одной функцией. Для этого вам нужно объявить переменную как глобальную во всех функциях.

Если вы хотите получить доступ к этой переменной из базовой рабочей области, объявите переменную в командной строке.

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

пример

Давайте создадим файл функции с именем medium.m и наберем в нем следующий код:

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end

Создайте файл сценария и введите в нем следующий код —

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)

Когда вы запустите файл, он покажет следующий результат —