Você está na página 1de 30

4 – Ficheiros–M

Introdução
Entrada e saída de dados
Scripts
Funções:
Estrutura básica
Subfunções
Resumo das funções MATLAB

1
Um ficheiro-M não é mais do que um ficheiro de texto que
agrega um conjunto de instruções de código MATLAB.

O MATLAB permite a criação, manipulação e execução de dois


tipos de ficheiros-M, scripts e funções.

Os scripts automatizam uma sequência de instruções de


código, sendo úteis quando se pretende efetuar uma sequência
de comandos com alguma frequência.

As funções admitem parâmetros de entrada e retornam valores,


sendo muito úteis na modularização e reutilização de código.

A janela de comandos do MATLAB permite a introdução


simples, rápida e eficiente de comandos que são executados
sequencialmente e cujo resultado é apresentado
imediatamente.

2
Cada instrução é escrita diretamente na linha de comandos,
sendo executada quando se aciona a tecla Enter. Contudo esta
forma não é prática nem eficaz quando:
Se pretende executar um número significativo de
comandos.
Reproduzir os resultados de uma determinada sequência
de processamento.
Modificar o valor de algumas variáveis.
Reavaliar os resultados obtidos.
O MATLAB consegue ultrapassar as limitações de interação
através da linha de comandos, dado que permite processar
sequências de instruções armazenadas em ficheiro de texto
ASCII com a extensão ‘.m’.
Este ficheiros designados por ficheiros-M (M-Files) podem ser
editados num editor próprio que o MATLAB disponibiliza ou em
qualquer editor de texto básico.

3
Os ficheiros-M podem ser apenas sequências de comandos
(scripts) ou podem ser funções.

Para listar todos os ficheiros MATLAB presentes na diretoria


atual, incluindo os ficheiros-M, existe o comando what (dir ou
ls).
O comando type pode ser usado para visualizar o conteúdo de
ficheiros-M diretamente na janela de comandos.

Quando o ficheiro-M é extenso, a forma mais prática de


visualizar o seu conteúdo na janela de comandos é utilizando o
comando more em conjunto com o comando type.

O comando more ativa/desativa (more on/more off) o controlo


de fluxo de informação apresentada na janela de comandos.

4
Entrada de dados
A função input, na sintaxe dados_entrada=input(‘texto’),
solicita ao utilizador que introduza uma determinada
informação numérica, descrita pelo argumento texto. A
informação introduzida é armazenada na variável
dados_entrada.
No exemplo seguinte, ilustra-se a utilização desta função:
% Solicita informação numérica ao utilizador
a = input('Insira um valor para a variável a:\n');
% Imprime o valor da variável a
fprintf('O valor da variável a é %d\n', a);

Insira um valor para a variável a:


10
O valor da variável a é 10

5
Entrada de dados (Continuação)

Se pretender introduzir como resposta uma string, terá de


utilizar a sintaxe str_entrada = input(‘prompt’, ‘s’). O
argumento ‘s’ identifica a resposta do utilizador como uma
string, que será guardada na variável str_entrada.
% Solicita informação não numérica ao utilizador
nome = input('Introduza o seu nome:\n', 's');
% Imprime valor da variável
fprintf('Bom dia %s\n', nome);

% Solicita informação não numérica ao utilizador


Introduza o seu nome:
António
Bom dia António

6
Saída de dados
O MATLAB disponibiliza algumas funções específicas para a
escrita de dados de saída de um programa.
A função mais simples para escrita de dados é a função disp.
Esta função permite imprimir na janela de comando uma string
de caracteres sem que apareça o nome da variável
correspondente.
Existe uma outra função para escrita de dados que permite um
maior controlo sobre a sua formatação, a função fprintf,
invocada na forma fprintf(format, val1, val2, …).
Para imprimir uma linha de texto através de fprintf basta
invocar a função passando como argumento a string a imprimir,
fprintf(‘texto’).

7
Saída de dados (Continuação)
Se pretender que depois de executada a função o prompt
aponte para a linha seguinte, deverá terminar a string com a
sequência ‘\n’. A tabela seguinte mostra alguns dos caracteres
especiais que poderão ser utilizados na função fprintf.

Símbolo Descrição
\b Backspace
\n Mudança de linha
\r Return
\t Tabulação horizontal (Tab)
\\ Escreve o carácter\
\’ Escreve o carácter ‘
%% Escreve o carácter %

