Você está na página 1de 86

Introdução à Programação 4

1. INTRODUÇÃO

O Matlab é um software interactivo poderoso orientado para o cálculo numérico,


desenvolvido no início dos anos 70. O nome Matlab resulta da conjugação das
palavras MATrix e LABoratory e deve-se ao facto do seu elemento básico de
informação ser a matriz, e em que qualquer variável que se defina é uma matriz. O
facto das matrizes poderem ser criadas sem dimensionamento prévio, aliado ao grande
conjunto de funções internas (também designadas funções built-in) de que dispõe,
permite a resolução de muitos problemas numéricos de uma forma mais simples e
rápida do que se gastaria para desenvolver programas semelhantes em Fortran, C ou
Pascal. Ao contrário destas linguagens de programação mais tradicionais, o Matlab
permite que nos preocupemos exclusivamente com os conceitos técnicos, sem
necessidade de preocupação com a gestão de memória ou com a declaração do tipo de
variáveis.
Este software, para além de disponibilizar uma linguagem de programação de alto
nível própria, fornece um ambiente de computação com excelentes capacidades
gráficas e com uma grande série de ferramentas (funções) comuns a diversas áreas de
conhecimento. Além disso, o Matlab disponibiliza uma série de ferramentas
adicionais (as toolboxes), organizadas segundo diversas áreas científicas, que formam
uma colecção de programas especiais projectados para resolver problemas
específicos. Como exemplos de toolboxes que integram o Matlab temos: Matemática
Simbólica – Manipulação simbólica de funções, Processamento de Sinal – Projecto e
análise de filtros (analógicos e digitais), Sistemas de Controlo – Projecto e análise de
sistemas de controlo, Processamento de Imagem – Manipulação de imagem, e
Estatística – Análise de dados estatísticos.
Outro aspecto muito importante do Matlab é o facto de permitir criar facilmente
gráficos bidimensionais e tridimensionais, dos mais diversos tipos. O Matlab permite
também a criação de interfaces gráficas, que facilitam a interacção do utilizador com
as aplicações. Tais interfaces podem utilizar menus, botões, caixas de diálogo,
animações, texto e muitos elementos gráficos.

1.1 AMBIENTE DE TRABALHO

Após iniciar uma sessão Matlab abre-se uma janela semelhante à mostrada na
Figura 1.1, designada por Matlab Desktop. A figura contém três pequenas sub-janelas,
que se podem activar/desactivar a partir da opção Desktop do menu principal:
Command Window, Current Directory Window e Command History Window. Este é
o modo de abertura padrão (por defeito) do Matlab.
No entanto, o Matlab pode por meio de funções internas, apresentar outro tipo de
janelas. No total, o Matlab pode apresentar os seguintes tipos de janelas:
 Janela de Comandos (Command Window) – É a janela principal, inicializa
variáveis, e permite executar comandos e funções Matlab;
 Historial de Comandos (Command History) – Janela que apresenta o
histórico dos comandos mais recentes digitados na Janela de Comandos;
 Navegador de Directorias (Current Directory) – Permite alterar a directoria
de trabalho (corrente), bem como visualizar os respectivos ficheiros;
Introdução à Programação 5

 Espaço de dados (Workspace) – Permite visualizar e manipular o conteúdo


do espaço de dados global;
 Ajuda (Help) – Permite obter ajuda na utilização do programa;
 Janela Gráfica (Figure Window) – Aberta sempre que um comando gráfico
é executado, apresenta o gráfico criado por esse comando;
 Editor – Usada para escrever, editar e depurar (debug) programas;

FIGURA 1.1 – Ambiente de Trabalho

Os pontos seguintes descrevem como se deve trabalhar com mais pormenor com a
Janela de Comandos e com o Editor.

1.1.1 JANELA DE COMANDOS

É a janela principal do Matlab. Pode ser utilizada para inicializar


variáveis, executar comandos, abrir outras janelas, bem como executar programas
Matlab que são gravados como ficheiros-M (assim designados, porque lhes são
atribuídas extensões .m ao serem salvos).
Um exemplo simples de utilização da Janela de Comandos é mostrado na Figura
1.2.
Introdução à Programação 6

FIGURA 1.2 – A Janela de Comandos

Quando o sistema está preparado para receber comandos apresenta o símbolo >>
na Janela de Comandos, designado por prompt.
Quando o comando é digitado e a tecla ENTER pressionada, o comando é
executado. Normalmente, é digitado um comando por linha; contudo, se pretendermos
que vários comandos sejam digitados na mesma linha, eles devem ser separados por
vírgulas. Quando a tecla ENTER é pressionada, os comandos são executados pela
ordem com que foram digitados, da esquerda para a direita.
Um comando anteriormente digitado pode ser chamado outra vez através das
teclas de direcção do teclado (↑) e (↓). Assim que o comando desejado for exibido no
prompt, é possível modificá-lo (se necessário) e executá-lo.
Se um comando for muito extenso de modo que não caiba numa linha, pode-se
digitar reticências (…) e pressionar a tecla ENTER para continuar na próxima linha.
A continuação de um comando no Matlab pode ocupar 4.096 caracteres após a linha
inicial.
Se no final de um comando, digitar um ponto e vírgula (;) o resultado de saída é
ocultado.
Os comentários são usados para adicionar descrições ou explicar algum ponto
particular do programa. Quando o símbolo de percentagem (%) é digitado no início de
uma linha de comando, o programa considera a linha como um comentário. Significa
que, quando a tecla ENTER for pressionada, a linha não será executada. O símbolo %
seguido de um comentário, também pode ser digitado após um comando. Tal, não
produzirá qualquer efeito na execução desse comando.
Introdução à Programação 7

A Janela de Comandos pode ser limpa através do comando clc, ou através da


opção Clear Command Window no menu Edit, tendo-se assim acesso a uma janela de
comandos com apenas um prompt no início da janela. De notar que no entanto, o
comando não altera o que foi executado anteriormente. Por exemplo, se foram
declaradas variáveis antes do comando clc, elas continuam existindo após esse
comando e podem ser utilizadas.

1.1.2 EDITOR DE CÓDIGO – FICHEIROS M

Embora todos os comandos do Matlab possam ser executados na


Janela de Comandos, não é conveniente utilizá-la quando, pretendemos executar
comandos em série, e fundamentalmente, quando esses comandos estiverem
encadeados logicamente entre si, ou seja, quando constituírem um programa. Como
vimos no ponto anterior os programas Matlab são gravados como ficheiros-M. Estes
ficheiros de comandos – designados por ficheiros-M – são criados num editor de
código incorporado no Matlab. Quando o ficheiro é chamado, os comandos vão sendo
executados pela ordem em que estão listados no ficheiro.
Existem dois tipos de ficheiros-M: scripts e funções. Os scripts são simplesmente
uma colecção de comandos Matlab, sendo as variáveis utilizadas globais, o que
significa que são acessíveis no ambiente de trabalho Matlab mesmo após a sua
execução, ou seja, podem ser utilizadas ou ter o seu valor modificado a qualquer
momento por uma aplicação que faça uso delas. As funções aceitam argumentos de
entrada e retornam valores de saída depois da sua execução. As variáveis utilizadas
são internas à própria função, o que significa que não são reconhecidas no ambiente
de trabalho Matlab.
Para executar um programa basta digitar o respectivo nome na Janela de
Comandos, ou, então clicando no ícone Run. Mas antes disso, o utilizador deve-se
certificar que o Matlab consegue encontrar o caminho onde está o ficheiro; para tal, o
utilizador deve seleccionar a directoria na janela Current Directory, ou digitando o
comando cd seguido do caminho onde se encontra a directoria. A qualquer momento
pode-se interromper a execução do código, pressionando as teclas CTRL + C.
O editor de código permite também a depuração (debug) de ficheiros-M. O
debugger permite identificar possíveis erros no código do programa.

1.2 OPERAÇÕES ARITMÉTICAS COM ESCALARES

Neste ponto estuda-se apenas as operações aritméticas com escalares


(números). Os números podem ser usados directamente em cálculos aritméticos
(como numa calculadora) ou então podem ser atribuídos às variáveis a serem
utilizadas em cálculos futuros.
As operações aritméticas são efectuadas recorrendo aos símbolos apresentados na
tabela seguinte:

Operação Símbolo Exemplo Precedência


Exponenciação ^ 6^5 1
(Mais alta)
Multiplicação * 6*5 2
Divisão à direita / 6/5 2
Introdução à Programação 8

Divisão à \ 6\5 = 5/6 2


esquerda
Adição + 6+5 3
Subtracção - 6-5 3

De notar que os símbolos, exceptuando o da divisão à esquerda, são os mesmos


utilizados na maioria das calculadoras. Em se tratando de escalares, a divisão à
esquerda é a operação inversa da divisão à direita.
Quando se escrever uma expressão aritmética dever-se-á ter em atenção, as
precedências das várias operações que constituem a referida expressão, tal como é
definido na tabela acima. A exponenciação é a operação de maior precedência
seguindo-se as operações de multiplicação e divisão e, por último, as operações de
adição e subtracção. Se duas ou mais operações tiverem a mesma precedência, a
operação mais à esquerda será executada primeiro. Tal como nas calculadoras, estas
precedências podem ser alteradas recorrendo a parêntesis, já que, as expressões dentro
dos parêntesis são calculadas primeiro.

1.3 FORMATO DE SAÍDA

O utilizador pode controlar o formato numérico dos dados de saída através


do comando format, que afecta somente o modo como os dados são mostrados, e não
como o Matlab calcula e salva os números (o Matlab efectua todas as operações em
dupla precisão). O formato padrão de saída para os valores numéricos é o ponto fixo
com quatro dígitos decimais (denominado short). Porém, se todos os elementos da
matriz são inteiros exactos, a matriz é mostrada num formato sem qualquer ponto
decimal.
Uma vez digitado um comando format, todos os resultados exibidos no ecrã
seguem esse formato. Os formatos mais utilizados estão descritos na tabela abaixo:

Comando Descrição Exemplo


format short Notação em ponto fixo com 4 >> 826/9
dígitos decimais para: ans =
0.001≤número≤1000. Caso 91.7778
contrário, o formato é short e.
format long Notação em ponto fixo com 14 >> 826/9
dígitos decimais para: ans =
0.001≤número≤100. Caso contrário, 91.77777777777777
o formato é long e.
format short e Notação científica com 4 dígitos >> 826/9
decimais. ans =
9.1778e+001
format long e Notação científica com 15 >> 826/9
dígitos decimais. ans =
9.177777777777777e+001
format short g É escolhido o melhor formato >> 826/9
em 5 dígitos, entre a notação de ans =
ponto fixo ou ponto flutuante 91.778
(científica).
format long g É escolhido o melhor formato >> 826/9
Introdução à Programação 9

em 15 dígitos, entre a notação de ans =


ponto fixo ou ponto flutuante
(científica). 91.7777777777778
format bank Dois dígitos decimais. >> 826/9
ans =
91.78
format Elimina espaços para permitir
compact que mais linhas de informação sejam
mostradas no ecrã.
format loose Adiciona espaços entre linhas
(oposto ao format compact)
Format rat Fracção >> 0.3
ans =
3/10

1.4 VARIÁVEIS

As declarações no Matlab são na maior parte dos casos da forma

>> Nome_variável = expressão

ou simplesmente,

>> expressão

As expressões são compostas de operadores e outros caracteres especiais, de


funções e dos nomes das variáveis. A avaliação das expressões produz matrizes, que
são então mostradas no ecrã e atribuídas às variáveis para utilização futura. Se o nome
da variável e o sinal de igualdade (“=”) são omitidos, a variável com o nome ans (da
palavra answer, em português resposta), é automaticamente criada.
Uma variável é um nome formado por uma letra ou por uma cadeia de letras e
números, ao qual é atribuído um valor. Uma vez atribuído um valor numérico à
variável, podemos usá-la em expressões matemáticas, em funções, e comandos do
Matlab. Quando uma variável é declarada, o Matlab reserva um espaço de memória
onde o valor da variável é armazenado. Quando se utiliza uma variável, o seu valor é
passado automaticamente ao comando que faz uso dela; se for atribuído um novo
valor à variável, o conteúdo do espaço de memória é substituído.
Os nomes das variáveis podem conter letras, números e o símbolo sublinhar
(underscore) até a um máximo de 63 caracteres, e têm obrigatoriamente de começar
por uma letra.
O Matlab é uma linguagem case sensitive, ou seja, faz distinção entre letras
maiúsculas e minúsculas; assim a e A são variáveis diferentes. De notar, que no
Matlab todas as funções devem ser escritas em minúsculas; inv(A) calcula a inversa
da matriz A, enquanto que Inv(A) é uma função indefinida.
Ao inicializar o Matlab algumas variáveis são predefinidas, como por exemplo:
 pi – Designa a constante matemática π;
 realmin e realmax – Designam o menor e o maior número com que se
pode trabalhar ;
Introdução à Programação 10

 nargin e nargout – Designam o número de argumentos de entrada e de


saída de uma função ;
 inf – Representa + ∞ ;
 NaN (Not a Number) – Usado quando o Matlab não pode determinar
um valor numérico válido, como por exemplo 0/0 ;
 ans – Variável que assume o valor da última expressão não atribuída a
uma variável especificada. Se o utilizador não atribui o valor de uma
expressão a uma variável, o Matlab armazena, automaticamente, o
resultado a ans;
 eps – A menor diferença entre dois números. Equivale a 2.2204e-016;
 i – Definido como √-1, isto é 0 + 1.0000i;
 j – O mesmo que i.

As variáveis predefinidas podem ser redefinidas a qualquer momento, mas é


recomendado que as variáveis pi, eps e inf não sejam redefinidas, porque muitas
aplicações fazem uso delas. Outras variáveis, como i e j, são às vezes redefinidas
quando os números complexos não estão envolvidos.
Deve-se também evitar utilizar nomes de funções predefinidas do Matlab para
denominar variáveis (por exemplo: sin, cos, sqrt, exp, etc…), já que uma vez que o
nome de uma função é utilizada para definir uma variável, então essa função não pode
mais tarde ser utilizada.
De seguida descrevem-se alguns comandos úteis no trabalho com variáveis;
são utilizados para eliminar variáveis ou obter informação relativamente às variáveis
declaradas numa sessão:
 clear – Apaga da memória todas as variáveis e funções;
 clear x y z – Apaga da memória as variáveis x, y e z;
 who – Lista no ecrã todas as variáveis activas;
 whos – Lista no ecrã todas as variáveis declaradas, com o respectivo
tamanho em bytes e a classe de armazenamento;
 save – O comando save salva todas as variáveis declaradas na directoria
corrente de trabalho, num ficheiro chamado matlab.mat. O comando
save nome_de_ficheiro armazena todas as variáveis declaradas na
directoria corrente de trabalho no ficheiro nome_de_ficheiro .mat. Para
salvar noutra directoria, deve-se colocar o caminho total (“pathname”)
no nome_de_ficheiro;
 load – O comando load carrega no espaço de trabalho todas as variáveis
guardadas no ficheiro matlab.mat com o comando save; o comando
load nome_de_ficheiro carrega no espaço de trabalho todas as
variáveis guardadas no ficheiro nome_de_ficheiro .mat, com o comando
save nome_de_ficheiro;
 quit – Fecha a sessão do Matlab.

1.4.1 ESCRITA DE VARIÁVEIS

A impressão do valor de variáveis na linha de comandos, pode ser


feita com a função disp. Quando usada na forma disp(x), o Matlab escreve o valor da
variável sem mostrar o seu nome. De seguida mostra-se um exemplo em que são
Introdução à Programação 11

mostradas as saídas após a declaração da variável x, e após a utilização da função


disp.

>> x=6
x=
6
>> disp(x)
6
>>

Esta função é também usada para escrever texto, mostrando uma sequência de
caracteres entre plicas (string). Mostra-se um exemplo a seguir:

>> disp('O valor da variável x é '),x


O valor da variável x é
x=
6
>>

Para além desta função, o Matlab tem outra função de escrita de variáveis,
que permite um melhor controlo na formatação dos dados - a função fprintf - que será
estudada no ponto 4.

1.5 FUNÇÕES ELEMENTARES

Além das operações aritméticas básicas referidas no ponto 1.2 as expressões


