MATLAB - Funções

Uma função é um grupo de instruções que, juntas, executam uma tarefa. No MATLAB, as funções são definidas em arquivos separados. O nome do arquivo e da função deve ser o mesmo.

As funções operam em variáveis ​​dentro de seu próprio espaço de trabalho, que também é chamado de local workspace, separado do espaço de trabalho que você acessa no prompt de comando do MATLAB, que é chamado de base workspace.

As funções podem aceitar mais de um argumento de entrada e podem retornar mais de um argumento de saída.

A sintaxe de uma declaração de função é -

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

Exemplo

A seguinte função chamada mymax deve ser escrita em um arquivo chamado mymax.m . Leva cinco números como argumento e retorna o máximo dos números.

Crie um arquivo de função, denominado mymax.m, e digite o seguinte código nele -

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

A primeira linha de uma função começa com a palavra-chave function. Fornece o nome da função e a ordem dos argumentos. Em nosso exemplo, a função mymax tem cinco argumentos de entrada e um argumento de saída.

As linhas de comentário que vêm logo após a instrução da função fornecem o texto de ajuda. Essas linhas são impressas quando você digita -

help mymax

O MATLAB executará a instrução acima e retornará o seguinte resultado -

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

Você pode chamar a função como -

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

O MATLAB executará a instrução acima e retornará o seguinte resultado -

ans = 89

Funções anônimas

Uma função anônima é como uma função embutida em linguagens de programação tradicionais, definida em uma única instrução MATLAB. Consiste em uma única expressão MATLAB e qualquer número de argumentos de entrada e saída.

Você pode definir uma função anônima diretamente na linha de comando do MATLAB ou em uma função ou script.

Desta forma, você pode criar funções simples sem ter que criar um arquivo para elas.

A sintaxe para criar uma função anônima a partir de uma expressão é

f = @(arglist)expression

Exemplo

Neste exemplo, escreveremos uma função anônima chamada potência, que receberá dois números como entrada e retornará o primeiro número elevado à potência do segundo número.

Crie um arquivo de script e digite o seguinte código nele -

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

Quando você executa o arquivo, ele exibe -

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

Primária e Subfunções

Qualquer função diferente de uma função anônima deve ser definida em um arquivo. Cada arquivo de função contém uma função primária necessária que aparece primeiro e qualquer número de subfunções opcionais que vêm depois da função primária e são usadas por ela.

As funções primárias podem ser chamadas de fora do arquivo que as define, seja da linha de comando ou de outras funções, mas as subfunções não podem ser chamadas da linha de comando ou de outras funções, fora do arquivo de função.

As subfunções são visíveis apenas para a função primária e outras subfunções dentro do arquivo de função que as define.

Exemplo

Vamos escrever uma função chamada quadrática que calcularia as raízes de uma equação quadrática. A função teria três entradas, o coeficiente quadrático, o coeficiente linear e o termo constante. Ele devolveria as raízes.

O arquivo de função quadratic.m conterá a função primária quadrática e o disco de subfunção , que calcula o discriminante.

Crie um arquivo de função quadratic.m e digite o seguinte código nele -

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

Você pode chamar a função acima no prompt de comando como -

quadratic(2,4,-4)

O MATLAB executará a instrução acima e retornará o seguinte resultado -

ans = 0.7321

Funções Aninhadas

Você pode definir funções dentro do corpo de outra função. Elas são chamadas de funções aninhadas. Uma função aninhada contém qualquer um ou todos os componentes de qualquer outra função.

As funções aninhadas são definidas dentro do escopo de outra função e compartilham o acesso ao espaço de trabalho da função contida.

Uma função aninhada segue a seguinte sintaxe -

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

Exemplo

Vamos reescrever a função quadrática , do exemplo anterior, entretanto, desta vez a função de disco será uma função aninhada.

Crie um arquivo de função quadratic2.m e digite o seguinte código nele -

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

Você pode chamar a função acima no prompt de comando como -

quadratic2(2,4,-4)

O MATLAB executará a instrução acima e retornará o seguinte resultado -

ans =  0.73205

Funções Privadas

Uma função privada é uma função primária que é visível apenas para um grupo limitado de outras funções. Se você não deseja expor a implementação de uma função (ões), você pode criá-los como funções privadas.

As funções privadas residem em subfolders com o nome especial private.

Eles são visíveis apenas para funções na pasta pai.

Exemplo

Vamos reescrever a função quadrática . Desta vez, porém, a função de disco que calcula o discriminante será uma função privada.

Crie uma subpasta chamada private no diretório de trabalho. Armazene o seguinte arquivo de função disc.m nele -

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

Crie uma função quadratic3.m em seu diretório de trabalho e digite o seguinte código nela -

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

Você pode chamar a função acima no prompt de comando como -

quadratic3(2,4,-4)

O MATLAB executará a instrução acima e retornará o seguinte resultado -

ans =  0.73205

Variáveis ​​globais

Variáveis ​​globais podem ser compartilhadas por mais de uma função. Para isso, você precisa declarar a variável como global em todas as funções.

Se você deseja acessar essa variável a partir do espaço de trabalho básico, declare a variável na linha de comando.

A declaração global deve ocorrer antes que a variável seja realmente usada em uma função. É uma boa prática usar letras maiúsculas para os nomes das variáveis ​​globais para distingui-las de outras variáveis.

Exemplo

Vamos criar um arquivo de função denominado average.m e digitar o seguinte código nele -

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

Crie um arquivo de script e digite o seguinte código nele -

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

Quando você executa o arquivo, ele exibe o seguinte resultado -

av =  35.500