8
Saída de dados (Continuação)
O exemplo seguinte mostra a utilização desta função para
imprimir uma linha de texto. De notar que a escrita de uma
linha de texto pode recorrer a várias chamadas à função fprintf,
bastando a não inclusão do carácter especial ‘\n’ para que o
resultado seja concatenado na linha de saída na janela de
comandos. Com esta técnica o MATLAB imprime, na mesma
linha, as strings passadas como argumento de fprintf.

% Imprimir string numa linha


fprintf('MATLAB - Curso Completo\n');
% Imprimir várias strings numa linha
fprintf('MATLAB'); fprintf(' - '); fprintf('Curso ');
fprintf('Completo\n');

9
Saída de dados (Continuação)
Para definir o formato dos dados, apresenta-se os diferentes
descritores de formato que o utilizador pode passar à função.
Símbolo Descrição
%c Um único carácter
%d Número inteiro
%e ou %E Número real escrito em notação científica
%f Número real com parte decimal
%g Notação mais compacta de %e e %f
%o Número octal sem sinal
%s String de caracteres
%u Número inteiro sem sinal
%x ou %X Hexadecimal (com letras minúsculas ou maiúsculas)

10
Saída de dados (Continuação)
Para ilustrar a grande variedade de formatos que o MATLAB
permite especificar atente-se nos seguintes exemplos. No
código seguinte é usada a função fprintf para imprimir uma
string composta pelo valor de duas variáveis.

% Variáveis a imprimir na string


a = 2; b = pi;
% Criação de string por atribuição
string = 'Variável a = %d Variável b = %g\n';
% Imprimir string
fprintf(string, a, b);
fprintf('Variável a = %d Variável b = %g\n', a, b);
Variável a = 2 Variável b = 3.14159
Variável a = 2 Variável b = 3.14159

11
Saída de dados (Continuação)
No exemplo seguinte ilustra-se a escrita de valores em formato
de número inteiro, considerando diferentes tamanhos do campo
de caracteres.

% Imprimir 1000 no formato de número inteiro


fprintf('Valor = %d\n', 1000) Valor = 1000
fprintf('Valor = %8d\n', 1000) Valor = 1000
fprintf('Valor = %8.6d\n', 1000) Valor = 001000
fprintf('Valor = %-8.6d\n', 1000) Valor = 001000
fprintf('Valor = %+8.6d\n', 1000) Valor = +001000

12
Os scripts são muito úteis para realizar tarefas que envolvem a
execução de muitas instruções. São invocados escrevendo o
seu nome na janela de comando, sem a extensão ‘.m’.
As instruções executadas por um script operam diretamente
sobre os dados da área global de trabalho (workspace). Assim
um script tem acesso a todas as variáveis existentes na área
global de trabalho e qualquer variável por si criada existirá
nessa área.
Estes dados persistem para além do término da execução do
script, exceto se forem explicitamente apagados durante a sua
execução, recorrendo ao comando clear.
Normalmente, a execução de um script não reproduz na janela
de comandos a sequência de instruções processada. No
entanto, o comando echo pode ser usado para ativar (echo on)
ou desativar (echo off) a visualização das instruções à medida
que são executadas.
13
O código seguinte ilustra um script armazenado no ficheiro
temperaturas.m, que calcula estatísticas sobre um vetor de
temperaturas registadas em 10 dias. Para proceder à sua
execução basta selecionar como diretoria atual a diretoria onde
o ficheiro_M reside e escrever na linha de comandos
temperaturas.
% limpar workspace e ecrã
clear;
clc;

temp = [35, 38, 37, 36, 37, 39, 39, 38, 37, 36];

% cálculo das estatísticas


maxima = max(temp);
minima = min(temp);
media = mean(temp);
dp = std(temp);

fprintf('Temperatura Máxima = %d\n', maxima);


fprintf('Temperatura Minima = %d\n', minima);
fprintf('Temperatura Média = %.2f\n', media);
fprintf('Desvio padrão das temperaturas = %.2f\n', dp);

14
Uma função é como uma caixa preta que esconde os passos
necessários para realizar determinada operação.

Sobre a função apenas é fundamental conhecer a operação que


esta realiza, quais os parâmetros de entrada que a função
possui para receber os dados a processar e quais os parâmetros
de saída que a função utiliza para retornar os resultados do
processamento.