podem incluir funções. O Matlab possui um grande número de funções originais que
não podem ser alteradas pelo utilizador. Outras funções estão disponíveis em
bibliotecas externas, que são ficheiros com extensão .m criados a partir das funções
originais. Uma função é composta por um nome e por um argumento entre parêntesis.
O argumento de uma função pode ser um número, uma variável ou uma expressão
composta de números e/ou variáveis. Funções também podem ser incluídas no
argumento de outras funções, assim como em expressões.
De seguida vamos estudar algumas funções originais elementares do Matlab,
utilizadas mais usualmente divididas em três grupos: funções matemáticas
elementares, funções trigonométricas e de arredondamento.

Funções matemáticas elementares

Função Descrição Exemplo


sqrt (x) Raíz quadrada >> sqrt (24)
ans =
4.8990
Introdução à Programação 12

realsqrt (x) Raíz quadrada, mas produz erro >> realsqrt(-4)


se o argumento é negativo. ??? Error using ==>
realsqrt
Realsqrt produces
complex result.
exp (x) Exponencial >> exp(3)
ans =
20.0855
log (x) Logaritmo natural (neperiano) >> log(100)
ans =
4.6052
log10 (x) Logaritmo na base 10 >> log10(100)
ans =
2
log 2 (x) Logaritmo na base 2 >> log2 (100)
ans =
6.6439
factorial Factorial >> factorial(6)
(x) ans =
720
nthroot(x,n N-ésima raíz de x, ou seja, √x; x >> nthroot(1000,3)
) e n são reais, mas se x<0 então n terá ans =
que ser inteiro e ímpar. 10
abs (x) Valor absoluto (módulo) >> abs (-150)
ans =
150
complex Define número complexo. >> x=3 ; y=2 ;
(x,y) >> z=complex(x,y)
z=
3.0000 + 2.0000i
real (x) Parte real de um número >> x = 5+2i ;
complexo. >> real (x)
ans =
5
imag (x) Parte imaginária de um número >> x = 5+2i ;
complexo. >> imag (x)
ans =
2
conj (x) Conjugado de um número >> x = 5+2i ;
complexo. >> conj (x)
ans =
5.0000 - 2.0000i

Funções trigonométricas elementares

Função Descrição Exemplo


sin (x) Seno de x (x em radianos); se >> sind (90)
fizer sind (x) então x é em graus. ans =
Introdução à Programação 13

1
cos (x) Co-seno de x (x em radianos); se >> cosd (90)
fizer cosd (x) então x é em graus. ans =
0
tan (x) Tangente de x (x em radianos); se >> tand (180)
fizer tand (x) então x é em graus. ans =
0
sec (x), csc Secante, Co-secante e Co- >> secd (180)
(x), cot (x) tangente de x (x em radianos); se ans =
fizer secd (x), cscd (x) ou cotd (x) -1
então x é em graus.
asin (x), Arco seno, Arco co-seno e Arco >> asind (1)
acos (x), atan tangente; se fizer asind (x), acosd ans =
(x) (x), atand (x) então o ângulo 90
respectivo é em graus.

Funções de arredondamento elementares

Função Descrição Exemplo


round (x) Arredonda para o número inteiro >> round (53.5)
mais próximo. ans =
54
fix (x) Truncatura de x >> fix (53.5)
ans =
53
ceil (x) Arredonda para o maior inteiro > ceil (53.5)
>= x. ans =
54
>> ceil (-53.5)
ans =
-53
floor (x) Arredonda para o menor inteiro >> floor (53.5)
<=x. ans =
53
>> floor (-53.5)
ans =
-54
rem (x,y) Retorna o resto da divisão de x >> rem (10,3)
por y. ans =
1
mod (x,y) Módulo da divisão inteira. É >> mod(10,-3)
igual a x – n*y com n = floor (x/y). ans =
Quando x e y têm o mesmo sinal é -2
igual a rem (x,y) >> mod(-10,3)
ans =
2
sign (x) Sinal de x. Se x>0 toma o valor >> y=-50;
1; se x=0 toma o valor 0, e se x<1 >> sign(y)
toma o valor -1. ans =
Introdução à Programação 14

-1

1.6 AJUDA

O Matlab disponibiliza informação de ajuda sobre a maior parte dos tópicos,


e pode ser acedida pela Janela de Ajuda, através das funções de ajuda e através de
muitos outros recursos que a Mathworks (Matlab helpdesk) apresenta.
A janela de ajuda apresentada na figura Figura 1.3, pode ser acedida através do
comando helpdesk ou através do menu Start -> Help. Nesta janela encontra-se
informação detalhada diversa, nomeadamente sobre a instalação do Matlab, e sobre as
várias funções, toolboxes e funcionalidades do Matlab.

FIGURA 1.3 – A Janela de Ajuda

O comando help fornece a lista de tópicos disponíveis.


Contudo, quando executado na forma help <função>, apresenta na Janela de
Comandos informação detalhada sobre a função em causa. Por exemplo, o exemplo
apresentado a seguir apresenta a informação apresentada para a função line.

>> help line


LINE Create line.
Introdução à Programação 15

LINE(X,Y) adds the line in vectors X and Y to the current axes.


If X and Y are matrices the same size, one line per column is added.
LINE(X,Y,Z) creates lines in 3-D coordinates.

LINE returns a column vector of handles to LINE objects,


one handle per line. LINEs are children of AXES objects.

The X,Y pair (X,Y,Z triple for 3-D) can be followed by


parameter/value pairs to specify additional properties of the lines.
The X,Y pair (X,Y,Z triple for 3-D) can be omitted entirely, and
all properties specified using parameter/value pairs.

Execute GET(H), where H is a line handle, to see a list of line


object properties and their current values. Execute SET(H) to see a
list of line object properties and legal property values.

See also <a href="matlab:help patch">patch</a>, <a href="matlab:help


text">text</a>, <a href="matlab:help plot">plot</a>, <a href="matlab:help
plot3">plot3</a>.

Reference page in Help browser


<a href="matlab:doc line">doc line</a>

O comando doc é uma alternativa ao comando help mas apresenta a informação


na Janela de Ajuda.
O comando helpwin abre uma nova janela própria de ajuda para navegação, onde
se poderá seleccionar o tópico de que pretende obter ajuda.
O comando lookfor <palavra> , procura uma determinada palavra em todos os
ficheiros-M do Matlab na linha H1, que corresponde à primeira linha de comentários
de uma determinada função.
Introdução à Programação 16

2. MATRIZES (“ARRAYS”)

Todas as variáveis em Matlab são matrizes. Uma matriz é uma lista de valores
organizados em linhas e/ou colunas; a matriz mais simples (unidimensional) é
formada por uma linha ou por uma coluna, também denominadas vectores. As
operações estudadas no ponto anterior envolveram variáveis escalares, que são
tratadas em Matlab como matrizes especiais de dimensão 1 x 1, ou seja matrizes de
uma linha por uma coluna.
Consoante o número de linhas e colunas pode-se falar em diversos tipos de
matrizes. Uma matriz m x n é uma tabela de valores dispostos em m linhas por n
colunas. Quando uma matriz possui apenas uma única linha (m=1) denomina-se
vector linha, e se tem apenas uma única coluna designa-se por vector coluna.
As matrizes podem ser introduzidas em Matlab de diferentes maneiras:
- digitadas na Janela de Comandos;
- geradas por comandos e funções;
- criadas em ficheiros-Matlab;
- carregadas a partir de um ficheiro de dados externo.

2.1 VECTORES

Como se estudou no ponto anterior, um vector é uma matriz com uma única
linha (vector linha) ou com uma única coluna (vector coluna).
Em Matlab a forma mais simples de criar um vector, é utilizar o operador de
concatenação ( [ ] ) digitando os seus elementos entre parêntesis rectos. No caso de
um vector linha, os seus elementos estão separados por um espaço ou por uma
vírgula; no caso de um vector coluna, os seus elementos estão separados por um ponto
e vírgula ou então dever-se-á pressionar a tecla ENTER após digitar cada elemento.
No exemplo seguinte, mostram-se diferentes formas de definir o vector x; as duas
primeiras como vectores linha, e as outras duas como vectores coluna.

>> x = [1 3 5 7 9]
x=
1 3 5 7 9
>> x = [1,3,5,7,9]
x=
1 3 5 7 9
>> x = [1;3;5;7;9]
x=
1
3
5
7
9
>> x = [1
3
5
Introdução à Programação 17

7
9]
x=
1
3
5
7
9
>>

Um elemento de um vector é identificado pelo seu índice colocado entre


parêntesis curvos ( ) . No exemplo anterior x(3) = 5.
A instrução end referencia o último índice de um vector. No exemplo seguinte
exemplifica-se a referencia ao último e penúltimo elementos do vector x.

>> x = [1 3 5 7 9]
x=
1 3 5 7 9
>> x(end)
ans =
9
>> x(end-1)
ans =
7
>>

No caso especial de vectores com elementos espaçados de um valor constante


pode-se utilizar a notação [m:n:p], em que m é o primeiro elemento, p é o último
elemento e n o incremento constante. Neste caso os parêntesis são opcionais. Quando
se omite o valor de n o sistema assume que o incremento é 1. Se os valores de m, n e
p são tais que o valor de p não pode ser obtido, então (sendo p positivo) o último
elemento do vector será o último número que não exceder o valor de p.

>> x = [1:2:11]
x=
1 3 5 7 9 11
>> y = [1:7]
y=
1 2 3 4 5 6 7
>> y = [1:-2:-7]
y=
1 -1 -3 -5 -7
>>
Introdução à Programação 18

O Matlab possibilita a criação de um vector especificando o primeiro elemento xi,


o último elemento xf e o número de elementos n, por meio do comando linspace. A
notação utilizada é linspace (xi, xf, n).

>> vector = linspace(0, 100, 11)


vector =
0 10 20 30 40 50 60 70 80 90 100
>>

2.2 MATRIZES BIDIMENSIONAIS

Uma matriz possui elementos dispostos em linhas e colunas. São muitas


vezes utilizadas para armazenar informação na forma de uma tabela de números ou
strings. Além disso, exercem um papel importante na álgebra linear e são usadas em
engenharia e em outras ciências para descrever muitas grandezas físicas.
Uma matriz m x n é uma matriz com m linhas e n colunas, e em que m por n é o
tamanho (ou dimensão) da matriz. Uma matriz com m igual a n designa-se por
matriz quadrada.
A forma mais simples de definir uma matriz é escrever as diferentes linhas da
matriz separadas por ponto e vírgula. Por sua vez, as linhas devem obedecer às regras
definidas no ponto anterior para os vectores linha, ou seja, separando os diferentes
elementos por espaços ou vírgulas. O seguinte exemplo mostra a definição da
seguinte matriz 4 x 3.

1 2 3
4 5 6 ( matriz 4 x 3 )
7 8 9
10 11 12

>> x = [1 2 3;4 5 6;7 8 9;10 11 12]


x=
1 2 3
4 5 6
7 8 9
10 11 12
>>

Também se poderia definir a matriz separando as linhas consecutivas com a tecla


ENTER.

>> x = [1 2 3
456
789
10 11 12]
Introdução à Programação 19

x=
1 2 3
4 5 6
7 8 9
10 11 12
>>

Os elementos de uma matriz podem ser números ou expressões matemáticas


(constituídas por números, variáveis e funções), mas todas as linhas têm que possuir a
mesma quantidade de elementos. O Matlab exibe no ecrã uma mensagem de erro,
caso seja feita uma declaração incompleta da matriz. De seguida mostra-se um
exemplo de uma matriz com elementos constituídos por expressões matemáticas.

>> x = [a b*c cosd(90); b^3 sqrt(c) 28]


x=
6.7000 150.0000 0
125.0000 5.4772 28.0000

As linhas duma matriz também podem ser geradas por meio do comando linspace
ou por meio da notação de criação de vectores com incremento constante estudados
no ponto anterior. Por exemplo,

>> x = [linspace(5,35,4); 1:3:10 ;10 20 30 40]


x=
5 15 25 35
1 4 7 10
10 20 30 40
>>

As funções internas zeros(m,n), ones(m,n) e eye(n) criam matrizes especiais:


- A função zeros(m,n) cria uma matriz com m linhas e n colunas preenchida com
zeros;
- A função ones(m,n) cria uma matriz com m linhas e n colunas preenchida com o
elemento um;
- A função eye(n) cria uma matriz quadrada com n linhas e n colunas cujos
elementos da diagonal principal são iguais a 1 e os restantes elementos são zeros.

>> x = zeros(5,6)
x=
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
>> y = ones(5,6)
Introdução à Programação 20

y=
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
>> z = eye(5)
z=
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>>

As funções zeros e ones apresentam também a hipótese de utilizar apenas um


argumento: neste caso zeros(m) cria uma matriz quadrada m x m de zeros, e ones(m)
cria uma matriz quadrada m x m de elementos iguais a 1.

2.3 MANIPULAÇÃO DE MATRIZES

Uma matriz possui elementos dispostos em linhas e colunas. Um elemento é


identificado especificando o número da linha e da coluna que ocupa na matriz. Por
exemplo, X(3,4) faz referência ao elemento na linha 3 e coluna 4 da matriz X.
Por outro lado, é possível modificar o valor de um elemento da matriz atribuindo-
lhe um novo valor. Igualmente, os elementos da matriz podem ser usados como
variáveis em expressões e funções matemáticas. De seguida apresentam-se alguns
exemplos.

