MATLAB - Функции
Функция - это группа операторов, которые вместе выполняют задачу. В MATLAB функции определены в отдельных файлах. Имя файла и функции должны совпадать.
Функции работают с переменными в своей собственной рабочей области, которая также называется local workspace, отдельно от рабочего пространства, к которому вы обращаетесь в командной строке MATLAB, которая называется base workspace.
Функции могут принимать более одного входного аргумента и могут возвращать более одного выходного аргумента.
Синтаксис оператора функции -
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, которая будет принимать два числа в качестве входных данных и возвращать первое число, возведенное в степень второго числа.
Создайте файл сценария и введите в него следующий код -
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
Частные функции
Частная функция - это основная функция, которая видна только ограниченной группе других функций. Если вы не хотите раскрывать реализацию функции (функций), вы можете создать их как частные функции.
Частные функции находятся в subfolders со специальным именем 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
Глобальные переменные
Глобальные переменные могут использоваться более чем одной функцией. Для этого вам нужно объявить переменную глобальной во всех функциях.
Если вы хотите получить доступ к этой переменной из базовой рабочей области, объявите переменную в командной строке.
Глобальное объявление должно произойти до того, как переменная будет фактически использована в функции. Рекомендуется использовать заглавные буквы в именах глобальных переменных, чтобы отличать их от других переменных.
пример
Давайте создадим файл функции с именем average.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)
Когда вы запустите файл, он отобразит следующий результат -
av = 35.500