Os ficheiros-M podem ser utilizados para criar novas funções


MATLAB, constituindo assim um poderoso mecanismo de
expansão das potencialidades base do MATLAB.

As funções são scripts com algumas características especiais.


Para além de conterem uma sequência de instruções, podem
receber valores (parâmetros de entrada) e retornar valores
(parâmetros de saída), constituindo a principal forma de
partilha de dados com o exterior.
15
Estrutura básica
É muito fácil transformar um script numa função. Apenas é
necessário colocar a declaração da função no início do script,
para definir a sua sintaxe. A forma geral de declaração de uma
função é:

function [parâmetros(s)_saída]=nome_da_função (parâmetro(s)_entrada)

A palavra-chave function é uma palavra reservada na linguagem


de programação MATLAB e é usada para a criação de funções.
Em caso de dúvida na criação de variáveis ou funções, existe a
função iskeyword que permite determinar se a string que lhe é
passada como parâmetro de entrada é uma palavra reservada.

16
Estrutura básica (Continuação)
O exemplo seguinte transforma o script apresentado
anteriormente numa função. É criada a função ftemperaturas e
armazenada no ficheiro-M com o mesmo nome. O vetor de
temperaturas é agora passado como parâmetro de entrada e as
estatísticas calculadas são retornadas como parâmetros de
saída.

function [maxima, minima, media, dp] = ftemperaturas(temp)


% cálculo das estatísticas
maxima = max(temp); minima = min(temp);
media = mean(temp); dp = std(temp);

17
Estrutura básica (Continuação)
Admitindo que o vetor temp já existe na área global de trabalho
do MATLAB, para invocar a função executamos o comando
ftemperaturas(temp) diretamente na linha de comandos,
ignorando o retorno da função. Caso se pretenda armazenar as
estatísticas retornadas é necessário indicar variáveis para esse
efeito, agrupadas num vetor linha.
% Definição do argumento de entrada
temp = [35, 38, 37, 36, 37, 39, 39, 38, 37, 36];
% Chamada da função
[max, min, med, desvio] = ftemperaturas(temp)
max = 39
min = 35
med = 37.2000
desvio = 1.3166

18
Estrutura básica (Continuação)
Existem algumas regras que devem ser respeitadas quando se
constrói uma função:
 O nome de uma função tem de começar por uma letra,
seguindo-se uma qualquer combinação de letras, dígitos e
underscores ‘_’.
 O código da função deve ser guardado num ficheiro com o
nome da própria função e com a extensão ‘.m’.
 A declaração da função define a sua sintaxe e tem de estar
no início do ficheiro.
 Uma função pode aceitar ou retornar zero ou mais
parâmetros.
 O texto que se segue à declaração da função, na forma de
comentário é opcional.

19
Estrutura básica (Continuação)
 É possível invocar scripts e outras funções a partir de uma
função.
 O comando return pode ser usado para forçar o retorno da
função em qualquer ponto de execução, seja intermédio ou
final.
 O comando warning pode ser usado para imprimir na janela
de comandos uma mensagem de aviso, sinalizando que
ocorreu alguma situação anómala que não é demasiado
grave ao ponto de impedir a execução da função, mas que
pode ter influência negativa sobre os resultados obtidos.
 O comando error pode ser usado para abortar a execução de
uma função em caso de erro severo.
 Uma função termina quando é atingida a última linha do
ficheiro-M, a declaração de uma subfunção ou o comando
return.

20
Subfunções
O MATLAB permite que seja definida mais do que uma função
dentro do mesmo ficheiro-M. A primeira função definida no
ficheiro é considerada a função principal, visível no exterior e
cujo nome deve ser atribuído ao ficheiro-M.

As funções seguintes são as subfunções, invisíveis no exterior.


Logo, apenas podem ser invocadas pela função principal ou por
outras subfunções que estejam definidas dentro do mesmo
ficheiro-M.

O propósito da função principal é mais alargado, podendo ser


invocada a partir da linha de comandos, de scripts ou de outras
funções. De notar que, tal como a função principal, cada
subfunção é executada no seu próprio espaço de dados.

21
Subfunções (Continuação)

As subfunções são utilizadas para melhor estruturar sequências


de processamento e algoritmos. Normalmente realizam tarefas
que apenas têm significado no contexto em que são definidas.
O uso de subfunções evita a proliferação de ficheiros-M.