>> A = [1 2 3; 4 5 6; 7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> A (2,3)
ans =
6
>> A (3,1) = 20
A=
1 2 3
4 5 6
20 8 9
>> A (2,2) - A (3,2)
ans =
-3
>>
Introdução à Programação 21

Podemos usar dois pontos ( : ) para referenciar uma gama de elementos dentro de
um vector ou matriz.
No caso de um vector, por exemplo x (m:n) referencia todos os elementos entre as
posições m e n do vector x.

>> x = [2 -3 5 8 3 45 64]
x=
2 -3 5 8 3 45 64
>> y = x(3:6)
y=
5 8 3 45
>>

No caso de uma matriz, podemos considerar os seguintes casos:


 A (:,n) – referencia os elementos da matriz A em todas as linhas da coluna n.
 A (n,:) – referencia os elementos da matriz A em todas as colunas da linha n.
 A (:,m:n) – referencia os elementos da matriz A em todas as linhas entre as
colunas m e n.
 A (m:n,:) – referencia os elementos da matriz A em todas as colunas entre as
linhas m e n.
 A (m:n,p:q) – referencia os elementos da matriz A entre as linhas m e n e as
colunas p e q.

>> A=[25 46 5 32 2 9; 31 6 7 98 1 76; 4 87 21 8 6 11; 34 9 3 45 89 -53; 6 33 7 -54 12 2]


A=
25 46 5 32 2 9
31 6 7 98 1 76
4 87 21 8 6 11
34 9 3 45 89 -53
6 33 7 -54 12 2
>> B = A (:,4)
B=
32
98
8
45
-54
>> C = A (1,:)
C=
25 46 5 32 2 9
>> D = A (:,3:5)
D=
5 32 2
7 98 1
21 8 6
Introdução à Programação 22

3 45 89
7 -54 12
>> E = A(2:4,3:6)
E=
7 98 1 76
21 8 6 11
3 45 89 -53
>>

No exemplo anterior foram criados novos vectores e matrizes a partir de uma


matriz previamente declarada, usando-se um conjunto de elementos ou um grupo de
elementos dessa matriz. No entanto, é possível seleccionar elementos específicos
(linhas e/ou colunas) de variáveis previamente declaradas para criar novas variáveis.
Isto pode ser feito digitando os elementos das linhas (colunas) dentro de parêntesis
rectos ( [ ] ), como se mostra nos exemplos seguintes:

> x = 5:4:41
x=
5 9 13 17 21 25 29 33 37 41
>> y = x([2,4,6:9])
y=
9 17 25 29 33 37
>> A = [2:3:20;ones(1,7);1:2:13;zeros(1,7)]
A=
2 5 8 11 14 17 20
1 1 1 1 1 1 1
1 3 5 7 9 11 13
0 0 0 0 0 0 0
>> B = A([1,3],[1,3,5:7])
B=
2 8 14 17 20
1 5 9 11 13
>>

2.3.1 JUNÇÃO DE ELEMENTOS

Uma variável do tipo vector ou matriz pode ser modificada pela


adição de elementos. Um vector (matriz com uma única linha ou coluna) pode ser
modificado acrescentando novos elementos ou, então, pode ter a sua dimensão
acrescida, ou seja, transformando-se numa matriz bidimensional.
Além disso, linhas e/ou colunas podem ser adicionadas a uma matriz para obter
uma matriz de tamanho diferente. O acréscimo de elementos pode ser realizado
simplesmente por atribuição de valores aos elementos que se deseja adicionar ou por
junção de elementos pertencentes a alguma variável previamente declarada.
No caso de um vector se um vector possui 5 elementos, podemos aumentá-lo
atribuindo valores aos elementos 6, 7, e assim por diante. Se por exemplo, um vector
Introdução à Programação 23

possui n elementos e um novo valor é atribuído ao elemento cuja referência é n+2, o


Matlab atribui o valor zero ao elemento n+1, ou seja, de um modo geral o Matlab
atribui zeros aos elementos posicionados entre o último elemento original e o novo
elemento terminal do vector. Alguns exemplos são mostrados a seguir.

>> x = 1:5
x=
1 2 3 4 5
>> x(6:10) = 10:8:42
x=
1 2 3 4 5 10 18 26 34 42
>> y = [1 2 3]
y=
1 2 3
>> y(7) = 4
y=
1 2 3 0 0 0 4
>> w (4) = 10
w=
0 0 0 10
>>

Os elementos também podem ser adicionados por meio da anexação de vectores já


declarados. Por exemplo:

>> x = 1:5
x=
1 2 3 4 5
>> y = 6:10
y=
6 7 8 9 10
>> z = [x y]
z=
1 2 3 4 5 6 7 8 9 10
>> z = [x;y]
z=
1 2 3 4 5
6 7 8 9 10
>>

No caso das matrizes, linhas e/ou colunas podem ser inseridas numa matriz
previamente definida, atribuindo valores aos novos elementos e juntando-os à matriz
existente. Neste caso é necessário algum cuidado, já que o tamanho das linhas ou
colunas adicionadas, deve estar de acordo com a definição da matriz original. Alguns
exemplos:
Introdução à Programação 24

>> A = [1 2 3 4 5; 6 7 8 9 10]
A=
1 2 3 4 5
6 7 8 9 10
>> A(3,:) = [11 12 13 14 15]
A=
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
>> B = eye(3)
B=
1 0 0
0 1 0
0 0 1
>> C = [A B]
C=
1 2 3 4 5 1 0 0
6 7 8 9 10 0 1 0
11 12 13 14 15 0 0 1
>>

Se uma matriz possui a dimensão m x n, e um novo elemento é inserido numa


posição de referência superior ao seu tamanho, o Matlab aumenta o tamanho da
referida matriz de modo a incluir esse novo elemento. Neste caso, tal como nos
vectores, aos elementos que foram automaticamente adicionados é-lhes atribuído o
valor zero.

>> A = [1 2 3;4 5 6;7 8 9]


A=
1 2 3
4 5 6
7 8 9
>> A(6,5) = 34
A=
1 2 3 0 0
4 5 6 0 0
7 8 9 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 34
>> B(3,5) = -56
B=
0 0 0 0 0
0 0 0 0 0
0 0 0 0 -56
>>
Introdução à Programação 25

2.3.2 ELIMINAÇÃO DE ELEMENTOS

Pode-se apagar um elemento ou um conjunto de elementos num


vector ou numa matriz, atribuindo o vazio a esse elemento ou conjunto de elementos
utilizando parêntesis rectos sem nenhum caracter entre eles. Ao apagar elementos,
podemos eventualmente redefinir uma matriz num vector e um vector num escalar.
De seguida apresentam-se alguns exemplos:

>> x = 1:3:28
x=
1 4 7 10 13 16 19 22 25 28
>> x(6) = []
x=
1 4 7 10 13 19 22 25 28
>> x(4:7) = []
x=
1 4 7 25 28
>> A = [1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20]
A=
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
>> A(:,2:4) = []
A=
1 5
6 10
11 15
16 20
>>

2.3.3 FUNÇÕES PARA MANIPULAÇÃO DE MATRIZES

O Matlab possui muitas funções pré-definidas para gestão e


manipulação de matrizes. Algumas das mais importantes são listadas a seguir:

Função Descrição Exemplo


size (A) Devolve o tamanho da matriz >> A=[1 2 3 4 5 6; 7 8 9
10 11 12]
A=
1 2 3 4 5
6
7 8 9 10 11
12
>> size (A)
ans =
Introdução à Programação 26

2 6
length (A) Devolve o comprimento de um >> A=[1 3 5 7 9]
vector. A=
1 3 5 7 9
>> length (A)
ans =
5
numel (A) Devolve o número de elementos >> A=[1 2 3 4 5 6; 7 8 9
da matriz. 10 11 12]
A=
1 2 3 4 5
6
7 8 9 10 11
12
>> numel (A)
ans =
12
reshape(A,m, Rearranja uma matriz com r >> A
n) linhas e s colunas para m linhas e n A=
colunas. De notar que o produto r x s 1 2 3 4 5
deve ser igual ao produto m x n 6
7 8 9 10 11
12
>> reshape (A,3,4)
ans =
1 8 4 11
7 3 10 6
2 9 5 12
diag (x) Quando x é um vector, cria uma >> x=[1 2 3 4]
matriz quadrada contendo os x=
elementos de x na diagonal principal 1 2 3 4
>> diag(x)
ans =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
diag (A) Quando A é uma matriz, cria um >> A=[1 2 3 4;5 6 7 8;9
vector coluna a partir dos elementos 10 11 12]
na diagonal principal A=
1 2 3 4
5 6 7 8
9 10 11 12
>> diag(A)
ans =
1
6
11

2.3.4 MATRIZ TRANSPOSTA


Introdução à Programação 27

O símbolo ‘ transforma um vector linha em vector coluna e vice-


versa um vector coluna em vector linha.

>> x = [1 2 3]
x=
1 2 3
>> y = x'
y=
1
2
3
>> A = [1 2 3;4 5 6;7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> B = A'
B=
1 4 7
2 5 8
3 6 9
>>

2.4 CADEIAS DE CARACTERES (STRINGS) E VARIÁVEIS TIPO STRING

Uma string é uma sequência ordenada de caracteres, e é representada no


Matlab na forma de um vector linha de caracteres.
A forma mais simples de criar uma string é por atribuição directa de valor a uma
variável, sendo a string uma sequência de caracteres entre aspas simples (‘ ’). No
exemplo seguinte é criada a string ‘Introdução à Programação’, que é atribuída à
variável cadeira.

>> cadeira = ' Introdução à Programação '


cadeira =
Introdução à Programação
>> whos
Name Size Bytes Class

cadeira 1x26 52 char array

Grand total is 26 elements using 52 bytes


Introdução à Programação 28

Uma string pode conter letras, números, espaços e outros símbolos. As aspas
simples ( ‘ ) também podem ser usadas dentro de strings; para isso, são necessárias
duas aspas dentro da string, para que o Matlab interprete como uma única aspa.
Quando uma string está a ser digitada, os caracteres aparecem em roxo após a
aspa de abertura da string. Após fechar a segunda aspa, os caracteres mudam para a
cor normal.
Quando uma variável é declarada como string, os caracteres que a formam são
armazenados na forma de um vector de linhas semelhante ao que foi descrito atrás no
ponto 2.1. Cada carácter, incluindo os espaços, é um elemento do vector. Significa
isto que, uma string de uma linha é um vector linha com um número de elementos
igual à quantidade de caracteres contidas na string.
Os elementos da string são referenciados pela posição que ocupam no vector. No
exemplo seguinte, no vector cadeira o primeiro elemento é um espaço, e o quinto
elemento é a letra r.

>> cadeira = ' Introdução à Programação '


cadeira =
Introdução à Programação
>> cadeira(1)
ans =

>> cadeira(5)
ans =
r
>>

Tal como nos vectores anteriormente estudados também é possível modificar


elementos da string. No exemplo seguinte, no vector cadeira a palavra Programação
é substituída por Informática.

>> cadeira = ' Introdução à Programação '


cadeira =
Introdução à Programação
>> cadeira(15:25)='Informática'
cadeira =
Introdução à Informática
>>

As matrizes também podem conter strings, e tal como foi feito para os números
descrito no ponto 2.2, deve-se digitar ponto e vírgula ou pressionar a tecla ENTER no
fim de cada linha. Cada linha deve ser tratada como uma string, ou seja, é necessário
colocar aspas no início e no fim de cada uma delas.
Neste caso, cada string é armazenada numa linha da matriz e os seus caracteres
são distribuídos pelas colunas correspondentes. Portanto, um vector de strings apenas
é válido se todas as strings (linhas) tiverem o mesmo comprimento. Quando se cria
um vector de strings por atribuição utilizando o operador de concatenação ( [ ] ), é
Introdução à Programação 29

necessário aumentar cada string com espaços até atingir o comprimento da maior
string. No exemplo seguinte é necessário introduzir 3 espaços na primeira linha de
modo a introduzir compatibilidade na matriz.

>> cadeira = ['Introdução '


'à Programação']
cadeira =
Introdução
à Programação
>>

Uma forma mais fácil de criar vectores de linhas é recorrer à função char, que cria
um vector de linhas com o mesmo número de linhas, a partir de caracteres de entrada
com tamanhos diferentes. O Matlab adiciona automaticamente espaços de modo a
igualar as linhas menores àquela que possuir mais elementos (ou seja, a maior linha
da matriz). Na função char, as linhas devem ser separadas por vírgulas, tal como se
demonstra no exemplo seguinte:

>> Primeiro_Semestre=char('Introd. à Program.','Des. Técnico','Análise Mat.')


Primeiro_Semestre =
Introd. à Program.
Des. Técnico
Análise Mat.
>>

2.5 OPERAÇÕES MATEMÁTICAS COM MATRIZES

No ponto 1.2 foram estudadas as operações aritméticas elementares com


escalares (números), ou seja, com matrizes 1x1. No entanto as matrizes podem ser do
tipo vector (uma linha ou uma coluna), ou ainda mais complexas, do tipo
bidimensional (matrizes em linhas e coluna) e até mesmo de dimensões maiores.
Nestes casos, em que as operações matemáticas se tornam mais complexas, o
Matlab dispõe de um grande conjunto de funcionalidades concebido para executar
operações muito avançadas com matrizes. Neste ponto, estudam-se as operações
matemáticas básicas que o Matlab realiza ao manipular matrizes.
De modo a poder explicar as diferentes operações matemáticas que se tratam nos
pontos seguintes sobre vectores e matrizes, considerem-se o seguinte vector genérico
x de n elementos

e a matriz A genérica de ordem mxn.


Introdução à Programação 30

2.5.1 ADIÇÃO E SUBTRACÇÃO

As operações de adição ( + ) e subtracção ( - ) de matrizes são


efectuadas apenas se as matrizes têm o mesmo tamanho. A adição e subtracção entre
duas matrizes realiza-se elemento a elemento, ou seja, é obtida adicionando-se ou
subtraindo-se, respectivamente, elementos em posições correspondentes nas matrizes.
No exemplo seguinte ilustra-se a adição e subtracção entre 2 vectores e 2 matrizes.

>> x = [5 8 -4]
x=
5 8 -4
>> y = [3 -5 6]
y=
3 -5 6
>> x + y
ans =
8 3 2
>> x - y
ans =
2 13 -10
>> A = [4 -6 10;-2 15 6]
A=
4 -6 10
-2 15 6
>> B = [7 14 1;52 -2 8]
B=
7 14 1
52 -2 8
>> A + B
ans =
11 8 11
50 13 14
>> A - B
ans =
-3 -20 9
-54 17 -2
>>
Introdução à Programação 31

A adição e subtracção também são definidas se um dos operadores é um escalar,


ou seja, uma matriz 1x1. Neste caso, o escalar é adicionado ou subtraído de todos os
elementos do outro operador. Por exemplo,

>> x = [5 8 -4]
x=
5 8 -4
>> x - 3
ans =
2 5 -7

2.5.2 MULTIPLICAÇÃO

A operação de multiplicação ( * ) de matrizes é executada pelo


Matlab de acordo com as regras da Álgebra Linear, pelo que, o número de colunas da
matriz à esquerda do operador de multiplicação é igual ao número de linhas da matriz
à direita do operador de multiplicação.
Por exemplo, no produto das matrizes A*B o resultado é uma matriz que tem o
mesmo número de linhas da matriz A e o mesmo número de colunas da matriz B. No
exemplo seguinte, ilustra-se o produto de 2 matrizes e o produto de um vector por
uma matriz:

>> A = [4 -6 10;-2 15 6]
A=
4 -6 10
-2 15 6
>> B = [5 1 10 2;3 -8 -1 4;7 6 -2 9]
B=
5 1 10 2
3 -8 -1 4
7 6 -2 9
>> A * B
ans =
72 112 26 74
77 -86 -47 110
>> x = [3 7]
x=
3 7
>> x * A
ans =
-2 87 72
>>
Introdução à Programação 32

De notar que a multiplicação de matrizes não obedece à propriedade comutativa,


ou seja, se A e B são matrizes nxn, em geral A*B ≠ B*A. Por outro lado, a operação
de potenciação só pode ser realizada com matrizes quadradas, já que o produto A*A
só pode ser realizado se o número de colunas da primeira matriz for igual ao número
de linhas da segunda matriz.
Dois vectores podem ser multiplicados um pelo outro somente se tiverem o
mesmo número de elementos, e se um deles for um vector linha e o outro for um
vector coluna. O resultado da multiplicação de um vector linha por um vector coluna
é uma matriz 1x1 - ou seja, um escalar – e é designado produto escalar de dois
vectores. O Matlab possui uma função interna, dot (x,y), que calcula o produto
escalar de dois vectores, e em que, os vectores x e y tanto podem ser vectores linha
como vectores coluna.
A multiplicação de um vector coluna por um vector linha (ambos com n
elementos) dá uma matriz de tamanho nxn.
De seguida mostram-se alguns exemplos que ilustram o que foi dito:

>> A = [5 3;1 -6]


A=
5 3
1 -6
>> B = [6 2;7 9]
B=
6 2
7 9
>> A*B
ans =
51 37
-36 -52
>> B*A
ans =
32 6
44 -33
>> x = [4 8]
x=
4 8
>> y = [5;9]
y=
5
9
>> x*y
ans =
92
>> y*x
ans =
20 40
36 72
>> z = [8 9]
z=
8 9
Introdução à Programação 33

>> x*z
??? Error using ==> mtimes
Inner matrix dimensions must agree.
>> dot (x,z)
ans =
104
>>

Quando uma matriz é multiplicada por um escalar (número) cada elemento da


matriz é multiplicado por esse escalar (número).

>> x =[ 1 2 3]
x=
1 2 3
>> 5*x
ans =
5 10 15
>> x*5
ans =
5 10 15

2.5.3 DIVISÃO

O Matlab define dois tipos de operadores de divisão: o operador de


divisão à esquerda ( \ ) e o operador de divisão à direita ( / ).
O operador de divisão à esquerda (\) é usado, entre outras coisas, para resolver a
equação matricial AX = B, em que X e B são vectores coluna.
A equação AX = B, pode ser resolvida multiplicando à esquerda ambos os lados
da equação pela inversa de A:
A-1AX = A-1B
O lado esquerdo da equação é igual a,
A-1AX = IX = X
e portanto, a solução da equação AX = B é,
X = A-1B,

ou usando o operador de divisão à esquerda do Matlab :

X = A\B.

Concluindo, na resolução da equação AX = B, o Matlab pode usar as duas últimas


equações: na primeira, o vector X pode ser obtido pela multiplicação da inversa de A
(inv (A) ou A-1) pela matriz B; na segunda, é obtido pela divisão à esquerda de A por
B. De seguida obtém-se pelos dois métodos referidos acima a solução do seguinte
sistema de equações:
Introdução à Programação 34

2x + 3y + 2z = 1
3x + 4y + z = 3
5x + 4y + z = 2

>> A = [2 3 2;3 4 1;5 4 1]


A=
2 3 2
3 4 1
5 4 1
>> B = [1;3;2]
B=
1
3
2
>> x = inv(A)*B
x=
-0.5000
1.4000
-1.1000
>> x = A\B
x=
-0.5000
1.4000
-1.1000
>>

O operador de divisão à direita (/) é usado, entre outras coisas, para resolver a
equação matricial XC = D, em que X e D são vectores linha.
A equação XC = D, pode ser resolvida multiplicando à direita ambos os lados da
equação pela inversa de C:
XCC-1 = DC-1
O lado esquerdo da equação é igual a,
XCC-1 = XI = X
e portanto, a solução da equação XC = D é,
X = DC-1,

ou usando o operador de divisão à esquerda do Matlab :

X = D/C.
De seguida ilustra-se a resolução do sistema de equações anterior por meio
do operador de divisão à direita.

>> A = [2 3 5;3 4 4;2 1 1]


A=
Introdução à Programação 35

2 3 5
3 4 4
2 1 1
>> C = [2 3 5;3 4 4;2 1 1]
C=
2 3 5
3 4 4
2 1 1
>> D =[1 3 2]
D=
1 3 2
>> x = D*inv(C)
x=
-0.5000 1.4000 -1.1000
>> x=D/C
x=
-0.5000 1.4000 -1.1000
>>

2.5.4 EXPONENCIAÇÃO

A expressão A^p eleva A à p-ésima potência, e é definida se A é


uma matriz quadrada e p um escalar. De seguida mostram-se alguns exemplos:

>> A = [2 3 5;3 4 -4;2 1 1]


A=
2 3 5
3 4 -4
2 1 1
>> A^2
ans =
23 23 3
10 21 -5
9 11 7
>> A*A
ans =
23 23 3
10 21 -5
9 11 7
>> A^3
ans =
121 164 26
73 109 -39
65 78 8
>>
Introdução à Programação 36

2.5.5 OPERAÇÕES ELEMENTO A ELEMENTO

Para além das operações estudadas anteriormente nos pontos 2.5.2,


2.5.3 e 2.5.4 (denominadas multiplicação, divisão e exponenciação matricial) em que
são seguidas rigorosamente as regras da Álgebra Linear, o Matlab permite também a
multiplicação, divisão e exponenciação elemento a elemento. Estas operações
(operações escalares) só podem ser realizadas com matrizes do mesmo tamanho, e são
efectuadas com os elementos que ocupam a mesma posição nas matrizes. São
executadas no Matlab, digitando um ponto antes do operador aritmético, tal como é
apresentado na tabela seguinte:

Operação Símb
olo
Multiplicação escalar .*
Divisão escalar à direita ./
Divisão escalar à esquerda .\
Exponenciação escalar .^

Mostram-se a seguir exemplos da multiplicação, divisão e exponenciação escalar,


envolvendo elementos correspondentes de matrizes:

>> A = [2 3 5;3 4 -4;2 1 1]


A=
2 3 5
3 4 -4
2 1 1
>> B = [4 -3 1;8 6 -2;1 4 9]
B=
4 -3 1
8 6 -2
1 4 9
>> A./B
ans =
0.5000 -1.0000 5.0000
0.3750 0.6667 2.0000
2.0000 0.2500 0.1111
>> A.\B
ans =
2.0000 -1.0000 0.2000
2.6667 1.5000 0.5000
0.5000 4.0000 9.0000
>> A.^2
ans =
4 9 25
9 16 16
4 1 1
>>
Introdução à Programação 37

2.6 FUNÇÕES PARA CÁLCULO DE MATRIZES

Na tabela seguinte descrevem-se algumas das funções internas do Matlab


mais utilizadas no cálculo de matrizes.

Função Descrição Exemplo


inv (A) Calcula a matriz inversa da >> A=[2 3 5;3 4 -4;2 1 1]
matriz quadrada A. A=
2 3 5
3 4 -4
2 1 1
>> inv(A)
ans =
-0.1905 -0.0476 0.7619
0.2619 0.1905 -0.5476
0.1190 -0.0952 0.0238
det (A) Calcula o determinante da >> det(A)
matriz quadrada A. ans =
-42
max (A) Se A é um vector calcula o >> x=[5 -7 8]
maior elemento de A. Se A é x=
uma matriz, calcula um vector 5 -7 8
linha com o maior elemento de >> max(x)
cada coluna. ans =
8
>> max(A)
ans =
3 4 5
[d,n] = max Se A é um vector, d recebe >> [d,n]=max(x)
(A) o maior elemento de A e n d=
indica a posição de d no vector 8
A. n=
3
Se A é uma matriz d é um
>> [d,n]=max(A)
vector linha com o maior d=
elemento de cada coluna, e n é 3 4 5
um vector linha com a posição n=
destes elementos em cada 2 2 1
coluna.
min (A) Se A é um vector calcula o >> min(x)
menor elemento de A. Se A é ans =
uma matriz, calcula um vector -7
linha com o menor elemento de >> min(A)
ans =
cada coluna.
2 1 -4
[d,n] = min Se A é um vector, d recebe >> [d,n]=min(x)
(A) o menor elemento de A e n d=
indica a posição de d no vector -7
A. n=
Se A é uma matriz d é um 2
>> [d,n]=min(A)
vector linha com o menor d=
Introdução à Programação 38

elemento de cada coluna, e n é 2 1 -4


um vector linha com a posição n=
destes elementos em cada 1 3 2
coluna.
dot (x,y) Calcula o produto escalar >> x=[5 -7 8]
(interno) dos dois vectores x e x=
y. Os vectores tanto podem ser 5 -7 8
vector linha como vector >> y=[4;6;2]
coluna, mas têm que ter o y=
4
mesmo número de elementos. 6
2
>> dot(x,y)
ans =
-6
sum (x) Se x é um vector, calcula a >> sum(x)
soma dos elementos do vector. ans =
6
mean (x) Se x é um vector calcula a >> mean(x)
média aritmética dos elementos ans =
de A. 2
sort (x) Se x é um vector, ordena os >> sort(x)
elementos de x por ordem ans =
crescente. -7 5 8
median (x) Se x é um vector calcula o >> median(x)
valor mediano dos elementos ans =
de x. 5
std (x) Se x é um vector calcula o >> std(x)
desvio padrão dos elementos de ans =
x. 7.9373
cross (x,y) Determina o produto >> x
vectorial (externo) dos 2 x=
vectores, x x y. 5 -7 8
>> y=[1 4 6]
y=
1 4 6
>> cross(x,y)
ans =
-74 -22 27

Por outro lado, é de notar que na execução das função internas do Matlab quando
o argumento de entrada é uma matriz, a operação é realizada em cada elemento dessa
matriz. O resultado da execução da função é uma nova matriz, cujos elementos são o
resultado da aplicação da função sobre cada um dos elementos da matriz inicial.
A seguir mostra-se a aplicação da função sind (x), em que x é um vector com 5
elementos. O resultado é um vector com 5 elementos, resultantes da aplicação da
função sind sobre cada um dos 5 elementos da matriz inicial.

>> x=[30 60 -120 45 90]


x=
30 60 -120 45 90
Introdução à Programação 39

>> sind(x)
ans =
0.5000 0.8660 -0.8660 0.7071 1.0000
>>

Mostram-se de seguida outros exemplos de execução de funções, com matrizes


como argumentos de entrada:

>> A = [4 1 5 9;6 4 1 8]
A=
4 1 5 9
6 4 1 8
>> factorial(A)
ans =
24 1 120 362880
720 24 1 40320
>> log10(A)
ans =
0.6021 0 0.6990 0.9542
0.7782 0.6021 0 0.9031
>> sqrt(A)
ans =
2.0000 1.0000 2.2361 3.0000
2.4495 2.0000 1.0000 2.8284
>>
Introdução à Programação 40

3. OPERADORES

Nos pontos anteriores apresentámos muitos exemplos de operações matemáticas


que utilizavam operadores matemáticos, que forma estudados com algum detalhe no
ponto 1.2. Neste ponto estudam-se os operadores lógicos e relacionais, que permitem
a comparação entre operandos, tendo como resultado respostas do tipo verdadeiro ou
falso. No caso da comparação entre matrizes, deve-se ter o cuidado de verificar se têm
o mesmo tamanho, porque caso contrário, a operação resulta em erro.
Estes operadores são de grande importância na avaliação de expressões
condicionais, para o controlo da ordem de execução dos comandos Matlab.

3.1 OPERADORES RELACIONAIS

Os operadores relacionais comparam expressões numéricas ou cadeias de


caracteres, sendo o resultado final, do tipo verdadeiro ou falso. Se o resultado é
verdadeiro o Matlab retorna o valor 1, se é falso retorna o valor 0.
Na tabela seguinte apresentam-se os operadores relacionais no Matlab:

Operador Relacional Descrição


== Igual a
~= Diferente de
> Maior que
>= Maior ou igual que
< Menor que
<= Menor ou igual que

O resultado da comparação entre 2 escalares, é o valor de retorno 1 ou 0. No caso


da comparação entre matrizes (vectores ou matrizes), a comparação é feita elemento a
elemento, e o resultado é uma matriz de retorno de uns e zeros, com o mesmo
tamanho das matrizes. Se a comparação é feita entre um escalar e uma matriz, o
escalar é comparado com todos os elementos da matriz, tendo como resultado uma
matriz de retorno de uns e zeros com o mesmo tamanho da matriz.
De seguida apresentam-se alguns exemplos:

>> 7>5
ans =
1
>> 7<=5
ans =
0
>> a = 7>5
a=
1
>> x
x=
4 1 5 9
>> 4<=x
Introdução à Programação 41

ans =
1 0 1 1
>> A
A=
3 5 -2 1
7 9 0 4
>> 4<=A
ans =
0 1 0 0
1 1 0 1
>> B = [2 5 6 1;7 -4 0 8]
B=
2 5 6 1
7 -4 0 8
>> A~=B
ans =
1 0 1 0
0 1 0 1
>> C=A-B>=1
C=
1 0 0 0
0 1 0 0
>>

No último exemplo a matriz A é subtraída de B, e então verifica se os elementos


(da matriz A-B) são maiores ou iguais a um, constituindo assim a matriz C.
Como vimos, o resultado de uma operação relacional entre matrizes é uma matriz
de uns e zeros chamada matriz lógica (ou vector lógico se tivermos a trabalhar com
vectores), que pode ser utilizada no endereçamento de outras matrizes. Quando uma
matriz lógica (ou vector lógico) é utilizado para tais finalidades, extrai da matriz
endereçada os elementos nas posições onde a matriz lógica (ou vector lógico) tem
uns. De seguida apresentam-se alguns exemplos:

>> A
A=
3 5 -2 1
7 9 0 4
>> C=A<=3
C=
1 0 1 1
0 0 1 0
>> D = A(C)
D=
3
-2
0
1
>> x
Introdução à Programação 42

x=
4 1 5 9
>> t=x>=4
t=
1 0 1 1
>> z = x(t)
z=
4 5 9
>>

De notar que, as matrizes lógicas de uns e zeros podem ser utilizadas em


operações aritméticas. Uma vez utilizada em operações aritméticas, a matriz lógica
transforma-se em matriz numérica.

>> A
A=
3 5 -2 1
7 9 0 4
>> B
B=
2 5 6 1
7 -4 0 8
>> (A~=B)/3+(A.*B)
ans =
6.3333 25.0000 -11.6667 1.0000
49.0000 -35.6667 0 32.3333
>>

3.2 OPERADORES E FUNÇÕES LÓGICAS

Os operadores lógicos podem ser utilizados em expressões matemáticas


juntamente com operadores aritméticos e relacionais. Os operadores lógicos do
Matlab são:

Opera Descrição Exemplo


dor
Lógico
& AND – “E” lógico. Actua em dois >> (8>7)&(0>-5)
operandos, A e B. Se ambos forem ans =
verdadeiros, o resultado é verdadeiro (1), 1
caso contrário o resultado é falso (0). >> (10>5)&(4>7)
ans =
0
| OR – “OU” lógico. Actua em dois >> (10~=5)|(4>7)
operandos, A e B. Se pelo menos um dos ans =
operandos for verdadeiro, o resultado é 1
Introdução à Programação 43

verdadeiro (1), caso contrário (ambos >> (8<7)|(0<=-5)


falsos) o resultado é falso (0). ans =
0
~ NOT – “NÃO” lógico. Actua num >> ~ ((10~=5)|(4>7))
operando A, tendo o valor verdadeiro (1) ans =
se o operando for falso, e o valor falso (0) 0
se o operando for verdadeiro. >> ~ ((8<7)|(0<=-5))
ans =
1

Os operadores lógicos (como os relacionais) tanto actuam em escalares (números)


como em matrizes. Quando recebem números como operandos, retornam o valor
verdadeiro (1) quando o número é diferente de zero e retornam o valor falso (0)
quando o número é zero.

>> 5&0
ans =
0
>> 5|0
ans =
1
>> ~5
ans =
0
>> ~0
ans =
1
>>

Os operadores lógicos AND e OR tanto podem agir em escalares, como em


matrizes ou entre um escalar e uma matriz. Se os dois operandos são escalares, o
resultado será um escalar 0 ou 1. Se os dois operandos são matrizes, têm que ter
obrigatoriamente o mesmo tamanho e a operação é executada elemento a elemento.
No caso de um dos operandos ser um escalar e o outro uma matriz, a operação é
realizada entre o escalar e cada um dos elementos da matriz, resultando numa matriz
de uns e zeros com o tamanho da matriz.
O operador lógico NOT tem apenas um operando, e quando o operando é um
escalar o resultado é zero ou um; se o operando é uma matriz, o resultado é uma
matriz de zeros e uns, resultante da negação de cada um dos elementos da matriz
inicial. De seguida apresentam-se alguns exemplos:

>> x = [4 -5 0 10]
x=
4 -5 0 10
>> y = [1 0 4 3]
y=
1 0 4 3
Introdução à Programação 44

>> x&y
ans =
1 0 0 1
>> ~x
ans =
0 0 1 0
>> 5&x
ans =
1 1 0 1
>> ~y
ans =
0 1 0 0
>> z = ((5&0)+4+(3|0))
z=
5
>> z = 8*((5&0)+4+(3|0))
z=
40
>>

O Matlab tem um conjunto de funções internas que se equivalem aos


operadores lógicos AND, OR e NOT:

Funçã Descrição Exemplo


o
and Equivalente a A&B >> A=[5 0 1 -4]
(A,B) A=
5 0 1 -4
>> B=[-4 0 13 0]
B=
-4 0 13 0
>> and(A,B)
ans =
1 0 1 0
or Equivalente a A|B >> or(A,B)
(A,B) ans =
1 0 1 1
not Equivalente a ~A >> not(A)
(A) ans =
0 1 0 0

O Matlab possui ainda um outro conjunto de funções lógicas, que retornam um (1)
quando a condição que testam é verdadeira e zero (0) quando é falsa. De seguida
listam-se as mais importantes:

Função Descrição Exemplo


xor Ou exclusivo. Retorna o valor >> xor(3,0)
(A,B) verdadeiro (1) se os operandos forem ans =
desiguais, ou seja, se um for verdadeiro e 1
Introdução à Programação 45

o outro for falso. >> xor(3,1)


ans =
0
all (A) Retorna o valor verdadeiro (1) se >> x=[6 5 -8 1]
todos os elementos de um vector A forem x=
verdadeiros (diferentes de zero). Retorna 6 5 -8 1
falso (0) se um ou mais elementos forem >> all(x)
ans =
falsos (0).
1
Se A for uma matriz, trata as colunas >> y=[-4 0 5 8]
de A como vectores e retorna um vector y=
de uns e zeros. -4 0 5 8
>> all(y)
ans =
0
>> A=[x;y]
A=
6 5 -8 1
-4 0 5 8
>> all(A)
ans =
1 0 1 1
any (A) Retorna o valor verdadeiro (1) se > x=[6 0 -8 1]
qualquer elemento de um vector A for x=
verdadeiro (diferente de zero). Retorna 6 0 -8 1
falso (0) se todos os elementos forem >> any(x)
ans =
falsos (0).
1
Se A for uma matriz, trata as colunas >> y=[0 0 0 0]
de A como vectores e retorna um vector y=
de uns e zeros. 0 0 0 0
>> any(y)
ans =
0
find (A) Se A for um vector, retorna os índices >> x=[6 0 -8 0 5 0 2]
dos elementos diferentes de zero. x=
find Neste formato retorna o índice dos 6 0 -8 0 5 0
(A>d) elementos maiores que d. 2
>> find(x)
De notar que, à semelhança do
ans =
operador >, qualquer operador relacional 1 3 5 7
pode ser utilizado com a função find. >> find(x>1)
ans =
1 5 7

A tabela seguinte, designada por “tabela de verdade”, mostra o resultado da


aplicação dos operadores lógicos a duas variáveis ou expressões lógicas A e B:

ENTRADA SAÍDA
A B AND OR NOT NOT XOR
A&B A|B ~A ~B xor
(A,B)
V V V V F F F
Introdução à Programação 46

V F F V F V V
F V F V V F V
F F F F V V F

3.3 ORDEM DE PRECEDÊNCIA

As expressões matemáticas podem conter simultaneamente operadores


aritméticos, lógicos e relacionais. A ordem de precedência dos operadores define a
ordem pela qual uma expressão é executada, quando diferentes operadores estão
presentes. A ordem de precedência seguida pelo Matlab é:

Precedência Operação
1 (Mais alta) Parêntesis.
2 Exponenciação.
3 Operador lógico NOT.
4 Multiplicação e divisão.
5 Adição e subtracção
6 Operadores relacionais (>, >=, <, <=, = =, ~=)
7 Operador lógico AND (&).
8 (Mais Operador lógico OR (|).
baixa)

Se duas ou mais operações têm precedências diferentes é realizada primeiro a


operação de precedência mais alta. Se possuem precedências iguais, a operação mais à
esquerda é executada primeiro, depois as restantes vão sendo realizadas uma a uma
até ao fim seguindo o mesmo princípio.
De notar que a precedência aqui descrita foi adoptada pelo Matlab a partir da
versão 6. Em versões anteriores do Matlab o operador lógico AND não precede o
operador lógico OR. Em caso de dúvida, estes problemas podem ser resolvidos
facilmente com a utilização sistemática de parêntesis, mesmo quando eles não sejam
eventualmente necessários. De seguida apresentam-se alguns exemplos de expressões
matemáticas, envolvendo parêntesis, e operadores aritméticos, lógicos e relacionais:

>> 5*4-6^2+8/4
ans =
-14
>> 5*(4-6)^2+8/4
ans =
22
>> 4+5^3*6&-2+3+6/~0
ans =
1
>> 5*4*6>=3-10|8~=-2*~7+6\18
ans =
1
>> 5*4*((6>=3)-10|8~=-2*~7+6\18)
Introdução à Programação 47

ans =
20
>>
Introdução à Programação 48

4. INSTRUÇÕES DE CONTROLO

As instruções são as acções algorítmicas elementares que constituem no seu


conjunto o corpo principal do programa, e que normalmente, são executadas
sequencialmente. Mas por vezes, há a necessidade desta ordem (sequencial) não ser
seguida. O Matlab possui instruções que permitem controlar a ordem de execução das
instruções constituintes de um programa:
 As instruções de selecção if e switch possibilitam a escolha de uma ou várias
instruções para execução, em função de uma dada condição se cumprir ou
não.
 As instruções de repetição for e while repetem a execução de um conjunto
de instruções um número fixo e predeterminado de vezes, ou até que se
verifique uma determinada condição. Por outro lado, a instrução break
permite interromper a execução de um ciclo for ou while.

4.1 INSTRUÇÕES DE SELECÇÃO

Estas estruturas permitem ao Matlab seleccionar instruções para execução,


conforme se verifiquem, ou não, determinadas condições. Podem ser seleccionadas
várias instruções, apenas uma, ou eventualmente nenhuma.

4.1.1 INSTRUÇÃO if

A forma mais simples de utilização da instrução if é:


if Expressão lógica
Bloco de Instruções;
end
Se a expressão lógica de teste for verdadeira são executados os comandos
entre if e end; se for falsa, o bloco de instruções entre if e end não é executado,
seguindo para a instrução a seguir a end. De seguida mostra-se um exemplo da
utilização da instrução if mais simples, em que se a nota introduzida pelo utilizador
for superior ou igual a 10 escreve ‘APROVADO’:

nota = input('Introduza a sua classificação: Introduza a sua classificação: 18


'); APROVADO
if nota>=9.5
disp('APROVADO');
end

O Matlab permite a inclusão de uma instrução if dentro de outra instrução if, ou


seja, permite que uma instrução seja inicializada e terminada dentro de outra instrução
if.
Introdução à Programação 49

nota = input('Introduza a sua Introduza a sua classificação:17


classificação:'); APROVADO
if nota>=9.5 COM DISTINÇÃO
disp('APROVADO')
if nota>=16
disp('COM DISTINÇÃO')
end
end

Como se vê no exemplo anterior, as palavras if e end aparecem no editor do


Matlab a azul, e os comandos entre if e end aparecem indentados (alinhados), o que
facilita a leitura e organização do programa.
No caso de se pretender executar instruções quando a expressão lógica tiver o
valor falso, a estrutura a utilizar é if-else-end, que tem a seguinte sintaxe:
if Expressão lógica
Bloco de Instruções 1
else
Bloco de Instruções 2
end
Se a expressão lógica de teste for verdadeira, o programa executará o bloco de
instruções 1 e depois saltará para o comando end; se for falsa, o programa executará o
bloco de instruções 2.
De seguida mostra-se um exemplo de aplicação desta estrutura:

nota = input('Introduza a sua Introduza a sua classificação:17


classificação:'); APROVADO
if nota>=9.5
disp('APROVADO') Introduza a sua classificação:8
REPROVADO
else
disp('REPROVADO')
end

Finalmente a forma mais geral e completa da instrução if que permite seleccionar


um de três ou mais blocos de instruções, é a seguinte:
if Expressão lógica 1
Bloco de Instruções 1
elseif Expressão lógica 2
Bloco de Instruções 2
elseif Expressão lógica 3
Bloco de Instruções 3
….
else
Bloco de Instruções n
Introdução à Programação 50

end
Se a expressão lógica 1 for verdadeira, o programa executará o bloco de instruções
1 e depois saltará para o comando end; se for falsa, o programa vai testar a expressão
lógica 2, e caso seja verdadeira, executará o bloco de instruções 2 e depois saltará
para o comando end; se for falsa, o programa vai testar a expressão lógica 3, e caso
seja verdadeira, executará o bloco de instruções 3 e depois saltará para o comando
end. Se nenhuma das expressões lógicas for verdadeira, o programa executará o bloco
de instruções a seguir ao comando else (se existir).
De realçar que é possível ter vários comandos elseif numa estrutura if, o que
possibilita testar várias condições com uma única instrução if. Por outro lado, o
comando else é opcional. No caso de não existir, e se tivermos vários elseif na
estrutura if, o programa executará o 1º bloco de instruções cuja expressão lógica seja
verdadeira, e poderá mesmo não executar qualquer comando, se todas as expressões
lógicas tiverem o valor falso.

De seguida mostra-se um exemplo de aplicação desta estrutura:

mbom = 0; bom = 0; suf = 0; rep = 0; Introduza a sua classificação:17


nota=input('Introduza a sua BOM
classificação:'); bom =
if nota>=18 1
disp('MUITO BOM')
mbom = mbom+1
elseif nota>=14
disp('BOM')
bom = bom+1
elseif nota>=10
disp('SUFICIENTE')
suf = suf+1
else
disp('REPROVADO')
rep = rep+1
end

Neste exemplo, as variáveis mbom, bom, suf e rep (que pretendem guardar os
valores correspondentes ao número de alunos com Muito Bom, Bom, Suficiente e
Reprovado) são inicializadas com o valor zero, depois é solicitado ao utilizador uma
nota sendo de seguida visualizado no ecrã a classificação correspondente a esta nota,
bem como o novo valor da variável correspondente.

4.1.2 INSTRUÇÃO switch-case

Esta instrução possibilita a selecção de uma entre muitas


possibilidades (casos) a partir do valor de uma variável ou expressão. A sua sintaxe é
a seguinte:
switch Expressão
case Valor 1
Introdução à Programação 51

Bloco de Instruções 1
case Valor 2
Bloco de Instruções 2
….

otherwise
Bloco de Instruções n
end
Se o valor da expressão é igual ao valor 1, o programa executa o bloco de
instruções 1, e de seguida salta para o comando end. Do mesmo modo, se o valor da
expressão é diferente de valor 1 e igual a valor 2, executa o bloco de instruções 2 e
depois salta para o comando end.
A expressão pode ser um escalar, um carácter, uma string, ou uma expressão
lógica.
A instrução otherwise (opcional), se existir é executada no caso do valor da
expressão for diferente das várias opções existentes valor 1, valor 2, …, valor n; se a
instrução otherwise não existir e o valor da expressão for diferente das várias opções
existentes, não será executado nenhum bloco de instruções.
De notar que a instrução otherwise na estrutura switch-case é equivalente à
instrução else na estrutura if.
De seguida mostra-se um exemplo de aplicação desta instrução:

opcao = input('Quer continuar (s/n)?: ','s'); Quer continuar (s/n)?: n


switch opcao O programa vai parar
case 's'
disp('O programa vai continuar') Quer continuar (s/n)?: t
Digite 's' ou 'n'!!!
case 'n'
disp('O programa vai parar')
otherwise
disp('Digite ''s'' ou ''n''!!!')
end

A instrução switch pode eventualmente ter um ou vários case com múltiplos


valores. Neste caso, a lista de valores devem ser colocadas entre chavetas, tal como se
ilustra no exemplo seguinte:

mbom = 0; bom = 0; suf = 0; rep = 0; Introduza a sua classificação : 18


nota = input('Introduza a sua classificação MUITO BOM
: '); mbom =
switch nota 1
case {18,19,20} Introduza a sua classificação : 7
disp('MUITO BOM') REPROVADO
mbom = mbom+1 rep =
case {14,15,16,17} 1
disp('BOM')
Introdução à Programação 52

bom = bom+1
case {10,11,12,13}
disp('SUFICIENTE')
suf = suf+1
otherwise
disp('REPROVADO')
rep = rep+1
end

A expressão pode ser uma expressão lógica como se mostra no exemplo seguinte:

nota=input('Introduza a sua classificação : Introduza a sua classificação : 10


'); APROVADO
switch nota>=9.5
case 1 Introduza a sua classificação : 9.4
REPROVADO
disp('APROVADO')
case 0
disp('REPROVADO')
end

De referir que se houver mais do que um case com um determinado valor


repetido, apenas o primeiro será executado, passando de seguida a execução do
programa para a primeira instrução após o end.

4.2 INSTRUÇÕES DE REPETIÇÃO

As instruções de repetição permitem que uma ou um grupo de instruções


sejam executadas repetidamente em ciclo, estando a respectiva paragem dependente
de uma dada condição predeterminada.
O Matlab tem dois tipos de ciclo: ciclo for e ciclo while. No ciclo for o
número de repetições é conhecido à partida; no ciclo while repete um conjunto de
instruções até que uma determinada condição seja satisfeita.
Ambos os ciclos podem ser terminados a qualquer momento por meio do
comando break.

4.2.1 CICLO for

Neste tipo de ciclo uma ou um grupo de instruções é repetido um


número de vezes predeterminado á partida.
A sua sintaxe é:
for Variável = Valor_inicial:Incremento:Valor_final
Bloco de Instruções
end
Introdução à Programação 53

O nome da variável é arbitrário, no entanto devem ser evitadas as letras i e j


se o programa lida com números complexos.
Inicialmente a variável toma o valor_inicial e o Matlab executa todas as
instruções entre for e end. De seguida o programa retorna ao comando for, a variável
é aumentada do valor incremento e comparada com o valor_final, e caso sejam
diferentes, é repetida a execução das instruções entre for e end. Este processo é
repetido até que o valor_inicial seja igual ao valor_final.
O incremento pode ser um número negativo, e caso seja omitido assume o valor 1.
De notar, que se os valores valor_inicial, incremento e valor_final forem tais, que
o valor da variável não possa atingir valor_final, o ciclo é repetido até que: se
incremento>0, até ao último valor da variável menor do que valor_final; se
incremento<0, até ao último valor da variável maior do que valor_final.
O valor da variável não deve ser redefinido dentro de um ciclo.
A variável sai do ciclo com o último valor que lhe é atribuído. De seguida mostra-
se um exemplo simples de aplicação do ciclo for envolvendo escalares, e em que é
mostrado também, o valor com que a variável sai do ciclo for:

t = 45; t=
for p=1:5 47
t = t+2 t=
end 49
t=
p 51
t=
53
t=
55
p=
5

O ciclo é repetido 5 vezes, assumindo p os valores 1, 2, 3, 4 e 5. Como não foi


digitado um ponto e vírgula após a expressão na terceira linha, os valores de t são
exibidos um a um no ecrã. No final, é mostrado o valor de p no fim do ciclo.
Um outro exemplo de utilização do ciclo for é mostrado a seguir no cálculo da
soma dos inteiros inferiores ao número introduzido pelo utilizador:

% Inicialização da variável soma % Qual o valor a calcular ? 5


soma =0 15
% Valor a calcular pedido ao utilizador %
n = input('Qual o valor a calcular ? ');
% Cálculo da soma utilizando um ciclo for %
for i = 1:n
soma = soma+i;
end
% Mostra o valor da soma %
disp(soma)
Introdução à Programação 54

Mostra-se a seguir um exemplo envolvendo matrizes, e mostra os valores de p e


da matriz b (soma da matriz a com o escalar p) em cada repetição do ciclo:

a = [1 3 5 8 9;7 -6 0 8 4] a=
for p = 1:2:5 1 3 5 8 9
p 7 -6 0 8 4
b = a+p p=
1
end b=
2 4 6 9 10
8 -5 1 9 5
p=
3
b=
4 6 8 11 12
10 -3 3 11 7
p=
5
b=
6 8 10 13 14
12 -1 5 13 9

Para além da sintaxe habitual o ciclo for pode assumir a forma de um vector com
elementos declarados explicitamente. Neste caso, em cada repetição é atribuído á
variável o valor de um dos elementos do vector, como se mostra no exemplo seguinte:

produto=1 produto =
for p = [1 5 8 9] 1
p p=
1
produto = produto*p
produto =
end 1
p=
5
produto =
5
p=
8
produto =
40
p=
9
produto =
360

4.2.2 CICLO while

Esta ciclo repete uma ou um conjunto de instruções enquanto uma


determinada condição for verdadeira. É útil quando se pretende realizar um ciclo, mas
Introdução à Programação 55

em que se desconhece previamente o número de repetições. A sintaxe desta instrução


é:
while Expressão
Bloco de Instruções
end
O bloco de instruções entre while e end é executado repetidamente, enquanto a
expressão for verdadeira (1).
Após a execução do bloco de instruções o programa passa novamente para o
comando while onde é novamente avaliada a expressão: se for verdadeira (1) é
executado novamente o bloco de instruções; se for falsa (0), o programa salta para a
instrução a seguir à instrução end. E assim sucessivamente.
De seguida mostra-se um exemplo de aplicação do ciclo while, em que são
pedidas a introdução das notas dos alunos de uma turma, considerando-se válidas,
apenas as que tenham valores entre zero e 20 valores. Quando é introduzido um valor
fora destes limites, o ciclo pára. Por fim, o programa mostra o número de alunos e a
média dos alunos com nota válida.

% Inicialização das variáveis


num_alunos = 0; soma = 0; media = 0;
nota = input ('Qual a classificação ? ')

% Ciclo while, em que apenas são válidas as notas entre zero e 20 valores
while ((nota>=0)&(nota<=20))
num_alunos = num_alunos+1
soma = soma+nota
media = soma/(num_alunos)
nota = input ('Qual a classificação ? ')
end

% Escreve valores %
fprintf(' Foram introduzidos %2.0f alunos com nota válida\n', num_alunos);
fprintf(' A média é %3.1f valores', media)

No exemplo anterior, a sequência ‘\n’ obriga a que a execução do programa passe


para a linha seguinte.
A execução deste programa mostra os seguintes resultados na Janela de
Comandos:

Qual a classificação ? 15
nota =
15
num_alunos =
1
soma =
15
Introdução à Programação 56

media =
15
Qual a classificação ? 12
nota =
12
num_alunos =
2
soma =
27
media =
13.5000
Qual a classificação ? -1
nota =
-1
Foram introduzidos 2 alunos com nota válida
A média é 13.5 valores>>

Se à entrada do ciclo a expressão é falsa (0), o ciclo não chega a ser executado
nenhuma vez. Por outro lado, pelo menos uma das variáveis da expressão de teste à
entrada do ciclo deve ser modificada dentro do ciclo, senão o programa entra em ciclo
infinito, e será necessário digitar Ctrl+C para parar a execução do programa.
Por vezes há a necessidade de inserir um ciclo ou uma instrução de selecção,
dentro de outro ciclo ou instrução de selecção. Neste caso, o ciclo ou a instrução de
selecção é inicializada e terminada dentro de outro ciclo ou instrução de selecção. O
Matlab não coloca limites ao número de ciclos ou instruções de selecção que estão
encadeados, mas todas as estruturas if, case, for e while nestas situações devem
terminar com o end correspondente.
De seguida mostra-se um exemplo de um ciclo for dentro de um ciclo while.
Partindo do exemplo mostrado atrás de cálculo da soma de n valores, o programa
permite nesta versão, que o cálculo seja repetido até que o utilizador digite uma tecla
que não o ‘S’ ou ‘s’. Por fim e já fora do ciclo, é mostrado o número de cálculos que
foram efectuados.

% Inicialização da variável resposta


resposta = 's';
num_resp = 0;

while ((resposta=='S') | (resposta=='s'))


% Inicialização da variável soma %
soma = 0;
num_resp = num_resp+1;
% Valor a calcular pedido ao utilizador %
n = input('Qual o valor a calcular ? ');

% Cálculo da soma utilizando um ciclo for %


for i = 1:n
soma = soma+i;
end
Introdução à Programação 57

% Mostra o valor da soma %


fprintf('A soma dos %i elementos é %i\n', n,soma);
resposta = input('Quer continuar ? (s/n) ','s');
end

fprintf('O número de cálculos foram %i ',num_resp);

A execução deste programa mostra os seguintes resultados na Janela de


Comandos:

Qual o valor a calcular ? 6


A soma dos 6 elementos é 21
Quer continuar ? (s/n) s
Qual o valor a calcular ? 8
A soma dos 8 elementos é 36
Quer continuar ? (s/n) n
O número de cálculos foram 2
>>

4.2.3 INSTRUÇÃO break

Este comando usa-se para terminar a execução de um ciclo for ou


while. Quando inserido num ciclo for ou while, passa a execução do programa para a
primeira instrução a seguir ao end desse ciclo.
Normalmente, aparece dentro de instruções de selecção: no caso de uma
determinada condição ser satisfeita, o ciclo é parado. De seguida exemplifica-se a
utilização da instrução break a partir do exemplo anterior de cálculo da soma dos n
elementos. Nesta exemplo o ciclo é parado quando a variável num_resp é igual a 5,
saltando o programa para a instrução fprintf imediatamente a seguir ao comando end
do ciclo while.

% Inicialização da variável resposta %


resposta='s';
num_resp=0;

while ((resposta=='S')|(resposta=='s'))
% Inicialização da variável soma %
soma=0;
num_resp=num_resp+1;
% Valor a calcular pedido ao utilizador %
n=input('Qual o valor a calcular ? ');

% Cálculo da soma utilizando um ciclo for %


for i=1:n
Introdução à Programação 58

soma = soma+i;

end
% Mostra o valor da soma %
fprintf('A soma dos %i elementos é %i\n', n,soma);
if num_resp==5
disp('TERMINOU !!! JÁ FEZ 5 CÁLCULOS !!!')
break
end
resposta=input('Quer continuar ? (s/n) ','s');
end

fprintf('O número de cálculos foram %i \n',num_resp);

A execução deste programa mostra os seguintes resultados na Janela de


Comandos:

Qual o valor a calcular ? 2


A soma dos 2 elementos é 3
Quer continuar ? (s/n) s
Qual o valor a calcular ? 4
A soma dos 4 elementos é 10
Quer continuar ? (s/n) s
Qual o valor a calcular ? 6
A soma dos 6 elementos é 21
Quer continuar ? (s/n) s
Qual o valor a calcular ? 8
A soma dos 8 elementos é 36
Quer continuar ? (s/n) s
Qual o valor a calcular ? 10
A soma dos 10 elementos é 55
TERMINOU !!! JÁ FEZ 5 CÁLCULOS !!!
O número de cálculos foram 5
>>

4.3 INSTRUÇÕES DE ENTRADA E SAÍDA DE DADOS

4.3.1 INSTRUÇÃO input

Quando se pretende que o utilizador introduza dados, utiliza-se a


função input. A sintaxe do comando é:
Nome da variável = input (Texto)
Introdução à Programação 59

Quando o comando input é executado, o Texto é mostrado no ecrã e é solicitado


ao utilizador que introduza um valor que é atribuído à variável. De seguida mostram-
se a introdução de uma variável numérica e de uma string.
De referir que neste último caso, é possível fazê-lo de 2 maneiras: na primeira
digitamos a string entre plicas (do mesmo modo que uma string é atribuída a uma
variável sem o comando input), na segunda utiliza-se a cadeia ‘s’ que declara os
caracteres a serem digitados como uma string (ver exemplo seguinte). Nesse caso, ao
aparecer a mensagem no prompt, o texto é digitado sem as aspas e é atribuído à
variável como uma string.

>> preço = input('Qual o preço do litro do gasóleo ? ')


Qual o preço do litro do gasóleo ? 0.92
preco =
0.9200
>> nome = input (' Qual o seu nome ? ','s')
Qual o seu nome ? José
nome =
José
>>

4.3.2 INSTRUÇÃO fprintf

No ponto 1.4.1 foi estudado o comando disp que permite a escrita


de variáveis e texto, e também foi referido que, quando pretendêssemos uma melhor
formatação dos dados e texto o Matlab dispunha da função fprintf.
Ao contrário do disp, o comando fprintf permite que a saída seja formatada pelo
utilizador. Por exemplo, o texto e os dados numéricos das variáveis podem ser
combinados e exibidos numa linha. Além disso, o formato dos números também pode
ser controlado.
A sintaxe mais geral do comando é
fprintf (‘string formatado’,lista de variáveis)
O string formatado contém o texto a ser apresentado entre plicas, e também pode
conter descritores para formatar as variáveis listadas inseridas no string.
Quando pretendemos apresentar apenas texto, a sintaxe é mais simples:
fprintf (‘string formatado’)
Para formatar o texto podemos utilizar vários descritores:

Símbol
Descrição
o
\n Passa para a linha seguinte
\b Retrocede uma casa
\t Faz tabulação horizontal (TAB)
\r Faz RETURN
Introdução à Programação 60

\\ Escreve o caractér \
\’ Escreve o caractér ‘
%% Escreve o caractér %

Se um programa tiver mais do que um comando fprintf, as saídas serão mostradas


à medida que cada fprintf for executado. Este comando não inicia uma nova linha ao
ser executado, pelo que se o quisermos fazer teremos de utilizar o descritor \n. O
seguinte programa,

fprintf ('Hoje é sexta-feira. ')


fprintf (' Amanhã é sábado.')
fprintf (' Depois de amanhã é domingo.')

provoca o seguinte resultado na Janela de Comandos:

Hoje é sexta-feira. Amanhã é sábado. Depois de amanhã é domingo.>>

Se pretendêssemos uma quebra de linha a seguir à palavra sábado teríamos:

fprintf ('Hoje é sexta-feira. ')


fprintf ('Amanhã é sábado.\n')
fprintf ('Depois de amanhã é domingo.')

que teria a seguinte saída na Janela de Comandos:

Hoje é sexta-feira. Amanhã é sábado.


Depois de amanhã é domingo.>>

Normalmente não temos apenas saída de texto, mas sim uma combinação de texto
e de números. Neste caso, a sintaxe é como vimos atrás:
fprintf (‘string formatado’,lista de variáveis)
O string formatado utiliza obrigatoriamente o caractér % e o descritor de formato
(f, e, E, g, G, i) apresentados a seguir:

Sím
Descrição
bolo
f Ponto fixo, ou número real com parte decimal.
e Ponto flutuante ou número real em notação científica com o e
Introdução à Programação 61

minúsculo.
Ponto flutuante ou número real em notação científica com o E
E
maiúsculo.
g Usa a notação mais compacta f ou e.
G Usa a notação mais compacta f ou E.
i Número inteiro.

De seguida apresentam-se alguns exemplos simples:

>> custo_litro=1.24;
>> fprintf(' O custo do litro do gasóleo é %f €',custo_litro)
O custo do litro do gasóleo é 1.240000 € >>

> fprintf(' O custo do litro do gasóleo é %e €',custo_litro)


O custo do litro do gasóleo é 1.240000e+000 € >>

>> nota=16;
>> fprintf(' A nota do João é %i valores',nota)
A nota do João é 16 valores >>

Além do caractér % e do descritor de formato (f, e, E, g, G, i), pode apresentar


outros caracteres de formatação de saída dos dados numéricos:

Símbolo Descrição
- Justifica o número dentro do campo.
+ Mostra o sinal do número.
0 Adiciona zeros (em vez de espaços
em branco), se o número for menor do
que o definido pelo utilizador.

Mostram-se de seguida um exemplo simples:

printf(' O custo do litro do gasóleo é %+f €',custo_litro)


O custo do litro do gasóleo é +1.240000 €

O número dos caracteres do número a apresentar pode ser definido pelo utilizador
por meio de descritores. Descrevemos de seguida os descritores mais utilizados:
 %w.df
f - Ponto fixo ou notação decimal.
w – Número total de caracteres (incluindo o ponto decimal e eventual
sinal menos.
d – Número de casas decimais.
Introdução à Programação 62

 %w.de
f - Ponto flutuante ou notação científica.
w – Número total de caracteres (incluindo o ponto decimal, eventual
sinal e cinco casas para o expoente).
d – Número de dígitos na mantissa após o ponto decimal.
 %w.dg
Usa o menor dos formatos short ou short e, com o número total de
caracteres w e d casas decimais.

A seguir apresentam-se alguns exemplos:

>> fprintf ('O litro de gasolina custa %4.2f euros',custo_litro)


O litro de gasolina custa 1.24 euros >>

>> fprintf('O valor de x é %6.2f e o de y é %7.4f\n',x,y)


O valor de x é -15.04 e o de y é 41.0678 >>

>> fprintf('O valor de x é %11.3e e o de y é %12.5e\n',x,y)


O valor de x é -1.504e+001 e o de y é 4.10678e+001
>>

De referir que o comando fprintf é vectorizado, ou seja, se um vector ou matriz


estiver incluído no comando, haverá repetição desse comando até que o último
elemento (da matriz ou vector) seja mostrado no ecrã. Neste caso os dados serão
utilizados coluna por coluna, como se mostra no exemplo seguinte:

>> x=1:5
x=
1 2 3 4 5
>> y=sqrt(x)
y=
1.0000 1.4142 1.7321 2.0000 2.2361
>> T=[x;y]
T=
1.0000 2.0000 3.0000 4.0000 5.0000
1.0000 1.4142 1.7321 2.0000 2.2361
>> fprintf('Se o número é %i, a sua raíz quadrada é %f\n',T)
Se o número é 1, a sua raíz quadrada é 1.000000
Se o número é 2, a sua raíz quadrada é 1.414214
Se o número é 3, a sua raíz quadrada é 1.732051
Se o número é 4, a sua raíz quadrada é 2.000000
Se o número é 5, a sua raíz quadrada é 2.236068
>>

>> x=1:5
Introdução à Programação 63

x=
1 2 3 4 5
>> y=sqrt(x)
y=
1.0000 1.4142 1.7321 2.0000 2.2361
>> T=[x;y]
T=
1.0000 2.0000 3.0000 4.0000 5.0000
1.0000 1.4142 1.7321 2.0000 2.2361
>> fprintf('A raíz quadrada de %i é %f\n',T)
A raíz quadrada de 1 é 1.000000
A raíz quadrada de 2 é 1.414214
A raíz quadrada de 3 é 1.732051
A raíz quadrada de 4 é 2.000000
A raíz quadrada de 5 é 2.236068

O comando fprintf pode ser utilizado para gravar os resultados de saída num
ficheiro. Estes dados poderão posteriormente ser utilizados pelo Matlab ou noutras
aplicações.
São necessários três passos para escrever dados num ficheiro utilizando o
comando fprintf:
1. Abrir um ficheiro utilizando o comando fopen.
2. Escrever os dados no ficheiro aberto utilizando o comando fprintf .
3. Fechar o ficheiro utilizando o comando fclose.

Passo 1:
Antes dos dados serem gravados num ficheiro, esse ficheiro deve ser aberto com o
comando fopen. Com este comando pode-se abrir um ficheiro já existente, ou criar
um novo.
A sintaxe do comando é:
fid = fopen (‘nome_do_ficheiro’, ’parâmetro de abertura’)

onde fid (file descriptor) é uma variável chamada identificadora do ficheiro. Um


número é atribuído à variável fid ao executar fopen. O parâmetro de abertura é um
campo escrito entre plicas e que define como o ficheiro é aberto. Os parâmetros mais
utilizados são:
 ‘r’ – Abre o ficheiro para leitura (modo de abertura por defeito)
 ‘w’ – Abre o ficheiro para escrita. Se o ficheiro já existir, o seu
conteúdo será apagado; se o ficheiro não existir, cria um novo ficheiro.
 ‘a’ – Idêntico ao parâmetro ‘w’, mas em que se o ficheiro já existir, os
dados a escrever serão acrescentados no fim do ficheiro.
Se não for especificado qualquer parâmetro o ficheiro será aberto na opção ‘r’.
De referir que é possível escrever em vários ficheiros diferentes, sendo então
necessário abrir vários ficheiros e atribuir-lhes diferentes fids (por exemplo, fid1, fid2,
fid3, etc…).
Introdução à Programação 64

Passo 2:

Depois do ficheiro estar aberto, podemos escrever nele com o comando fprintf.
Neste caso, a sua sintaxe é:

fprintf (fid, ‘string formatado’, lista de variáveis)

Passo 3:
Para concluir o processo de escrita, o ficheiro tem de ser fechado com o comando
fclose. A sua sintaxe é:
fclose ( fid)

De seguida mostra-se um exemplo que utiliza o comando fprintf para gravar os


resultados de saída em dois ficheiros de texto (com extensão .txt, e abertos no
Microsoft Word). Neste programa são gerados dois ficheiros, um com a raiz quadrada
e outro com o quadrado de 1 a 5.

% Este programa escreve a raiz quadrada e o quadrado de números,


% em dois ficheiros diferentes.

clear all
clc

x=1:5;
rq=sqrt(x);
tab1=[x;rq];
q=x.^2;
tab2=[x;q];

fid1=fopen('raiz_quad.txt','w');
fid2=fopen('quad.txt','w');

fprintf(fid1,' Tabela de Raízes Quadradas\n\n');


fprintf(fid1,'Valor Raíz Quadrada\n');
fprintf(fid1,' %i %4.2f\n',tab1);
fprintf(fid1,' \n');

fprintf(fid2,' Tabela de Potências\n\n');


fprintf(fid2,'Valor Quadrado\n');
fprintf(fid2,' %i %i\n',tab2);

fclose(fid1);
fclose(fid2);

De seguida são mostrados em Microsoft Word os dois ficheiros gerados na


execução do programa.
Introdução à Programação 65

FIGURA 4.1 – Ficheiros gerados no Word


Introdução à Programação 66

5. IMPORTAÇÃO E EXPORTAÇÃO DE DADOS

Neste ponto vamos estudar apenas alguns comandos mais comuns utilizados na
importação e exportação de dados numéricos em Matlab. O Matlab disponibiliza uma
grande diversidade de comandos utilizados para a transferência de dados (consultar o
Help), mas que estão fora do âmbito deste curso.
O modo mais simples de fazer a importação de dados numéricos é por meio do
comando load a partir de um ficheiro de texto não formatado criado com um editor de
texto qualquer (por exemplo o Notepad). A sintaxe do comando é,
load (‘dados.txt’)
No ficheiro dados.txt os números são separados com espaços e as linhas terminam
com ENTER.
O exemplo seguinte tem por base o exemplo do ponto anterior, mas em que os
valores do vector x são importados do ficheiro dados.txt.

% Este programa escreve a raíz quadrada e o quadrado de números,


% em dois ficheiros diferentes.

clear all
clc

x=load('dados.txt')
rq=sqrt(x);
tab1=[x;rq];
q=x.^2;
tab2=[x;q];

fid1=fopen('raiz_quad.txt','w');
fid2=fopen('quad.txt','w');

fprintf(fid1,' Tabela de Raízes Quadradas\n\n');


fprintf(fid1,'Valor Raíz Quadrada\n');
fprintf(fid1,' %i %4.2f\n',tab1);
fprintf(fid1,' \n');

fprintf(fid2,' Tabela de Potências\n\n');


fprintf(fid2,'Valor Quadrado\n');
fprintf(fid2,' %i %i\n',tab2);

fclose(fid1);
fclose(fid2);

O ficheiro dados.txt criado no Notepad é:


Introdução à Programação 67

FIGURA 5.1 – Ficheiro de texto no Notepad

De notar que se podem dispensar os parêntesis e as plicas se o nome do ficheiro


não for atribuído a uma variável string. Neste caso a matriz tem o mesmo nome do
ficheiro (sem extensão), e a mesma dimensão dos dados no ficheiro. Uma nova versão
do exemplo anterior é mostrado a seguir:

% Este programa escreve a raíz quadrada e o quadrado de números,


% em dois ficheiros diferentes.

clear all
clc

load dados.txt
rq=sqrt(dados);
tab1=[dados;rq];
q=dados.^2;
tab2=[dados;q];

fid1=fopen('raiz_quad.txt','w');
fid2=fopen('quad.txt','w');

fprintf(fid1,' Tabela de Raízes Quadradas\n\n');


fprintf(fid1,'Valor Raíz Quadrada\n');
fprintf(fid1,' %i %4.2f\n',tab1);
fprintf(fid1,' \n');

fprintf(fid2,' Tabela de Potências\n\n');


fprintf(fid2,'Valor Quadrado\n');
fprintf(fid2,' %i %i\n',tab2);

fclose(fid1);
fclose(fid2);
Introdução à Programação 68

De seguida vai-se estudar a importação e exportação de dados com a folha de


cálculo Microsoft Excel, que é uma ferramenta muito utilizada na organização e
armazenamento de dados.
A importação dos dados da folha de Excel é feita com o comando xlsread, e a sua
forma mais geral tem a seguinte sintaxe:
Nome_variável = xlsread (‘Nome_ficheiro’)
Quando o comando é executado os dados da folha de cálculo Nome_ficheiro.xls,
são atribuídos à variável Nome_variável. Se a folha de cálculo tiver mais do que uma
folha, os dados serão importados apenas da primeira folha.
A instrução xlsread ignora linhas ou colunas prévias com texto, contudo se uma
célula (não prévia) estiver vazia ou com texto é substituída por NaN (Not a Number).
Se o ficheiro tiver mais do que uma folha, e se o utilizador pretender escolher a
folha o comando terá o seguinte formato:
Nome_variável = xlsread (‘Nome_ficheiro’,’Nome_folha’)
Outra opção importante é se, se pretende importar apenas uma parte dos dados
contidos numa folha de cálculo. Neste caso, a sintaxe do comando é:
Nome_variável = xlsread (‘Nome_ficheiro’,’Nome_folha,’Intervalo_de_dados’)
Por exemplo, A = xlsread(‘exemplo.xls’,’Folha2’,’C5:E13’), atribui os dados
contidos entre C5 e E13 (9 linhas e 3 colunas) na folha Folha2 do ficheiro
exemplo.xls, à matriz A. Quando se omite a folha o Matlab assume a folha 1.
Se se pretender que o utilizador escolha a folha e o intervalo de dados durante a
execução da instrução, deve-se utilizar a instrução no seguinte formato:
Nome_variável = xlsread (‘Nome_ficheiro’,-1)
A escrita (exportação) de dados numa folha de cálculo Excel é feita por meio do
comando xlswrite, que tem a seguinte sintaxe na sua forma mais geral:
xlswrite (‘Nome_ficheiro’,Nome_variável)
Nome_ficheiro é o ficheiro do Excel em que vão ser escritos os dados; este
ficheiro deve existir na directoria corrente de trabalho, mas se não existir, um novo
ficheiro é criado.
Tal como para o comando xlsread, também se pode especificar uma folha
específica ou um intervalo específico de uma folha para onde vão ser escritos os
dados. Neste caso a sintaxe é:
xlswrite ('Nome_ficheiro', Nome_variável, ‘Nome_Folha’,
'Intervalo_de_dados')
De seguida mostra-se um exemplo de aplicação, em que são calculados e escritos
num ficheiro Excel area.xls os valores da área de circunferências, cujos raios são
importados de um ficheiro Excel raio.xls.

% Este programa importa os valores do raio, calcula e


% exporta o valor das areas, utilizando ficheiros em Excel.
clear all
clc
Introdução à Programação 69

x = xlsread('raio');
area = pi*x.^2;

% Escreve os valores do raio e os respectivos valores da área


xlswrite('area',x,'A2:A6')
xlswrite('area',area,'B2:B6')

Mostram-se de seguida os ficheiros Excel raio.xls (de importação de dados) e


area.xls (de escrita), correspondentes ao programa anterior.

FIGURA 5.2 – Ficheiros de importação e de escrita de dados no Excel


Introdução à Programação 70

6. FUNÇÕES

Nos pontos anteriores, nomeadamente no ponto 1.5, estudámos algumas das


muitas funções originais existentes no Matlab. Para serem utilizadas em expressões
matemáticas, basta digitar o nome da função com o(s) devido(s) argumento(s). Alguns
exemplos destas funções: sin(x), cos(x), sqrt(x), etc.
No entanto a maioria dos programas, requer a utilização de funções que não
existem originalmente no Matlab. Quando se necessita de uma função apenas uma
vez, pode-se digitá-la como parte do programa. Porém, quando o programa faz várias
chamadas de uma função para diferentes valores dos argumentos, é conveniente criar
uma nova função no Matlab.
Estas funções são criadas e salvas no editor de código como ficheiros-M, e são
usadas do mesmo modo que as funções originais do Matlab. As funções para além de
conterem uma sequência de comandos Matlab, podem receber (parâmetros de
entrada) e devolver valores (parâmetros de saída). Isto significa, que as operações
realizadas dentro da função são desenvolvidas com base nos dados de entrada e os
resultados de saída são transferidos para o programa principal. A entrada e a saída
podem conter uma ou várias variáveis e cada variável pode ser um escalar, um vector
ou uma matriz.
Uma função é executada num espaço de dados fechado e apenas acessível pela
própria função. Todas as variáveis criadas e manipuladas durante a execução de uma
função residem nesse espaço de dados privado, dizendo-se que são variáveis locais,
sendo eliminadas quando termina a execução da função, excepto se forem criadas
especialmente como variáveis globais.

6.1 ESTRUTURA DE UMA FUNÇÃO

A estrutura típica de uma função é mostrada na janela inferior da figura 6.1.


Na figura 6.1 mostram-se duas janelas contendo o programa principal e a função
que vai calcular e mostrar a área e o perímetro do rectângulo. Esta função (rectângulo)
recebe como parâmetros de entrada, o comprimento e a largura do rectângulo. A
função calcula a área e o perímetro do rectângulo.
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’. Na realidade, o Matlab identifica uma função com base
no nome do ficheiro e não no nome utilizado na sua declaração. Uma vez localizado o
ficheiro, é executada a primeira função declarada no mesmo.
Introdução à Programação 71

FIGURA 6.1 – Exemplo de um programa com chamada de uma função

A primeira linha deve ser a linha de declaração da função. De outro modo, o


Matlab tratá-lo-á como um ficheiro normal com uma sequência de comandos Matlab
(script). A linha de declaração de uma função:
- Define o ficheiro como uma função (diferenciando-o de um programa)
- Define o nome da função
- Define o número e a ordem das variáveis de entrada, e as variáveis de saída.
A sintaxe geral da linha de declaração de uma função é:
function [parâmetros de saída] = nome_da_função (parâmetros de entrada)
Como exemplo apresenta-se o da figura 6.1:
function[ar,per]=rectangulo(lado1,lado2)
A palavra function é digitada em letras minúsculas e deve preceder quaisquer
outros comandos; antes da declaração da função apenas são permitidos comentários.
De notar que ao ser digitada no Editor, a sua cor muda para azul.
Os parâmetros de entrada e de saída são utilizados na passagem de um ou mais
parâmetros (dados ou variáveis) para a função. Os parâmetros de entrada aparecem
logo após o nome da função. Normalmente, toda a função tem pelo menos um
parâmetro de entrada, embora seja possível declarar funções que não têm parâmetros
de entrada. De facto, o mais usual é as funções terem vários parâmetros de entrada;
nestes casos, os parâmetros de entrada estão separados por vírgulas. Os parâmetros
Introdução à Programação 72

são em geral escalares, vectores ou matrizes genéricas; no exemplo apresentado atrás,


há dois parâmetros de entrada lado1 e lado2, e nas expressões aritméticas são usados
como escalares.
O código da função deve ser escrito em termos dos parâmetros de entrada, e tais
parâmetros devem ser inicializados numericamente antes que a função seja chamada.
Os valores verdadeiros dos parâmetros de entrada de uma função, são passados na
chamada da função pelo programa principal.
Os parâmetros de saída são listados dentro de parêntesis rectos na linha de
declaração da função à esquerda do operador de atribuição (=), e devem conter os
parâmetros cujos valores são devolvidos pela função. De notar que não é obrigatório
que as funções retornem valores, e se houver apenas um parâmetro de saída pode-se
digitar sem parêntesis.
No exemplo mostrado atrás, existem dois parâmetros de saída ar e per.
Se uma função não tiver parâmetros de saída o operador de atribuição (=) pode ser
omitido.
É possível passar strings para uma função: basta digitar a string como parte das
variáveis de entrada (o texto deve aparecer entre aspas).
Na tabela seguinte faz-se um resumo das linhas de declaração com diferentes
combinações dos parâmetros de entrada e de saída, tal como acabámos de estudar:

Linha de declaração da função Descrição


function[ar,per] = Dois parâmetros de entrada e dois
rectangulo(lado1,lado2) parâmetros de saída.
function [T] = rect(x,y) Dois parâmetros de entrada e um
parâmetro de saída.
function T = rect(x,y) Mesma função declarada acima.
function F(x,y,z) Três parâmetros de entrada e
nenhum parâmetro de saída.

Como se vê atrás no exemplo mostrado na figura 6.1, a seguir à declaração da


função aparece normalmente um pequeno texto opcional de ajuda, com a descrição da
função, parâmetros de entrada/saída, exemplos de utilização, etc. Este texto de ajuda é
constituído por um conjunto de linhas de comentários precedidas pelo caractere %, e
será apresentado sempre que for pedida ajuda sobre a função. Uma função não precisa
de conter este texto, mas é habitual utilizá-lo para tornar inteligível o código da
função.
Na primeira linha da ajuda, designada por linha H1, recomenda-se que utilize o
nome da função e que descreva a sua funcionalidade. Quando o utilizador ao procurar
ajuda digita lookfor palavra_chave, o Matlab procura a palavra-chave em todas as
linhas H1 de todas as funções (as originais do Matlab e as criadas pelo utilizador), e,
se a palavra procurada estiver em alguma linha H1, o Matlab mostrará o conteúdo
dessa linha.
De seguida mostra-se um exemplo referente à função mostrada na figura 6.1.

>> lookfor rectangulo


rectangulo calcula a área e o perímetro de um rectângulo
>>
Introdução à Programação 73

Todas as seguintes linhas de comentários devem suceder a linha H1. Estas linhas
de comentários são mostradas conjuntamente com a linha H1, quando o utilizador
digita help nome_da_função. Por exemplo,

>> help rectangulo


rectangulo calcula a área e o perímetro de um rectângulo
Argumentos de entrada:
lado1,lado2=medida dos lados
Argumentos de saída:
ar=valor da área
per=valor do perímetro

>>

Como é lógico todas as linhas de comentários existentes no corpo da função são


ignoradas pelo comando help.
Após estas linhas de comentários aparece o corpo da função constituído pelas
linhas de código necessárias à execução da função.

6.2 VARIÁVEIS LOCAIS E GLOBAIS

Todas as variáveis de uma função são locais, ou seja, os parâmetros de


entrada e de saída são definidos e reconhecidos apenas dentro da estrutura da função.
Quando a função é chamada, o Matlab utiliza um espaço de memória diferente do
espaço ocupado pela área de trabalho (espaço de memória onde é executada a janela
Command Window e os programas). Numa função, as variáveis de entrada são
inicializadas cada vez que a função é chamada da linha de prompt. Assim, as variáveis
podem ser utilizadas em cálculos dentro da função. Terminada a execução da função,
os valores dos parâmetros de saída são passados às variáveis utilizadas para chamar a
função. Logo, uma função pode possuir variáveis com nomes idênticos às variáveis
declaradas na janela Comando Window ou num programa. Concluindo, os valores
atribuídos às variáveis internas das funções não serão modificados por nenhum tipo de
atribuição feito fora do ambiente da função.
Todas as funções possuem um conjunto particular de variáveis locais que não são
compartilhadas com outras funções ou com a área de trabalho da janela Command
Window e/ou das rotinas. Mas, é possível tornar uma variável comum (pública) às
várias funções e, possivelmente a toda a área de trabalho. Para declarar uma variável
global utiliza-se a seguinte sintaxe:
global = Nome_da_variável
A declaração de várias variáveis como globais, pode ser feita listando e separando
as variáveis por meio de espaços após um único comando global. No exemplo
seguinte declaram-se as variáveis x, y e z como variáveis globais:

>> global X Y Dia_de_Pascoa


>>
Introdução à Programação 74

A variável que se quer utilizar como global tem de ser declarada como global em
todas as funções e em todas as partes do Matlab em que o utilizador quiser que ela
seja reconhecida como tal. Desse modo, a variável torna-se comum a essas funções.
O comando global deve ser digitado na janela Command Window e/ou dentro do
programa para para que a variável seja reconhecida na área de trabalho.
Nas funções, o comando global deve aparecer antes da variável ser utilizada; é
recomendado utilizar esse comando após as linhas de ajuda (H1 e de comentário).
Para se diferenciarem das variáveis locais, recomenda-se utilizar nomes extensos e
letras maiúsculas para as variáveis globais como se fez no exemplo anterior.

6.3 EXEMPLOS

Neste ponto mostram-se exemplos simples de utilização de funções.

2
( x 3 5 x )
Considere-se a função y = f(x) = . Pretende-se calcular o valor da
2 x  25
função para vários valores de x.
No editor define-se a seguinte função exemplo_6_3_1:

function y = exemplo_6_3_1(x)

y=(sqrt(x^3+5*x)^2)/(2*x+25)

Se quisesse saber o valor da função, para por exemplo, x = 6 ou x = -1 o utilizador


faria:

>> exemplo_6_3_1(6)
ans =
6.6486
>> exemplo_6_3_1(-1)
ans =
-0.2609
>> y = exemplo_6_3_1(6)
y=
6.6486
>> y = exemplo_6_3_1(-1)
y=
-0.2609
>> z = exemplo_6_3_1(-1)
z=
-0.2609
Introdução à Programação 75

Como se vê no exemplo atrás, o resultado é visualizado na forma padronizada


(ans) ou então atribuído a uma nova variável (y ou z), conforme o que digitamos na
chamada da função.

Se se quisesse trabalhar directamente na janela Command Window sem usar o


editor:

>> x=6
x=
6
>> y=(sqrt(x.^3+5*x).^2)./(2*x+25)
y=
6.6486
>>

No caso do argumento da função (x) ser um vector (por exemplo [6 -1] ), ou seja
quando pretendo trabalhar simultaneamente com vários valores de x, tem que se
considerar as operações elemento a elemento do vector. Neste caso, obtém-se a
função exemplo_6_3_2 com as seguintes alterações no código da função:

function y = exemplo_6_3_2(x)

y = (sqrt(x.^3+5*x).^2)./(2*x+25);

Para o vector referido, obtém-se o seguinte resultado na janela Command


Window:

>> x = [6 -1]
x=
6 -1
>> y = exemplo_6_3_2(x)
y=
6.6486 -0.2609
>>

De seguida mostra-se a função hipotenusa que calcula a hipotenusa de um


triângulo rectângulo sendo dados os outros dois lados:

function y = hipotenusa(lado1,lado2)
% hipotenusa calcula a hipotenusa de um triangulo dando os dois lados rectos

y = sqrt(lado1.^2+lado2.^2);
Introdução à Programação 76

De seguida mostram-se os resultados de vários exemplos de execução da função


hipotenusa na janela Command Window:

>> hipotenusa(3,4)
ans =
5
>> hipotenusa(5,6)
ans =
7.8102
>> lado1=[3 5]
lado1 =
3 5
>> lado2=[4 6]
lado2 =
4 6
>> hipotenusa(lado1,lado2)
ans =
5.0000 7.8102
>>
Introdução à Programação 77

6.4 FUNÇÕES inline

Quando o valor de uma função matemática precisa de ser determinado dentro


de um programa, o Matlab oferece o recurso das funções inline. Uma função inline é
definida como parte da unidade de código do programa que a contém (ou seja, não é
um arquivo .m em separado) e pode ser utilizada apenas dentro dessa unidade de
código.
As funções inline podem ser declaradas em funções, em programas escritos em
Matlab, nas declarações de funções, ou na Janela de Comandos.
Todas as funções inline são criadas por meio do comando inline, seguindo a
sintaxe:
Nome_função = inline ('expressão matemática')
Mostra-se de seguida como exemplo, a definição da função f(x) = x2-5x+12 como
uma função inline.

>> f=inline('x^2-5*x+12')
f=
Inline function:
f(x) = x^2-5*x+12
>>

De notar que:
• A expressão matemática pode ter uma ou mais variáveis independentes.
• Quaiquer letras, excepto i e j, podem ser designadas variáveis independentes
na expressão.
• A expressão matemática pode ter funções nativas ou personalizadas.
• As expressões não podem conter variáveis previamente inicializadas.
• Uma vez definida uma função inline é possível chamá-la pelo nome,
atribuindo-lhe valor(es) ao(s) argumento(s).
• Uma função inline pode ser utilizada como argumento de outras funções.

O comando inline para funções com duas ou mais variáveis independentes pode
ser escrito utilizando-se a mesma sintaxe, como se ilustra no exemplo seguinte:

>> t=inline('x^2-5*x+12+z^4')
t=
Inline function:
t(x,z) = x^2-5*x+12+z^4
>>

Para este caso, ou seja para funções com duas ou mais variáveis independentes
pode-se utilizar a sintaxe referida, ou então a seguinte sintaxe:
Nome_função = inline ('expressão matemática', 'arg1', 'arg2', 'arg3')
A função t seria então definida do seguinte modo:
Introdução à Programação 78

>> t=inline('x^2-5*x+12+z^4‘, 'x', 'z')


t=
Inline function:
t(x,z) = x^2-5*x+12+z^4
>>

Feita a declaração da função, é possível testá-la na Janela de Comandos, como por


exemplo:

>> t(2,3)
ans =
87
>>

7. GRÁFICOS

Um dos pontos mais fortes do Matlab é a sua capacidade de representação gráfica


dos dados. O Matlab possui muitos comandos capazes de criarem diferentes tipos de
gráficos bidimensionais (2D) ou tridimensionais (3D). Neste ponto, estudam-se
apenas a forma de criar e formatar os gráficos bidimensionais, já que, são os mais
utilizados e de uma forma geral adequados para a representação de conjuntos de
dados simples ou de média complexidade nas mais diversas áreas científicas.
Os gráficos bidimensionais são mais simples de criar e normalmente de mais fácil
compreensão do que os gráficos tridimensionais. Em comparação com os gráficos
bidimensionais, os gráficos 3D têm uma aplicabilidade mais restrita.
De referir que, os gráficos existentes podem sempre ser modificados
interactivamente, usando as ferramentas de edição de gráficos.
Na figura 7.1 mostra-se um gráfico típico muito simples, gerado na Janela Gráfica
pela seguinte sucessão de comandos:

>> x = [1 3 5 7 9]
x=
1 3 5 7 9
Introdução à Programação 79

>> y = x.^2-10
y=
-9 -1 15 39 71
>> plot(x,y)

O resultado das funções de representação gráfica (no exempo anterior, a função


plot) é apresentado numa janela especial (Janela Gráfica), normalmente designada por
figura.
Como se vê no exemplo da Figura 7.1, uma figura padrão possui um título situado
na barra superior da janela, um menu, uma barra de ferramentas e a área do gráfico
que ocupa a maior parte da janela. Neste caso (o mais simples), a figura contém
apenas um gráfico constituído pelos dois elementos básicos: o sistema de eixos e as
linhas que representam os dados. Mas, o gráfico pode conter ainda outros elementos:
título, legenda, etiquetas nos eixos e anotações textuais.

FIGURA 7.1 – Exemplo de gráfico

As funções gráficas bidimensionais estão agrupadas no pacote graph2d. Pode-se


obter uma listagem destas funções digitando help graph2d.
Introdução à Programação 80

7.1 FUNÇÃO plot

A função plot é a principal função utilizada para criar gráficos 2D. A sua
sintaxe mais simples é:
plot (x, y)
Os seus argumentos x e y devem ser vectores e devem ter o mesmo tamanho.
Como se vê na Figura 7.1, o comando plot produz uma única curva, estando os
valores de x dispostos na abcissa (eixo horizontal) e os valores de y na ordenada (eixo
vertical). A curva é construída a partir de segmentos de recta que ligam os pontos
cujas coordenadas são definidas pelos elementos dos vectores x e y. O primeiro vector
digitado no argumento da função é usado como eixo horizontal e, o segundo, como
eixo vertical.
A cor padrão do gráfico é o azul que, logicamente, pode ser alterada.
É possível controlar alguns aspectos da representação gráfica adicionando outros
argumentos ao comando plot para permitir definir a cor, o estilo de linha, a cor e o
estilo dos marcadores. Neste caso, a sintaxe do comando é:
plot (x, y, ‘Especificadores de linha’, ‘Propriedade’, Valor_da_propriedade)
em que:
 x e y são vectores
 Especificadores de linha – Opcional, especifica o tipo e a cor da linha e os
tipos de marcadores;
 Propriedade e Valor_da_Propriedade - Opcionais, definem as
propriedades adicionais usadas para definir a espessura da linha, o tamanho
do marcador e da borda e a cor do preenchimento.

. Especificadores de linha:
Este campo é opcional e pode ser utilizado para definir o estilo, a cor e o tipo de
marcadores das linhas.
Os especificadores para estilos de linhas são:

Estilo de linha Especificador


Contínua (Por defeito) -
Tracejada --
Traço-ponto -.
Ponteada :

Os especificadores de cores de linhas são:

Cor de linha Especificador


Azul (Por defeito) b (ou blue)
Preto k (ou black)--
Vermelho r (ou red)
Verde g (ou green)
Ciano c (ou cyan)
Magenta m (ou magenta)
Amarelo y (ou yellow)
Introdução à Programação 81

Branco w (ou white)

Os especificadores de tipos de marcadores são:

Estilo de linha Especificador


Ponto .
Círculo o
Marca x x
Marca + +
Estrela *
Quadrado s
Diamante d
Triângulo para baixo v
Triângulo para cima ^
Triângulo à esquerda <
Triângulo à direita >
Pentágono p
Hexágono h

De notar que os especificadores são digitados entre plicas dentro do argumento do


comando plot, e que são opcionais, ou seja, nenhum, um, dois ou todos os
especificadores podem ser incluídos num comando, como se ilustra nos exemplos
seguintes. Por fim, refira-se que os especificadores podem ser digitados por qualquer
ordem. Alguns exemplos:

>> plot (x,y,':')


>> plot (x,y,'r')
>> plot (x,y,'red')
>> plot (x,y,'*')
>> plot (x,y,'* g')
>> plot (x,y,'* g -')
>> plot (x,y,'- * g')

Na figura 7.2 mostra-se a representação gráfica da execução do último comando,


em que uma linha contínua (-) verde (g) liga os pontos marcados com asterisco (*).
Introdução à Programação 82

FIGURA 7.2 – Exemplo de gráfico

. Propriedades:
As propriedades também são opcionais e podem ser utilizadas na especificação da
espessura da linha, do tamanho e das cores dos marcadores das linhas e para
preenchimento. As propriedades são digitadas entre plicas, são separadas por vírgula e
seguidas do valor da propriedade. De seguida mostram-se valores das propriedades:

Propriedade Descrição
linewidth Especifica a espessura da linha em número de pontos.
Por defeito toma o valor 0.5.
markersize Especifica o tamanho do marcador em número de pontos.
markeredgecol Especifica a cor do marcador ou a cor da borda da linha
or que limita o marcador. A cor é digitada entre plicas.
markeredgecol Especifica a cor de preenchimento dos marcadores. A cor
or é digitada entre plicas.

Um exemplo:

>> plot(x,y,'--gp','linewidth',5, 'markersize',50,'markeredgecolor','y','markerfacecolor','g')


Introdução à Programação 83

7.2 FUNÇÃO fplot

Outra forma de criar gráficos é utilizar a função fplot. A sua sintaxe é:


fplot (‘função’, limites, especificadores de linha)
em que :
 função – é a função a ser gerada;
 limites – os limites de x (domínio da função) e, opcionalmente os limites
do eixo y.
 especificadores de linha – opcional, definem o tipo, cor da linha e
marcadores.
A função deve ser digitada directamente entre plicas. Os limites devem ser
introduzidos como um vector de dois elementos que especifica o intervalo do domínio
x [xmin, y min], ou um vector com quatro elementos que especifica o intervalo do
domínio x e do contradomínio y onde se deseja visualizar o gráfico da da função
[xmin, xmax, ymin, ymax]. Os especificadores de linha são os mesmos descritos no
ponto anterior para o comando plot.
No exemplo seguinte, a curva gerada é apresentada na figura 7.3.

>> fplot('sind(2*x)/(2*x)',[-1080,1080])

-3
x 10
20

15

10

-5
-1000 -500 0 500 1000

FIGURA 7.3 – Gráfico da função y = sind(2x)/(2x)

De referir que este gráfico foi copiado da Janela Gráfica por meio da opção Copy
Figure do menu Edit.
Introdução à Programação 84

7.3 FORMATAÇÃO

Como vimos, os comandos plot e fplot permitem somente a criação de


gráficos. Mas, é usual um gráfico apresentar outro tipo de informação, como por
exemplo: títulos dos eixos, título do gráfico, legenda, grelhas, gamas de valores dos
eixos, e caixas de texto.
A formatação de gráficos pode acontecer em dois momentos: após os comandos
plot e fplot utilizando vários comandos de formatação, ou usando interactivamente, o
editor das propriedades na Janela Gráfica (Figure Window).
Vamo-nos debruçar sobre o primeiro modo, estudando vários comandos de
formatação de gráficos.

7.3.1 COMANDO axis

Quando um gráfico é criado com o comando plot(x,y), o Matlab cria


eixos cujos limites estão baseados nos valores mínimo e máximo dos vectores x e y.
Para os alterar dever-se-á utilizar o comando axis com a seguinte sintaxe:
axis ([xmin, xmax, ymin, ymax])
em que :
 xmin, xmax – limites do eixo x;
 ymin, ymax – limites do eixo y;
Para voltar aos valores usados no Matlab por defeito, digita-se axis auto.
O comando axis permite também controlar a visibilidade dos eixos: axis on torna
os eixos visíveis e axis off torna-os invisíveis.
Outras formas possíveis de utilizar o comando axis é:
 axis equal – configura escalas iguais para os eixos x e y;
 axis square – configura as escalas x e y, de modo que a região do gráfico
seja um quadrado.

7.3.2 COMANDO grid

A grelha, tal como os eixos, tem a finalidade de melhorar a


visualização de um gráfico. O comando grid on torna visível a grelha; o comando
grid off torna-a invisível. Por defeito, o Matlab coloca a grelha invisível.
No exemplo seguinte, é apresentada a curva gerada na Figura 7.3 com grelha.

>> fplot('sind(2*x)/(2*x)',[-1080,1080])
>> grid on
Introdução à Programação 85

-3
x 10
20

15

10

-5
-1000 -800 -600 -400 -200 0 200 400 600 800 1000

FIGURA 7.4 – Gráfico com grelha da função y = sind(2x)/(2x)

7.3.3 Texto

O Matlab tem um grande conjunto de comandos para a inserção de


texto em gráficos. De entre elas, destacam-se os seguintes:
 Comando gtext
Serve para inserir uma caixa de texto, na posição especificada pelo
utilizador com o rato. Ao executar este comando, o Matlab abre a Janela de
Comandos, e o utilizador especifica a posição da caixa de texto com o rato.
A sintaxe deste comando é:
gtext (‘texto’)
 Comando text
Serve para inserir uma caixa de texto, de tal forma que o primeiro
caractere é inserido na posição indicada pelas coordenadas x e y (de acordo
com os eixos da figura).
A sintaxe deste comando é:
text (x,y,‘texto’)
 Comando gtext
Serve para adicionar um título a um gráfico no topo da figura.
A sintaxe deste comando é:
Introdução à Programação 86

title (‘texto’)
 Comando xlabel
Serve para rotular (atribuir um nome) o eixo dos XX.
A sintaxe deste comando é:
xlabel (‘texto’)
 Comando legend
Serve para criar uma legenda para o(s) gráfico(s). No caso de vários
gráficos, os textos a serem colocados na legenda, devem entrar na ordem em
que os gráficos são criados, por forma a legendá-los correctamente.
A sintaxe deste comando é:
legend (’texto (1)’, ’texto (2)’,’…’ ,’texto (n)’)
Por defeito coloca-a no canto superior direito.

De seguida, vamos aplicar as funções de texto referidas atrás, no exemplo seguinte


de execução do gráfico da função y=x2+6.

>> fplot('x^2+6',[0,6])
>> grid on
>> gtext('Localização à escolha')
>> text(4,15,'Texto no ponto 4,15')
>> xlabel('Eixo dos XX')
>> ylabel('Eixo dos YY')
>> title('Gráfico de x^2+6')
>> legend('x^2+6')
Introdução à Programação 87

Gráfico de x 2+6
45
x 2+6

40
Localização à escolha

35

30
Eixo dos YY

25

20

15 Texto no ponto 4,15

10

5
0 1 2 3 4 5 6
Eixo dos XX

FIGURA 7.5 – Gráfico da função y = x2+6

7.4 MÚLTIPLOS GRÁFICOS

Muitas vezes é necessário juntar vários gráficos numa mesma figura.


120

100

80

60

40

20

-20

-40
-2 -1 0 1 2 3 4

FIGURA 7.6 – Múltiplos Gráficos


Introdução à Programação 88

A Figura 7.6 ilustra um desses exemplos.


Existem 3 maneiras de imprimir vários gráficos juntos. A mais simples – e a que
vamos estudar - é com o comando plot; as outras duas é com o comando hold on e o
comando line.
Dois ou mais gráficos podem ser colocados numa mesma saída digitalizando-se
pares de vectores nos argumentos do comando plot. Por exemplo,
plot (x,y,u,v,t,h)
cria 3 gráficos y versus x, v versus u e h versus t, todos na mesma figura. Os
vectores em cada par devem ter o mesmo tamanho.
O Matlab gera gráficos automaticamente em 3 cores diferentes, para que se
possam distinguir.
Também é possível adicionar especificadores de linha após cada par de variáveis.
Por exemplo,
plot (x,y,’-b’,u,v,’--r’,t,h,’:g’)
traça na mesma figura:
• o gráfico y versus x com uma linha contínua azul
• o gráfico v versus u com uma linha a tracejado vermelha
• o gráfico t versus h com uma linha pontilhada verde

De seguida apresenta-se um exemplo de aplicação com um programa que utiliza


o comando plot para gerar múltiplos gráficos numa mesma saída.

>> x=[-3:0.01:5];
>> y=2*x.^3+2*x.^2-6*x+3;
>> prim_deriv=6*x.^2+4*x-6;
>> seg_deriv=12*x;
>> plot(x,y,'-b',x,prim_deriv,'--r',x,seg_deriv,':k')

Este conjunto de comandos traça numa mesma figura três gráficos da seguinte
forma:
• Começa por declarar o vector x que contém o domínio da função (define
pontos entre -3 e 5 espaçados por 0,01;
• Declara o vector y que contém os valores da função 2x3+2x2-6x+3 (contra-
domínio);
• Declara o vector prim_deriv que contém os valores da 1ª derivada;
• Declara o vector seg_deriv que contém os valores da 2ª derivada;
• Cria 3 gráficos na mesma figura: y versus x em linha contínua azul,
prim_deriv versus x em linha a tracejado vermelho e seg_deriv versus x a
traço pontilhado preto.
De seguida mostra-se a figura gerada por este conjunto de comandos.
Introdução à Programação 89

300

250

200

150

100

50

-50
-3 -2 -1 0 1 2 3 4 5

FIGURA 7.7 – Múltiplos Gráficos – y = 2x3+2x2-6x+3, y’ e y’’

Você também pode gostar