function

Объявите имя функции, входы и выходы

Описание

пример

function [y1,...,yN] = myfun(x1,...,xM) объявляет функцию с именем myfun который принимает входы x1,...,xM и возвращает выходы y1,...,yN. Этот оператор объявления должен быть первой исполняемой линией функции. Допустимые имена функции начинаются с буквенного символа и могут содержать буквы, цифры или символ нижнего подчеркивания.

Вы можете сохранить свою функцию:

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

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

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

  • Любая функция в файле содержит вложенную функцию.

  • Функция является локальной функцией внутри файла функции, и любая локальная функция в файле использует end ключевое слово.

  • Функция является локальной функцией в файле скрипта.

Примеры

свернуть все

Задайте функцию в файле с именем average.m который принимает вектор входа, вычисляет средние значения и возвращает один результат.

function ave = average(x)
    ave = sum(x(:))/numel(x); 
end

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

z = 1:99;
ave = average(z)
ave =
    50

Задайте функцию в файле с именем stat.m это возвращает среднее и стандартное отклонение вектора входа.

function [m,s] = stat(x)
    n = length(x);
    m = sum(x)/n;
    s = sqrt(sum((x-m).^2/n));
end

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

values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat(values)
ave =
   47.3400
stdev =
   29.4124

Задайте скрипт в файле с именем integrationScript.m который вычисляет значение интегранда в$2\pi/3$ и вычисляет площадь под кривой от 0 до. $\pi$Включите локальную функцию, которая определяет интегранд,.$y = \sin(x)^3$

Примечание. Включение функций в скрипты требует MATLAB ® R2016b или более поздней версии.

% Compute the value of the integrand at 2*pi/3.
x = 2*pi/3;
y = myIntegrand(x)

% Compute the area under the curve from 0 to pi.
xmin = 0;
xmax = pi;
f = @myIntegrand;
a = integral(f,xmin,xmax)

function y = myIntegrand(x)
    y = sin(x).^3;
end
y =

    0.6495


a =

    1.3333

Задайте две функции в файле с именем stat2.m, где первая функция вызывает вторую.

function [m,s] = stat2(x)
    n = length(x);
    m = avg(x,n);
    s = sqrt(sum((x-m).^2/n));
end

function m = avg(x,n)
    m = sum(x)/n;
end

Функциональные avg является local function. Локальные функции доступны только другим функциям в том же файле.

Вызов функции stat2 из командной строки.

values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat2(values)
ave =
   47.3400
stdev =
   29.4124

Задайте функцию, которая ограничивает вход числовым вектором, который не содержит Inf или NaN элементы. Эта функция использует arguments ключевое слово, которое действительно для MATLAB® версии R2019b и более поздние.

function [m,s] = stat3(x)
    arguments
        x (1,:) {mustBeNumeric, mustBeFinite}
    end
    n = length(x);
    m = avg(x,n);
    s = sqrt(sum((x-m).^2/n));
end

function m = avg(x,n)
    m = sum(x)/n;
end

В arguments кодовый блок, (1,:) указывает, что x должен быть вектором. Функции валидации, {mustBeNumeric, mustBeFinite}ограничьте элементы в x к числовым значениям, которые не Inf или NaN. Для получения дополнительной информации см. Раздел «Валидация аргументов функции».

Вызов функции с вектором, который содержит элемент, который NaN нарушает декларацию входного параметра. Это нарушение приводит к ошибке, выдаваемой mustBeFinite функции валидации.

values = [12.7, 45.4, 98.9, NaN, 53.1];
[ave,stdev] = stat3(values)
Invalid input argument at position 1. Value must be finite.
Представлено до R2006a