A declaração de uma subfunção é semelhante à declaração da


função principal e na sua construção aplicam-se as mesmas
regras básicas da construção de funções.

22
Subfunções (Continuação)
O bloco seguinte ilustra de forma genérica a declaração de uma
função chamada funcao_principal, que faz uso de uma
subfunção chamada sub_funcao.

function [saida] = funcao_principal (arg1, arg2)


% … (Sequência de comandos da Função Principal)
% Chamada da subfunção
[val1,val2] = sub_funcao1(a, b, c);
% … (Mais comandos da Função Principal)

% Declaração da subfunção
function [m, n] = sub_funcao1(x, y, z)
% … (Sequência de comandos da Subfunção) …

23
Elementos
function Palavra reservada para definição de funções MATLAB
Lista de tamanho variável que agrupa argumentos de entrada de
varargin
uma função
Lista de tamanho variável que agrupa argumentos de saída de
varargout
uma função
@ Usado na criação de referência de função (handle)
Palavra reservada para definição de variável global (definida no
global
espaço de trabalho global e partilhada por todas as funções)
Palavra reservada para definição de variável persistente (variável
persistent local à função em que é declarada, mas cujo valor se mantém
entre invocações dessa mesma função)

Funções Gerais
echo Ativa/desativa visualização dos comandos executados

24
Funções Gerais (continuação)
Ativa/desativa a impressão de mensagens de aviso. Imprime
warning
mensagens de aviso na janela de comandos
lastwarn Obtém a última mensagem de aviso
error Imprime mensagem de erro na janela de comandos
lasterr Retorna a última mensagem de erro
Retorna a última mensagem de erro, acompanhada de
lasterror
informação associada
Atribui valor a uma variável existente num determinado
assignin
espaço de trabalho (global ou da função em execução)
isglobal Determina se uma variável foi definida como global
Determina se uma string é uma palavra reservada. Imprime
iskeyword
a lista de palavras reservada
Determina o número máximo de caracteres que o nome de
namelengthmax
uma variável ou função pode ter
Determina se uma string constitui um nome válido para uma
isvarname
variável
mfilename Retorna o nome do ficheiro-M em execução
25
Funções Inline
inline Cria função inline

argnames Retorna o nome dos argumentos de entrada de uma função inline

Retorna uma representação textual da fórmula implementada


formula
pela função inline

Semelhante à fórmula (sobrecarga da função char para objetos do


char
tipo inline)

fcnchk Converte expressão matemática em função inline

26
Funções de Funções
eval Executa representação textual de uma expressão MATLAB
Semelhante a eval, à exceção de que todas as mensagens
evalc enviadas para a janela de comandos são capturadas e
retornadas num vetor de caracteres
Executa representação textual de uma expressão MATLAB,
evalin num determinado espaço de trabalho (global ou da
função em execução)
feval Executa função identificada por uma referência (handle)
Vetoriza expressão matemática ou função inline, para
vectorize
otimização de código
func2str Converte referência de função (handle) em string
str2func Converte string em referência de função (handle)

27
Funções MATLAB
Determina o número de argumentos de entrada passados a
nargin
uma função
Determina a número de argumentos de saída passados a uma
nargout
função
Valida o número de argumentos de entrada passados a uma
nargchk
função
Valida o número de argumentos de saída passados a uma
nargoutchk
função
Retorna o fluxo de execução a quem invocou a função
return
(termina a execução da função)

28
Funções de depuração de erros
dbstop Define ponto de paragem
dbclear Elimina ponto de paragem
dbstatus Lista todos os pontos de paragem definidos
dbstep Executa uma ou mais linhas de código
dbcont Retorna o normal fluxo de execução
dbup Altera o espaço e dados no contexto atual
dbdown Altera o espaço e dados no contexto atual
dbstack Lista a sequência de invocações
dbtype Mostra ficheiro-M, com numeração das linhas
dbmex Ativa a depuração de ficheiros-MEX
dbquit Sai do modo de depuração, abortando o fluxo de execução suspenso

29
 Morais, V. e Vieira, C. (2013) MATLAB Curso
Completo, FCA.
 Chapman, Stephen J., (2015) MATLAB
Programming for Engineers, 5th Edition,
Thomson Learning.
 Site de suporte da MathWorks
www.mathworks.com

30

Você também pode gostar