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