Seb Matlab

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 Matla b pode apresentar os s eguintes 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;

Transcript of Seb Matlab

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 1/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 daspalavras MATrix e LABoratory e deve-se ao facto do seu elemento básico deinformação ser a matriz, e em que qualquer variável que se defina é uma matriz. Ofacto das matrizes poderem ser criadas sem dimensionamento prévio, aliado ao grandeconjunto 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 erápida do que se gastaria para desenvolver programas semelhantes em Fortran, C ouPascal. Ao contrário destas linguagens de programação mais tradicionais, o Matlabpermite que nos preocupemos exclusivamente com os conceitos técnicos, semnecessidade de preocupação com a gestão de memória ou com a declaração do tipo devariá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 capacidadesgráficas e com uma grande série de ferramentas (funções) comuns a diversas áreas deconhecimento. Além disso, o Matlab disponibiliza uma série de ferramentasadicionais (as toolboxes), organizadas segundo diversas áreas científicas, que formamuma colecção de programas especiais projectados para resolver problemasespecíficos. Como exemplos de toolboxes que integram o Matlab temos: MatemáticaSimbólica – Manipulação simbólica de funções, Processamento de Sinal – Projecto eanálise de filtros (analógicos e digitais), Sistemas de Controlo – Projecto e análise desistemas de controlo, Processamento de Imagem – Manipulação de imagem, eEstatística – Análise de dados estatísticos.

Outro aspecto muito importante do Matlab é o facto de permitir criar facilmentegrá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 comas 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 naFigura 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, inicializavariáveis, e permite executar comandos e funções Matlab;

•  Historial de Comandos (Command History) – Janela que apresenta ohistórico dos comandos mais recentes digitados na Janela de Comandos;

•  Navegador de Directorias (Current Directory) – Permite alterar a directoriade trabalho (corrente), bem como visualizar os respectivos ficheiros;

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 2/86

 

Introdução à Programação  5 

•  Espaço de dados (Workspace) – Permite visualizar e manipular o conteúdodo 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 aJanela de Comandos e com o Editor.

1.1.1  JANELA DE COMANDOS 

É a janela principal do Matlab. Pode ser utilizada para inicializarvariáveis, executar comandos, abrir outras janelas, bem como executar programasMatlab que são gravados como ficheiros-M (assim designados, porque lhes sãoatribuídas extensões .m ao serem salvos).

Um exemplo simples de utilização da Janela de Comandos é mostrado na Figura1.2.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 3/86

 

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 pretendermosque vários comandos sejam digitados na mesma linha, eles devem ser separados porvírgulas. Quando a tecla ENTER é pressionada, os comandos são executados pelaordem com que foram digitados, da esquerda para a direita.

Um comando anteriormente digitado pode ser chamado outra vez através dasteclas 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 linhainicial.

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 deuma linha de comando, o programa considera a linha como um comentário. Significaque, 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ãoproduzirá qualquer efeito na execução desse comando.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 4/86

 

Introdução à Programação  7 

A Janela de Comandos pode ser limpa através do comando clc, ou através daopção Clear Command Window no menu Edit , tendo-se assim acesso a uma janela decomandos com apenas um  prompt  no início da janela. De notar que no entanto, ocomando não altera o que foi executado anteriormente. Por exemplo, se foramdeclaradas variáveis antes do comando clc, elas continuam existindo após essecomando e podem ser utilizadas.

1.1.2  EDITOR DE CÓDIGO – FICHEIROS M

Embora todos os comandos do Matlab possam ser executados naJanela de Comandos, não é conveniente utilizá-la quando, pretendemos executarcomandos em série, e fundamentalmente, quando esses comandos estiveremencadeados logicamente entre si, ou seja, quando constituírem um programa. Comovimos no ponto anterior os programas Matlab são gravados como ficheiros-M. Estesficheiros de comandos – designados por ficheiros-M – são criados num editor decódigo incorporado no Matlab. Quando o ficheiro é chamado, os comandos vão sendoexecutados pela ordem em que estão listados no ficheiro.

Existem dois tipos de ficheiros-M: scripts e funções. Os scripts são simplesmenteuma colecção de comandos Matlab, sendo as variáveis utilizadas globais, o quesignifica que são acessíveis no ambiente de trabalho Matlab mesmo após a suaexecução, ou seja, podem ser utilizadas ou ter o seu valor modificado a qualquermomento por uma aplicação que faça uso delas. As funções aceitam argumentos deentrada e retornam valores de saída depois da sua execução. As variáveis utilizadassão internas à própria função, o que significa que não são reconhecidas no ambientede trabalho Matlab.

Para executar um programa basta digitar o respectivo nome na Janela deComandos, ou, então clicando no ícone Run. Mas antes disso, o utilizador deve-secertificar que o Matlab consegue encontrar o caminho onde está o ficheiro; para tal, outilizador deve seleccionar a directoria na janela Current Directory, ou digitando ocomando cd seguido do caminho onde se encontra a directoria. A qualquer momentopode-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. Odebugger 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 natabela seguinte:

Operação Símbolo Exemplo PrecedênciaExponenciação ^ 6^5 1

(Mais alta)Multiplicação * 6*5 2Divisão à direita / 6/5 2

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 5/86

 

Introdução à Programação  8 

Divisão àesquerda

  \ 6\5 = 5/6 2

Adição + 6+5 3Subtracçã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, asprecedê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ênciaseguindo-se as operações de multiplicação e divisão e, por último, as operações deadição e subtracção. Se duas ou mais operações tiverem a mesma precedência, aoperação mais à esquerda será executada primeiro. Tal como nas calculadoras, estasprecedências podem ser alteradas recorrendo a parêntesis, já que, as expressões dentrodos 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ésdo comando format, que afecta somente o modo como os dados são mostrados, e nãocomo o Matlab calcula e salva os números (o Matlab efectua todas as operações emdupla precisão). O formato padrão de saída para os valores numéricos é o ponto fixocom quatro dígitos decimais (denominado short). Porém, se todos os elementos damatriz são inteiros exactos, a matriz é mostrada num formato sem qualquer pontodecimal.

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 Exemploformat short Notação em ponto fixo com 4

dígitos decimais para:0.001≤número≤1000. Casocontrário, o formato é short e.

>> 826/9ans =

91.7778

format long Notação em ponto fixo com 14dígitos decimais para:0.001≤número≤100. Caso contrário,o formato é long e.

>> 826/9ans =91.77777777777777

format short e Notação científica com 4 dígitosdecimais.

>> 826/9ans =

9.1778e+001format long e Notação científica com 15

dígitos decimais.>> 826/9ans =

9.177777777777777e+001format short g  É escolhido o melhor formato

em 5 dígitos, entre a notação deponto fixo ou ponto flutuante(científica).

>> 826/9ans =

91.778

format long g  É escolhido o melhor formato >> 826/9

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 6/86

 

Introdução à Programação  9 

em 15 dígitos, entre a notação deponto fixo ou ponto flutuante(científica).

ans =

91.7777777777778format bank  Dois dígitos decimais. >> 826/9

ans =91.78

formatcompact 

Elimina espaços para permitirque mais linhas de informação sejammostradas no ecrã.

format loose  Adiciona espaços entre linhas(oposto ao format compact )

Format rat  Fracção >> 0.3ans =

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, defunções e dos nomes das variáveis. A avaliação das expressões produz matrizes, quesã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 (dapalavra 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 doMatlab. Quando uma variável é declarada, o Matlab reserva um espaço de memóriaonde 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 novovalor à 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çarpor uma letra.

O Matlab é uma linguagem case sensitive, ou seja, faz distinção entre letrasmaiúsculas e minúsculas; assim a e A são variáveis diferentes. De notar, que noMatlab todas as funções devem ser escritas em minúsculas; inv(A) calcula a inversada 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 ;

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 7/86

 

Introdução à Programação  10 

•  nargin e nargout – Designam o número de argumentos de entrada e desaí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 umaexpressão a uma variável, o Matlab armazena, automaticamente, oresultado 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 muitasaplicações fazem uso delas. Outras variáveis, como i e j, são às vezes redefinidasquando os números complexos não estão envolvidos.

Deve-se também evitar utilizar nomes de funções predefinidas do Matlab paradenominar variáveis (por exemplo: sin, cos, sqrt, exp, etc…), já que uma vez que onome de uma função é utilizada para definir uma variável, então essa função não podemais 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áveisdeclaradas 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 comandosave nome_de_ficheiro armazena todas as variáveis declaradas nadirectoria corrente de trabalho no ficheiro nome_de_ficheiro .mat . Parasalvar 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áveisguardadas no ficheiro matlab.mat  com o comando save; o comandoload  nome_de_ficheiro carrega no espaço de trabalho todas asvariáveis guardadas no ficheiro nome_de_ficheiro .mat , com o comandosave 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 serfeita com a função disp. Quando usada na forma disp(x), o Matlab escreve o valor davariável sem mostrar o seu nome. De seguida mostra-se um exemplo em que são

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 8/86

 

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çãodisp.

>> x=6x =

6>> disp(x)

6>>

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

>> disp('O valor da variável x é '),xO 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õespodem incluir funções. O Matlab possui um grande número de funções originais quenão podem ser alteradas pelo utilizador. Outras funções estão disponíveis embibliotecas externas, que são ficheiros com extensão .m criados a partir das funçõesoriginais. 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ãocomposta de números e/ou variáveis. Funções também podem ser incluídas noargumento 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 Exemplosqrt (x) Raíz quadrada >> sqrt (24)

ans =4.8990

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 9/86

 

Introdução à Programação  12 

realsqrt (x) Raíz quadrada, mas produz errose o argumento é negativo.

>> realsqrt(-4)??? Error using ==>

realsqrtRealsqrt produces

complex result.exp (x) Exponencial >> exp(3)

ans =20.0855

log (x) Logaritmo natural (neperiano) >> log(100)ans =

4.6052log10 (x) Logaritmo na base 10 >> log10(100)

ans =2

log 2 (x) Logaritmo na base 2 >> log2 (100)ans =

6.6439factorial

(x)Factorial >> factorial(6)

ans =720

nthroot(x,n)

N-ésima raíz de x, ou seja, √x; xe n são reais, mas se x<0 então n teráque ser inteiro e ímpar.

>> nthroot(1000,3)ans =

10abs (x) Valor absoluto (módulo) >> abs (-150)

ans =150

complex(x,y)

Define número complexo. >> x=3 ; y=2 ;>> z=complex(x,y)z =

3.0000 + 2.0000ireal (x) Parte real de um númerocomplexo.

>> x = 5+2i ;>> real (x)ans =

5imag (x) Parte imaginária de um número

complexo.>> x = 5+2i ;>> imag (x)ans =

2conj (x) Conjugado de um número

complexo.>> x = 5+2i ;>> conj (x)ans =

5.0000 - 2.0000i

Funções trigonométricas elementares

Função Descrição Exemplosin (x) Seno de x (x em radianos); se

fizer sind (x) então x é em graus.>> sind (90)ans =

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 10/86

 

Introdução à Programação  13 

1cos (x) Co-seno de x (x em radianos); se

fizer cosd (x) então x é em graus.>> cosd (90)ans =

0tan (x) Tangente de x (x em radianos); se

fizer tand (x) então x é em graus.>> tand (180)ans =

0sec (x), csc

(x), cot (x)Secante, Co-secante e Co-

tangente de x (x em radianos); sefizer secd (x), cscd (x) ou cotd (x)então x é em graus.

>> secd (180)ans =

-1

asin (x),acos (x), atan(x)

Arco seno, Arco co-seno e Arcotangente; se fizer asind (x), acosd(x), atand (x) então o ângulorespectivo é em graus.

>> asind (1)ans =

90

Funções de arredondamento elementares

Função Descrição Exemploround (x) Arredonda para o número inteiro

mais próximo.>> round (53.5)ans =

54fix (x) Truncatura de x >> fix (53.5)

ans =53

ceil (x) Arredonda para o menor inteiro>= x.

> ceil (53.5)ans =

54

>> ceil (-53.5)ans =-53

floor (x) Arredonda para o maior inteiro<=x.

>> floor (53.5)ans =

53>> floor (-53.5)ans =

-54rem (x,y) Retorna o resto da divisão de x

por y.>> rem (10,3)ans =

1

mod (x,y) Módulo da divisão inteira. Éigual a x – n*y com n = floor (x/y).Quando x e y têm o mesmo sinal éigual a rem (x,y)

>> mod(10,-3)ans =

-2>> mod(-10,3)ans =

2sign (x) Sinal de x. Se x>0 toma o valor

1; se x=0 toma o valor 0, e se x<1toma o valor -1.

>> y=-50;>> sign(y)ans =

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 11/86

 

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 demuitos outros recursos que a Mathworks ( Matlab helpdesk ) apresenta.

A janela de ajuda apresentada na figura Figura 1.3, pode ser acedida através docomando helpdesk ou através do menu Start -> Help. Nesta janela encontra-seinformação detalhada diversa, nomeadamente sobre a instalação do Matlab, e sobre asvá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 exemploapresentado a seguir apresenta a informação apresentada para a função line.

>> help lineLINE Create line.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 12/86

 

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 byparameter/value pairs to specify additional properties of the lines.The X,Y pair (X,Y,Z triple for 3-D) can be omitted entirely, andall properties specified using parameter/value pairs.

Execute GET(H), where H is a line handle, to see a list of lineobject properties and their current values. Execute SET(H) to see alist of line object properties and legal property values.

See also <a href="matlab:help patch">patch</a>, <a href="matlab:helptext">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çãona Janela de Ajuda.

O comando helpwin abre uma nova janela própria de ajuda para navegação, ondese 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áriosde uma determinada função.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 13/86

 

Introdução à Programação  16 

2.  MATRIZES (“ARRAYS”)

Todas as variáveis em Matlab são matrizes. Uma matriz é uma lista de valoresorganizados em linhas e/ou colunas; a matriz mais simples (unidimensional) é

formada por uma linha ou por uma coluna, também denominadas vectores. Asoperações estudadas no ponto anterior envolveram variáveis escalares, que sãotratadas em Matlab como matrizes especiais de dimensão 1 x 1, ou seja matrizes deuma linha por uma coluna.

Consoante o número de linhas e colunas pode-se falar em diversos tipos dematrizes. 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-sevector 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 únicalinha (vector linha) ou com uma única coluna (vector coluna).

Em Matlab a forma mais simples de criar um vector, é utilizar o operador deconcatenação ( [ ] ) digitando os seus elementos entre parêntesis rectos. No caso deum vector linha, os seus elementos estão separados por um espaço ou por umaví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 duasprimeiras 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 =13579

>> x = [135

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 14/86

 

Introdução à Programação  17 

79]x =

135

79>>

Um elemento de um vector é identificado pelo seu índice colocado entreparêntesis curvos ( ) . No exemplo anterior x(3) = 5.

A instrução end referencia o último índice de um vector. No exemplo seguinteexemplifica-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 constantepode-se utilizar a notação [m:n:p], em que m é o primeiro elemento, p é o últimoelemento e n o incremento constante. Neste caso os parêntesis são opcionais. Quandose omite o valor de n o sistema assume que o incremento é 1. Se os valores de m, n ep são tais que o valor de p não pode ser obtido, então (sendo p positivo) o últimoelemento 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>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 15/86

 

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. Anotaçã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 muitasvezes utilizadas para armazenar informação na forma de uma tabela de números oustrings. Além disso, exercem um papel importante na álgebra linear e são usadas emengenharia 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 é otamanho (ou dimensão) da matriz. Uma matriz com m igual a n designa-se pormatriz quadrada.

A forma mais simples de definir uma matriz é escrever as diferentes linhas damatriz separadas por ponto e vírgula. Por sua vez, as linhas devem obedecer às regrasdefinidas no ponto anterior para os vectores linha, ou seja, separando os diferenteselementos por espaços ou vírgulas. O seguinte exemplo mostra a definição daseguinte matriz 4 x 3.

1 2 34 5 6 ( matriz 4 x 3 )

7 8 910 11 12

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

1 2 34 5 67 8 9

10 11 12>>

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

>> x = [1 2 34 5 67 8 910 11 12]

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 16/86

 

Introdução à Programação  19 

x =1 2 34 5 67 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 amesma 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 umexemplo 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 0125.0000 5.4772 28.0000

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

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

5 15 25 351 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 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0

>> y = ones(5,6)

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 17/86

 

Introdução à Programação  20 

y =1 1 1 1 1 11 1 1 1 1 11 1 1 1 1 11 1 1 1 1 11 1 1 1 1 1

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

>>

As funções zeros e ones apresentam também a hipótese de utilizar apenas umargumento: 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. Porexemplo, 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 comovariá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 34 5 67 8 9

>> A (2,3)ans =

6>> A (3,1) = 20

A =1 2 34 5 6

20 8 9>> A (2,2) - A (3,2)ans =

-3>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 18/86

 

Introdução à Programação  21 

Podemos usar dois pontos ( : ) para referenciar uma gama de elementos dentro deum vector ou matriz.

No caso de um vector, por exemplo x (m:n) referencia todos os elementos entre asposiçõ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 931 6 7 98 1 764 87 21 8 6 11

34 9 3 45 89 -536 33 7 -54 12 2

>> B = A (:,4)B =

32988

45-54

>> C = A (1,:)C =

25 46 5 32 2 9>> D = A (:,3:5)D =

5 32 27 98 1

21 8 6

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 19/86

 

Introdução à Programação  22 

3 45 897 -54 12

>> E = A(2:4,3:6)E =

7 98 1 7621 8 6 11

3 45 89 -53>>

No exemplo anterior foram criados novos vectores e matrizes a partir de umamatriz previamente declarada, usando-se um conjunto de elementos ou um grupo deelementos 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êntesisrectos ( [ ] ), como se mostra nos exemplos seguintes:

> x = 5:4:41x =

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 201 1 1 1 1 1 11 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 201 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 sermodificado acrescentando novos elementos ou, então, pode ter a sua dimensãoacrescida, ou seja, transformando-se numa matriz bidimensional.

Além disso, linhas e/ou colunas podem ser adicionadas a uma matriz para obteruma matriz de tamanho diferente. O acréscimo de elementos pode ser realizadosimplesmente 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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 20/86

 

Introdução à Programação  23 

possui n elementos e um novo valor é atribuído ao elemento cuja referência é n+2, oMatlab atribui o valor zero ao elemento n+1, ou seja, de um modo geral o Matlabatribui zeros aos elementos posicionados entre o último elemento original e o novoelemento terminal do vector. Alguns exemplos são mostrados a seguir.

>> x = 1:5x =

1 2 3 4 5>> x(6:10) = 10:8:42x =

1 2 3 4 5 10 18 26 34 42>> y = [1 2 3]y =

1 2 3>> y(7) = 4y =

1 2 3 0 0 0 4>> w (4) = 10w =

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:10y =

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 56 7 8 9 10

>>

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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 21/86

 

Introdução à Programação  24 

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

1 2 3 4 56 7 8 9 10

>> A(3,:) = [11 12 13 14 15]

A =1 2 3 4 56 7 8 9 10

11 12 13 14 15>> B = eye(3)B =

1 0 00 1 00 0 1

>> C = [A B]C =

1 2 3 4 5 1 0 0

6 7 8 9 10 0 1 011 12 13 14 15 0 0 1

>>

Se uma matriz possui a dimensão m x n, e um novo elemento é inserido numaposição de referência superior ao seu tamanho, o Matlab aumenta o tamanho dareferida matriz de modo a incluir esse novo elemento. Neste caso, tal como nosvectores, aos elementos que foram automaticamente adicionados é-lhes atribuído ovalor zero.

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

1 2 34 5 67 8 9

>> A(6,5) = 34A =

1 2 3 0 04 5 6 0 07 8 9 0 00 0 0 0 0

0 0 0 0 00 0 0 0 34>> B(3,5) = -56B =

0 0 0 0 00 0 0 0 00 0 0 0 -56

>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 22/86

 

Introdução à Programação  25 

2.3.2  ELIMINAÇÃO DE ELEMENTOS 

Pode-se apagar um elemento ou um conjunto de elementos numvector 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:28x =

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 56 7 8 9 10

11 12 13 14 1516 17 18 19 20

>> A(:,2:4) = []A =

1 5

6 1011 1516 20

>>

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

O Matlab possui muitas funções pré-definidas para gestão emanipulação de matrizes. Algumas das mais importantes são listadas a seguir:

Função Descrição Exemplosize (A) Devolve o tamanho da matriz >> A=[1 2 3 4 5 6; 7 8 9

10 11 12]A =

1 2 3 4 56

7 8 9 10 1112

>> size (A)ans =

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 23/86

 

Introdução à Programação  26 

2 6length (A) Devolve o comprimento de um

vector.>> A=[1 3 5 7 9]A =

1 3 5 7 9>> length (A)ans =

5numel (A) Devolve o número de elementos

da matriz.>> A=[1 2 3 4 5 6; 7 8 9

10 11 12]A =

1 2 3 4 56

7 8 9 10 1112

>> numel (A)ans =

12reshape(A,m,

n)Rearranja uma matriz com r

linhas e s colunas para m linhas e n

colunas. De notar que o produto r x s deve ser igual ao produto m x n 

>> AA =

1 2 3 4 567 8 9 10 11

12>> reshape (A,3,4)ans =

1 8 4 117 3 10 62 9 5 12

diag (x) Quando x é um vector, cria umamatriz quadrada contendo oselementos de x na diagonal principal

>> x=[1 2 3 4]x =

1 2 3 4>> diag(x)ans =

1 0 0 00 2 0 00 0 3 00 0 0 4

diag (A) Quando A é uma matriz, cria umvector coluna a partir dos elementosna diagonal principal

>> A=[1 2 3 4;5 6 7 8;910 11 12]

A =1 2 3 45 6 7 89 10 11 12

>> diag(A)

ans =16

11 

2.3.4  MATRIZ TRANSPOSTA 

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 24/86

 

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 =

123

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

1 2 34 5 67 8 9

>> B = A'B =

1 4 72 5 83 6 9

>>

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

Uma string é uma sequência ordenada de caracteres, e é representada noMatlab 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 (‘ ’). Noexemplo 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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 25/86

 

Introdução à Programação  28 

Uma string pode conter letras, números, espaços e outros símbolos. As aspassimples ( ‘ ) também podem ser usadas dentro de strings; para isso, são necessáriasduas 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 aaspa de abertura da string. Após fechar a segunda aspa, os caracteres mudam para acor normal.

Quando uma variável é declarada como string, os caracteres que a formam sãoarmazenados na forma de um vector de linhas semelhante ao que foi descrito atrás noponto 2.1. Cada carácter, incluindo os espaços, é um elemento do vector. Significaisto que, uma string de uma linha é um vector linha com um número de elementosigual à quantidade de caracteres contidas na string.

Os elementos da string são referenciados pela posição que ocupam no vector. Noexemplo seguinte, no vector cadeira o primeiro elemento é um espaço, e o quintoelemento é 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úmerosdescrito no ponto 2.2, deve-se digitar ponto e vírgula ou pressionar a tecla ENTER nofim de cada linha. Cada linha deve ser tratada como uma string, ou seja, é necessáriocolocar aspas no início e no fim de cada uma delas.

Neste caso, cada string é armazenada numa linha da matriz e os seus caracteressã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 criaum vector de strings por atribuição utilizando o operador de concatenação ( [ ] ), é

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 26/86

 

Introdução à Programação  29 

necessário aumentar cada string com espaços até atingir o comprimento da maiorstring. No exemplo seguinte é necessário introduzir 3 espaços na primeira linha demodo 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 criaum vector de linhas com o mesmo número de linhas, a partir de caracteres de entradacom tamanhos diferentes. O Matlab adiciona automaticamente espaços de modo aigualar as linhas menores àquela que possuir mais elementos (ou seja, a maior linhada matriz). Na função char, as linhas devem ser separadas por vírgulas, tal como sedemonstra no exemplo seguinte:

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

2.5  OPERAÇÕES MATEMÁTICAS COM MATRIZES 

No ponto 1.2 foram estudadas as operações aritméticas elementares comescalares (números), ou seja, com matrizes 1x1. No entanto as matrizes podem ser dotipo vector (uma linha ou uma coluna), ou ainda mais complexas, do tipobidimensional (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, oMatlab dispõe de um grande conjunto de funcionalidades concebido para executaroperações muito avançadas com matrizes. Neste ponto, estudam-se as operaçõesmatemá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éricox de n elementos

e a matriz A genérica de ordem mxn.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 27/86

 

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ãoefectuadas apenas se as matrizes têm o mesmo tamanho. A adição e subtracção entreduas matrizes realiza-se elemento a elemento, ou seja, é obtida adicionando-se ousubtraindo-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 + yans =

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 152 -2 8

>> A + Bans =

11 8 1150 13 14

>> A - Bans =

-3 -20 9-54 17 -2

>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 28/86

 

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 oselementos do outro operador. Por exemplo,

>> x = [5 8 -4]x =

5 8 -4>> x - 3ans =

2 5 -7

2.5.2  MULTIPLICAÇÃO 

A operação de multiplicação ( * ) de matrizes é executada peloMatlab de acordo com as regras da Álgebra Linear, pelo que, o número de colunas damatriz à 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 omesmo número de linhas da matriz A e o mesmo número de colunas da matriz B. Noexemplo seguinte, ilustra-se o produto de 2 matrizes e o produto de um vector poruma 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 23 -8 -1 47 6 -2 9

>> A * Bans =

72 112 26 7477 -86 -47 110

>> x = [3 7]

x =3 7

>> x * Aans =

-2 87 72>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 29/86

 

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çãode potenciação só pode ser realizada com matrizes quadradas, já que o produto A*Asó pode ser realizado se o número de colunas da primeira matriz for igual ao númerode 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 umvector 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 doisvectores. O Matlab possui uma função interna, dot (x,y), que calcula o produtoescalar de dois vectores, e em que, os vectores x e y tanto podem ser vectores linhacomo 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 31 -6

>> B = [6 2;7 9]B =

6 27 9

>> A*Bans =

51 37-36 -52

>> B*Aans =32 644 -33

>> x = [4 8]x =

4 8>> y = [5;9]y =

59

>> x*y

ans =92>> y*xans =

20 4036 72

>> z = [8 9]z =

8 9

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 30/86

 

Introdução à Programação  33 

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

104

>>

Quando uma matriz é multiplicada por um escalar (número) cada elemento damatriz é multiplicado por esse escalar (número).

>> x =[ 1 2 3]x =

1 2 3>> 5*xans =

5 10 15>> x*5ans =

5 10 15

2.5.3  DIVISÃO 

O Matlab define dois tipos de operadores de divisão: o operador dedivisão à esquerda ( \ ) e o operador de divisão à direita ( / ).

O operador de divisão à esquerda (\) é usado, entre outras coisas, para resolver aequaçã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 últimasequaçõ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 porB. De seguida obtém-se pelos dois métodos referidos acima a solução do seguintesistema de equações:

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 31/86

 

Introdução à Programação  34 

2x + 3y + 2z = 13x + 4y + z = 35x + 4y + z = 2

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

A =2 3 23 4 15 4 1

>> B = [1;3;2]B =

132

>> x = inv(A)*Bx =

-0.50001.4000

-1.1000>> x = A\Bx =

-0.50001.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 daequaçã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 meiodo operador de divisão à direita.

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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 32/86

 

Introdução à Programação  35 

2 3 53 4 42 1 1

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

2 3 5

3 4 42 1 1>> D =[1 3 2]D =

1 3 2>> x = D*inv(C)x =

-0.5000 1.4000 -1.1000>> x=D/Cx =

-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 53 4 -42 1 1

>> A^2ans =

23 23 310 21 -59 11 7

>> A*Aans =

23 23 310 21 -5

9 11 7>> A^3ans =

121 164 2673 109 -3965 78 8

>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 33/86

 

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 quesã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ãoefectuadas com os elementos que ocupam a mesma posição nas matrizes. Sãoexecutadas no Matlab, digitando um ponto antes do operador aritmético, tal como éapresentado na tabela seguinte:

Operação Símbolo

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 53 4 -42 1 1

>> B = [4 -3 1;8 6 -2;1 4 9]

B =4 -3 18 6 -21 4 9

>> A./Bans =

0.5000 -1.0000 5.00000.3750 0.6667 2.00002.0000 0.2500 0.1111

>> A.\Bans =

2.0000 -1.0000 0.2000

2.6667 1.5000 0.50000.5000 4.0000 9.0000

>> A.^2ans =

4 9 259 16 164 1 1

>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 34/86

 

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 Matlabmais utilizadas no cálculo de matrizes.

Função Descrição Exemploinv (A) Calcula a matriz inversa da

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

2 3 53 4 -42 1 1

>> inv(A)ans =

-0.1905 -0.0476 0.76190.2619 0.1905 -0.54760.1190 -0.0952 0.0238

det (A) Calcula o determinante damatriz quadrada A.

>> det(A)ans =

-42max (A) Se A é um vector calcula o

maior elemento de A. Se A éuma matriz, calcula um vectorlinha com o maior elemento decada coluna.

>> x=[5 -7 8]x =

5 -7 8>> max(x)ans =

8>> max(A)ans =

3 4 5[d,n] = max

(A)

Se A é um vector, d recebe

o maior elemento de A e nindica a posição de d no vectorA.

Se A é uma matriz d é umvector linha com o maiorelemento de cada coluna, e n éum vector linha com a posiçãodestes elementos em cadacoluna.

>> [d,n]=max(x)

d =8n =

3>> [d,n]=max(A)d =

3 4 5n =

2 2 1

min (A) Se A é um vector calcula omenor elemento de A. Se A éuma matriz, calcula um vector

linha com o menor elemento decada coluna.

>> min(x)ans =

-7

>> min(A)ans =2 1 -4

[d,n] = min(A)

Se A é um vector, d recebeo menor elemento de A e nindica a posição de d no vectorA.

Se A é uma matriz d é umvector linha com o menor

>> [d,n]=min(x)d =

-7n =

2>> [d,n]=min(A)d =

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 35/86

 

Introdução à Programação  38 

elemento de cada coluna, e n éum vector linha com a posiçãodestes elementos em cadacoluna.

2 1 -4n =

1 3 2

dot (x,y) Calcula o produto escalar(interno) dos dois vectores x e

y. Os vectores tanto podem servector linha como vectorcoluna, mas têm que ter omesmo número de elementos.

>> x=[5 -7 8]x =

5 -7 8>> y=[4;6;2]y =

462

>> dot(x,y)ans =

-6sum (x) Se x é um vector, calcula a

soma dos elementos do vector.>> sum(x)ans =

6mean (x) Se x é um vector calcula a

média aritmética dos elementosde A.

>> mean(x)

ans =2

sort (x) Se x é um vector, ordena oselementos de x por ordemcrescente.

>> sort(x)ans =

-7 5 8

median (x) Se x é um vector calcula ovalor mediano dos elementosde x.

>> median(x)ans =

5

std (x) Se x é um vector calcula odesvio padrão dos elementos dex.

>> std(x)ans =

7.9373

cross (x,y) Determina o produtovectorial (externo) dos 2vectores, x x y.

>> xx =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 quandoo argumento de entrada é uma matriz, a operação é realizada em cada elemento dessamatriz. 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 dafunção sind sobre cada um dos 5 elementos da matriz inicial.

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

30 60 -120 45 90

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 36/86

 

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 matrizescomo argumentos de entrada:

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

4 1 5 96 4 1 8

>> factorial(A)ans =

24 1 120 362880720 24 1 40320

>> log10(A)ans =

0.6021 0 0.6990 0.95420.7782 0.6021 0 0.9031

>> sqrt(A)ans =

2.0000 1.0000 2.2361 3.00002.4495 2.0000 1.0000 2.8284

>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 37/86

 

Introdução à Programação  40 

3.  OPERADORES

Nos pontos anteriores apresentámos muitos exemplos de operações matemáticasque utilizavam operadores matemáticos, que forma estudados com algum detalhe noponto 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 oufalso. No caso da comparação entre matrizes, deve-se ter o cuidado de verificar se têmo 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õescondicionais, 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 decaracteres, 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 aelemento, e o resultado é uma matriz de retorno de uns e zeros, com o mesmotamanho das matrizes. Se a comparação é feita entre um escalar e uma matriz, oescalar é comparado com todos os elementos da matriz, tendo como resultado umamatriz de retorno de uns e zeros com o mesmo tamanho da matriz.

De seguida apresentam-se alguns exemplos:

>> 7>5ans =

1>> 7<=5

ans =0

>> a = 7>5a =

1>> xx =

4 1 5 9>> 4<=x

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 38/86

 

Introdução à Programação  41 

ans =1 0 1 1

>> AA =

3 5 -2 17 9 0 4

>> 4<=Aans =0 1 0 01 1 0 1

>> B = [2 5 6 1;7 -4 0 8]B =

2 5 6 17 -4 0 8

>> A~=Bans =

1 0 1 00 1 0 1

>> C=A-B>=1C =

1 0 0 00 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 matrizde 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 umamatriz lógica (ou vector lógico) é utilizado para tais finalidades, extrai da matrizendereçada os elementos nas posições onde a matriz lógica (ou vector lógico) temuns. De seguida apresentam-se alguns exemplos:

>> AA =

3 5 -2 17 9 0 4

>> C=A<=3C =

1 0 1 10 0 1 0>> D = A(C)D =

3-201

>> x

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 39/86

 

Introdução à Programação  42 

x =4 1 5 9

>> t=x>=4t =

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 emoperações aritméticas. Uma vez utilizada em operações aritméticas, a matriz lógicatransforma-se em matriz numérica.

>> AA =

3 5 -2 17 9 0 4

>> BB =

2 5 6 17 -4 0 8

>> (A~=B)/3+(A.*B)ans =

6.3333 25.0000 -11.6667 1.000049.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 doMatlab são:

Operador

Lógico

Descrição Exemplo

& AND – “E” lógico. Actua em doisoperandos, A e B. Se ambos foremverdadeiros, o resultado é verdadeiro (1),caso contrário o resultado é falso (0).

>> (8>7)&(0>-5)ans =

1>> (10>5)&(4>7)ans =

0| OR – “OU” lógico. Actua em dois

operandos, A e B. Se pelo menos um dosoperandos for verdadeiro, o resultado é

>> (10~=5)|(4>7)ans =

1

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 40/86

 

Introdução à Programação  43 

verdadeiro (1), caso contrário (ambosfalsos) o resultado é falso (0).

>> (8<7)|(0<=-5)ans =

0~ NOT – “NÃO” lógico. Actua num

operando A, tendo o valor verdadeiro (1)se o operando for falso, e o valor falso (0)

se o operando for verdadeiro.

>> ~ ((10~=5)|(4>7))ans =

0>> ~ ((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 valorverdadeiro (1) quando o número é diferente de zero e retornam o valor falso (0)quando o número é zero.

>> 5&0ans =

0>> 5|0ans =

1>> ~5ans =

0>> ~0ans =

1>>

Os operadores lógicos AND e OR tanto podem agir em escalares, como emmatrizes ou entre um escalar e uma matriz. Se os dois operandos são escalares, oresultado será um escalar 0 ou 1. Se os dois operandos são matrizes, têm que terobrigatoriamente 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 matrizde uns e zeros com o tamanho da matriz.

O operador lógico NOT tem apenas um operando, e quando o operando é umescalar o resultado é zero ou um; se o operando é uma matriz, o resultado é umamatriz de zeros e uns, resultante da negação de cada um dos elementos da matrizinicial. 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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 41/86

 

Introdução à Programação  44 

>> x&yans =

1 0 0 1>> ~xans =

0 0 1 0

>> 5&xans =1 1 0 1

>> ~yans =

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 aosoperadores lógicos AND, OR e NOT:

Função

Descrição Exemplo

and(A,B)

Equivalente a A&B >> A=[5 0 1 -4]A =

5 0 1 -4>> B=[-4 0 13 0]B =

-4 0 13 0>> and(A,B)ans =

1 0 1 0or

(A,B)Equivalente a A|B >> or(A,B)

ans =1 0 1 1

not(A)

Equivalente a ~A >> not(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 seguidalistam-se as mais importantes:

Função Descrição Exemploxor

(A,B)Ou exclusivo. Retorna o valor

verdadeiro (1) se os operandos foremdesiguais, ou seja, se um for verdadeiro e

>> xor(3,0)ans =

1

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 42/86

 

Introdução à Programação  45 

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

0all (A) Retorna o valor verdadeiro (1) se

todos os elementos de um vector A foremverdadeiros (diferentes de zero). Retorna

falso (0) se um ou mais elementos foremfalsos (0).Se A for uma matriz, trata as colunas

de A como vectores e retorna um vectorde uns e zeros.

>> x=[6 5 -8 1]x =

6 5 -8 1>> all(x)ans =

1>> y=[-4 0 5 8]y =

-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) sequalquer elemento de um vector A forverdadeiro (diferente de zero). Retornafalso (0) se todos os elementos foremfalsos (0).

Se A for uma matriz, trata as colunasde A como vectores e retorna um vectorde uns e zeros.

> x=[6 0 -8 1]x =

6 0 -8 1>> any(x)ans =

1>> y=[0 0 0 0]y =

0 0 0 0>> any(y)

ans =0find (A)

find(A>d)

Se A for um vector, retorna os índicesdos elementos diferentes de zero.

Neste formato retorna o índice doselementos maiores que d.

De notar que, à semelhança dooperador >, qualquer operador relacionalpode ser utilizado com a função find.

>> x=[6 0 -8 0 5 0 2]x =

6 0 -8 0 5 02

>> find(x)ans =

1 3 5 7>> find(x>1)ans =

1 5 7

A tabela seguinte, designada por “tabela de verdade”, mostra o resultado daaplicação dos operadores lógicos a duas variáveis ou expressões lógicas A e B:

ENTRADA SAÍDAA B AND

A&BORA|B

NOT~A

NOT~B

XORxor

(A,B)V V V V F F F

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 43/86

 

Introdução à Programação  46 

V F F V F V VF V F V V F VF F F F V V F

3.3  ORDEM DE PRECEDÊNCIA 

As expressões matemáticas podem conter simultaneamente operadoresaritméticos, lógicos e relacionais. A ordem de precedência dos operadores define aordem pela qual uma expressão é executada, quando diferentes operadores estãopresentes. A ordem de precedência seguida pelo Matlab é:

Precedência Operação1 (Mais alta) Parêntesis.2 Exponenciação.3 Operador lógico NOT.

4 Multiplicação e divisão.5 Adição e subtracção6 Operadores relacionais (>, >=, <, <=, = =, ~=)7 Operador lógico AND (&).8 (Mais

baixa)Operador lógico OR (|).

Se duas ou mais operações têm precedências diferentes é realizada primeiro aoperaçã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 umaaté 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 ooperador lógico OR. Em caso de dúvida, estes problemas podem ser resolvidosfacilmente com a utilização sistemática de parêntesis, mesmo quando eles não sejameventualmente necessários. De seguida apresentam-se alguns exemplos de expressõesmatemáticas, envolvendo parêntesis, e operadores aritméticos, lógicos e relacionais:

>> 5*4-6^2+8/4ans =

-14>> 5*(4-6)^2+8/4ans =

22>> 4+5^3*6&-2+3+6/~0ans =

1>> 5*4*6>=3-10|8~=-2*~7+6\18ans =

1>> 5*4*((6>=3)-10|8~=-2*~7+6\18)

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 44/86

 

Introdução à Programação  47 

ans =20

>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 45/86

 

Introdução à Programação  48 

4.  INSTRUÇÕES DE CONTROLO

As instruções são as acções algorítmicas elementares que constituem no seuconjunto o corpo principal do programa, e que normalmente, são executadas

sequencialmente. Mas por vezes, há a necessidade desta ordem (sequencial) não serseguida. O Matlab possui instruções que permitem controlar a ordem de execução dasinstruções constituintes de um programa:

•  As instruções de selecção if e switch possibilitam a escolha de uma ou váriasinstruções para execução, em função de uma dada condição se cumprir ounão.

•  As instruções de repetição for e while repetem a execução de um conjuntode instruções um número fixo e predeterminado de vezes, ou até que severifique 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 seleccionadasvá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 comandosentre 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 dautilização da instrução if mais simples, em que se a nota introduzida pelo utilizadorfor superior ou igual a 10 escreve ‘APROVADO’:

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

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

Introduza a sua classificação: 18APROVADO 

O Matlab permite a inclusão de uma instrução if dentro de outra instrução if , ouseja, permite que uma instrução seja inicializada e terminada dentro de outra instruçãoif .

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 46/86

 

Introdução à Programação  49 

nota = input('Introduza a suaclassificação:');

if nota>=9.5disp('APROVADO')

if nota>=16disp('COM DISTINÇÃO')end

end

Introduza a sua classificação:17APROVADOCOM DISTINÇÃO

Como se vê no exemplo anterior, as palavras if  e end  aparecem no editor doMatlab a azul, e os comandos entre if e end aparecem indentados (alinhados), o quefacilita a leitura e organização do programa.

No caso de se pretender executar instruções quando a expressão lógica tiver ovalor falso, a estrutura a utilizar é if-else-end, que tem a seguinte sintaxe:

if Expressão lógicaBloco de Instruções 1else 

Bloco de Instruções 2end

Se a expressão lógica de teste for verdadeira, o programa executará o bloco deinstruções 1 e depois saltará para o comando end ; se for falsa, o programa executará obloco de instruções 2. 

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

nota = input('Introduza a sua

classificação:');if nota>=9.5

disp('APROVADO')else

disp('REPROVADO')end

Introduza a sua classificação:17

APROVADO

Introduza a sua classificação:8REPROVADO

Finalmente a forma mais geral e completa da instrução if que permite seleccionarum de três ou mais blocos de instruções, é a seguinte:

if Expressão lógica 1

Bloco de Instruções 1elseif  Expressão lógica 2

Bloco de Instruções 2elseif  Expressão lógica 3

Bloco de Instruções 3

….

elseBloco de Instruções n

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 47/86

 

Introdução à Programação  50 

endSe 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ãoló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 casoseja 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 blocode 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, ocomando else é opcional. No caso de não existir, e se tivermos vários elseif  naestrutura if , o programa executará o 1º bloco de instruções cuja expressão lógica sejaverdadeira, e poderá mesmo não executar qualquer comando, se todas as expressõeslógicas tiverem o valor falso.

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

mbom = 0; bom = 0; suf = 0; rep = 0;nota=input('Introduza a sua

classificação:');if nota>=18

disp('MUITO BOM')mbom = mbom+1

elseif nota>=14disp('BOM')bom = bom+1

elseif nota>=10disp('SUFICIENTE')suf = suf+1

elsedisp('REPROVADO')rep = rep+1

end

Introduza a sua classificação:17BOMbom =

1

Neste exemplo, as variáveis mbom, bom, suf  e rep (que pretendem guardar osvalores correspondentes ao número de alunos com  Muito  Bom,  Bom, Suficiente e

 Reprovado) são inicializadas com o valor zero, depois é solicitado ao utilizador umanota 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 muitaspossibilidades (casos) a partir do valor de uma variável ou expressão. A sua sintaxe éa seguinte:

switch Expressãocase Valor 1

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 48/86

 

Introdução à Programação  51 

Bloco de Instruções 1case Valor 2

Bloco de Instruções 2

….

otherwiseBloco de Instruções n

end

Se o valor da expressão é igual ao valor 1, o programa executa o bloco deinstruções 1, e de seguida salta para o comando end . Do mesmo modo, se o valor daexpressão é diferente de valor 1 e igual a valor 2, executa o bloco de instruções 2 edepois salta para o comando end.

A expressão pode ser um escalar, um carácter, uma string, ou uma expressãológica.

A instrução otherwise (opcional), se existir é executada no caso do valor daexpressão for diferente das várias opções existentes valor 1, valor 2, …, valor n; se ainstruçã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');switch opcao

case 's'disp('O programa vai continuar')

case 'n'disp('O programa vai parar')

otherwisedisp('Digite ''s'' ou ''n''!!!')

end

Quer continuar (s/n)?: nO programa vai parar

Quer continuar (s/n)?: tDigite 's' ou 'n'!!!

A instrução switch pode eventualmente ter um ou vários case com múltiplosvalores. Neste caso, a lista de valores devem ser colocadas entre chavetas, tal como seilustra no exemplo seguinte:

mbom = 0; bom = 0; suf = 0; rep = 0;nota = input('Introduza a sua classificação: ');

switch notacase {18,19,20}

disp('MUITO BOM')mbom = mbom+1

case {14,15,16,17}disp('BOM')

Introduza a sua classificação : 18MUITO BOMmbom =

1

Introduza a sua classificação : 7REPROVADOrep =

1

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 49/86

 

Introdução à Programação  52 

bom = bom+1case {10,11,12,13}

disp('SUFICIENTE')suf = suf+1

otherwisedisp('REPROVADO')

rep = rep+1end

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

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

switch nota>=9.5case 1

disp('APROVADO')case 0

disp('REPROVADO')end

Introduza a sua classificação : 10APROVADO

Introduza a sua classificação : 9.4REPROVADO

De referir que se houver mais do que um case com um determinado valorrepetido, apenas o primeiro será executado, passando de seguida a execução doprograma 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çõessejam executadas repetidamente em ciclo, estando a respectiva paragem dependentede uma dada condição predeterminada.

O Matlab tem dois tipos de ciclo: ciclo for e ciclo while. No ciclo  for  onúmero de repetições é conhecido à partida; no ciclo while repete um conjunto deinstruções até que uma determinada condição seja satisfeita.

Ambos os ciclos podem ser terminados a qualquer momento por meio docomando break.

4.2.1  CICLO for

Neste tipo de ciclo uma ou um grupo de instruções é repetido umnúmero de vezes predeterminado á partida.

A sua sintaxe é:

for Variável = Valor_inicial:Incremento:Valor_finalBloco de Instruções

end

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 50/86

 

Introdução à Programação  53 

O nome da variável é arbitrário, no entanto devem ser evitadas as letras i e jse o programa lida com números complexos.

Inicialmente a variável toma o valor _inicial e o Matlab executa todas asinstruçõ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 sejamdiferentes, é 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: seincremento>0, até ao último valor da variável menor do que valor _ final; seincremento<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;for p=1:5

t = t+2endp

t =47

t =49

t =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 foidigitado um ponto e vírgula após a expressão na terceira linha, os valores de t  sãoexibidos 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 dasoma dos inteiros inferiores ao número introduzido pelo utilizador:

% Inicialização da variável soma %soma =0% 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)

Qual o valor a calcular ? 515

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 51/86

 

Introdução à Programação  54 

Mostra-se a seguir um exemplo envolvendo matrizes, e mostra os valores de  p eda 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]for p = 1:2:5

pb = a+p

end

a =1 3 5 8 9

7 -6 0 8 4p =1

b =2 4 6 9 108 -5 1 9 5

p =3

b =4 6 8 11 1210 -3 3 11 7

p =5

b =6 8 10 13 1412 -1 5 13 9

Para além da sintaxe habitual o ciclo for pode assumir a forma de um vector comelementos 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=1for p = [1 5 8 9]

p

produto = produto*pend

produto =1

p =

1produto =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 umadeterminada condição for verdadeira. É útil quando se pretende realizar um ciclo, mas

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 52/86

 

Introdução à Programação  55 

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

while ExpressãoBloco de Instruções

end

O bloco de instruções entre while e end é executado repetidamente, enquanto aexpressã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 ainstrução a seguir à instrução end . E assim sucessivamente.

De seguida mostra-se um exemplo de aplicação do ciclo while, em que sãopedidas 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 valorfora destes limites, o ciclo pára. Por fim, o programa mostra o número de alunos e amédia dos alunos com nota válida.

% Inicialização das variáveisnum_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 valoreswhile ((nota>=0)&(nota<=20))

num_alunos = num_alunos+1soma = soma+notamedia = 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 passepara a linha seguinte.

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

Qual a classificação ? 15nota =

15num_alunos =

1soma =

15

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 53/86

 

Introdução à Programação  56 

media =15

Qual a classificação ? 12nota =

12num_alunos =

2soma =27

media =13.5000

Qual a classificação ? -1nota =

-1Foram introduzidos 2 alunos com nota válidaA média é 13.5 valores>>

Se à entrada do ciclo a expressão é falsa (0), o ciclo não chega a ser executadonenhuma 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 cicloinfinito, 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 deselecção é inicializada e terminada dentro de outro ciclo ou instrução de selecção. OMatlab não coloca limites ao número de ciclos ou instruções de selecção que estãoencadeados, mas todas as estruturas if , case,  for  e while nestas situações devemterminar 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 programapermite nesta versão, que o cálculo seja repetido até que o utilizador digite uma teclaque não o ‘S’ ou ‘s’. Por fim e já fora do ciclo, é mostrado o número de cálculos queforam efectuados.

% Inicialização da variável respostaresposta = '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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 54/86

 

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 deComandos:

Qual o valor a calcular ? 6A soma dos 6 elementos é 21Quer continuar ? (s/n) sQual o valor a calcular ? 8

A soma dos 8 elementos é 36Quer continuar ? (s/n) nO 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 ouwhile. Quando inserido num ciclo for ou while, passa a execução do programa para aprimeira 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 autilizaçã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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 55/86

 

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 !!!')breakendresposta=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 deComandos:

Qual o valor a calcular ? 2A soma dos 2 elementos é 3Quer continuar ? (s/n) sQual o valor a calcular ? 4A soma dos 4 elementos é 10Quer continuar ? (s/n) sQual o valor a calcular ? 6A soma dos 6 elementos é 21Quer continuar ? (s/n) sQual o valor a calcular ? 8

A soma dos 8 elementos é 36Quer continuar ? (s/n) sQual o valor a calcular ? 10A soma dos 10 elementos é 55TERMINOU !!! 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 afunção input. A sintaxe do comando é:

Nome da variável = input (Texto)

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 56/86

 

Introdução à Programação  59 

Quando o comando input é executado, o Texto é mostrado no ecrã e é solicitadoao 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 primeiradigitamos a string entre plicas (do mesmo modo que uma string é atribuída a umavariá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, aoaparecer 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.92preco =

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 escritade variáveis e texto, e também foi referido que, quando pretendêssemos uma melhorformataçã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 peloutilizador. Por exemplo, o texto e os dados numéricos das variáveis podem sercombinados e exibidos numa linha. Além disso, o formato dos números também podeser 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 podeconter 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ímbolo

Descrição

  \n Passa para a linha seguinte  \b Retrocede uma casa  \t Faz tabulação horizontal (TAB)  \r Faz RETURN

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 57/86

 

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. Oseguinte 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 textoe 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ímbolo

Descrição

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 

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 58/86

 

Introdução à Programação  61 

minúsculo.

EPonto flutuante ou número real em notação científica com o  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 apresentaroutros 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 doque 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 utilizadorpor 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 eventualsinal menos.

d – Número de casas decimais.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 59/86

 

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, eventualsinal 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 decaracteres 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 matrizestiver incluído no comando, haverá repetição desse comando até que o últimoelemento (da matriz ou vector) seja mostrado no ecrã. Neste caso os dados serãoutilizados coluna por coluna, como se mostra no exemplo seguinte:

>> x=1:5x =

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.00001.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.000000Se o número é 2, a sua raíz quadrada é 1.414214Se o número é 3, a sua raíz quadrada é 1.732051Se o número é 4, a sua raíz quadrada é 2.000000Se o número é 5, a sua raíz quadrada é 2.236068>>

>> x=1:5

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 60/86

 

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.00001.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.000000A raíz quadrada de 2 é 1.414214A raíz quadrada de 3 é 1.732051A raíz quadrada de 4 é 2.000000A raíz quadrada de 5 é 2.236068

O comando fprintf  pode ser utilizado para gravar os resultados de saída numficheiro. Estes dados poderão posteriormente ser utilizados pelo Matlab ou noutrasaplicações.

São necessários três passos para escrever dados num ficheiro utilizando ocomando 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 criarum 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. Umnúmero é atribuído à variável  fid ao executar fopen. O parâmetro de abertura é umcampo escrito entre plicas e que define como o ficheiro é aberto. Os parâmetros maisutilizados 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…).

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 61/86

 

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 comandofclose. A sua sintaxe é:

fclose ( fid)

De seguida mostra-se um exemplo que utiliza o comando fprintf para gravar osresultados de saída em dois ficheiros de texto (com extensão .txt , e abertos noMicrosoft Word). Neste programa são gerados dois ficheiros, um com a raiz quadradae 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 allclc

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 naexecução do programa.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 62/86

 

Introdução à Programação  65 

FIGURA 4.1 – Ficheiros gerados no Word  

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 63/86

 

Introdução à Programação  66 

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

Neste ponto vamos estudar apenas alguns comandos mais comuns utilizados naimportação e exportação de dados numéricos em Matlab. O Matlab disponibiliza umagrande 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 docomando load a partir de um ficheiro de texto não formatado criado com um editor detexto 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 terminamcom ENTER.

O exemplo seguinte tem por base o exemplo do ponto anterior, mas em que osvalores 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 allclc

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 é:

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 64/86

 

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 ficheironã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ãodo exemplo anterior é mostrado a seguir:

% Este programa escreve a raíz quadrada e o quadrado de números,% em dois ficheiros diferentes.

clear allclc

load dados.txtrq=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);

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 65/86

 

Introdução à Programação  68 

De seguida vai-se estudar a importação e exportação de dados com a folha decálculo Microsoft Excel, que é uma ferramenta muito utilizada na organização earmazenamento de dados.

A importação dos dados da folha de Excel é feita com o comando xlsread, e a suaforma 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 umafolha, os dados serão importados apenas da primeira folha.

A instrução xlsread ignora linhas ou colunas prévias com texto, contudo se umacé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 afolha 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 dadoscontidos 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 dadoscontidos entre C5 e  E13 (9 linhas e 3 colunas) na folha Folha2 do ficheiroexemplo.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 aexecuçã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 docomando 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; esteficheiro deve existir na directoria corrente de trabalho, mas se não existir, um novoficheiro é criado.

Tal como para o comando xlsread, também se pode especificar uma folhaespecífica ou um intervalo específico de uma folha para onde vão ser escritos osdados. 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 escritosnum 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 allclc

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 66/86

 

Introdução à Programação  69 

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

% Escreve os valores do raio e os respectivos valores da áreaxlswrite('area',x,'A2:A6')xlswrite('area',area,'B2:B6')

Mostram-se de seguida os ficheiros Excel raio.xls (de importação de dados) earea.xls (de escrita), correspondentes ao programa anterior.

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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 67/86

 

Introdução à Programação  70 

6.  FUNÇÕES

Nos pontos anteriores, nomeadamente no ponto 1.5, estudámos algumas dasmuitas 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). Algunsexemplos 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 umavez, pode-se digitá-la como parte do programa. Porém, quando o programa faz váriaschamadas de uma função para diferentes valores dos argumentos, é conveniente criaruma nova função no Matlab.

Estas funções são criadas e salvas no editor de código como ficheiros-M, e sãousadas do mesmo modo que as funções originais do Matlab. As funções para além deconterem uma sequência de comandos Matlab, podem receber (parâmetros deentrada) e devolver valores (parâmetros de saída). Isto significa, que as operaçõesrealizadas 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ídapodem conter uma ou várias variáveis e cada variável pode ser um escalar, um vectorou uma matriz.

Uma função é executada num espaço de dados fechado e apenas acessível pelaprópria função. Todas as variáveis criadas e manipuladas durante a execução de umafunçã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 criadasespecialmente 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. Afunçã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ópriafunção e com a extensão ‘m’. Na realidade, o Matlab identifica uma função com baseno nome do ficheiro e não no nome utilizado na sua declaração. Uma vez localizado oficheiro, é executada a primeira função declarada no mesmo.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 68/86

 

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 quaisqueroutros 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 maisparâmetros (dados ou variáveis) para a função. Os parâmetros de entrada aparecemlogo após o nome da função. Normalmente, toda a função tem pelo menos umparâmetro de entrada, embora seja possível declarar funções que não têm parâmetrosde 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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 69/86

 

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 usadoscomo escalares.

O código da função deve ser escrito em termos dos parâmetros de entrada, e taisparâ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 dedeclaração da função à esquerda do operador de atribuição (=), e devem conter osparâmetros cujos valores são devolvidos pela função. De notar que não é obrigatórioque as funções retornem valores, e se houver apenas um parâmetro de saída pode-sedigitar 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çãofunction[ar,per] =

rectangulo(lado1,lado2)Dois parâmetros de entrada e dois

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 dafunção aparece normalmente um pequeno texto opcional de ajuda, com a descrição dafunçã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 %, eserá apresentado sempre que for pedida ajuda sobre a função. Uma função não precisade conter este texto, mas é habitual utilizá-lo para tornar inteligível o código dafunção.

Na primeira linha da ajuda, designada por linha H1, recomenda-se que utilize onome da função e que descreva a sua funcionalidade. Quando o utilizador ao procurarajuda digita lookfor palavra_chave, o Matlab procura a palavra-chave em todas aslinhas 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 rectangulorectangulo calcula a área e o perímetro de um rectângulo>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 70/86

 

Introdução à Programação  73 

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

>> help rectangulo

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

>>

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

Após estas linhas de comentários aparece o corpo da função constituído pelaslinhas 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 deentrada 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 doespaço ocupado pela área de trabalho (espaço de memória onde é executada a janelaCommand 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áveispodem 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 afunção. Logo, uma função pode possuir variáveis com nomes idênticos às variáveisdeclaradas na janela Comando Window ou num programa. Concluindo, os valoresatribuídos às variáveis internas das funções não serão modificados por nenhum tipo deatribuição feito fora do ambiente da função.

Todas as funções possuem um conjunto particular de variáveis locais que não sãocompartilhadas com outras funções ou com a área de trabalho da janela CommandWindow e/ou das rotinas. Mas, é possível tornar uma variável comum (pública) àsvárias funções e, possivelmente a toda a área de trabalho. Para declarar uma variávelglobal 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 separandoas variáveis por meio de espaços após um único comando global. No exemploseguinte declaram-se as variáveis x, y e z como variáveis globais:

>> global X Y Dia_de_Pascoa>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 71/86

 

Introdução à Programação  74 

A variável que se quer utilizar como global tem de ser declarada como global emtodas as funções e em todas as partes do Matlab em que o utilizador quiser que elaseja 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.

Considere-se a função y = f(x) =252

)53( 2

+

+

 x

 x x

. Pretende-se calcular o valor da

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 utilizadorfaria:

>> 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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 72/86

 

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 nachamada da função.

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

editor:

>> x=6x =

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 sejaquando pretendo trabalhar simultaneamente com vários valores de x, tem que seconsiderar as operações elemento a elemento do vector. Neste caso, obtém-se afunçã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 CommandWindow:

>> 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 umtriâ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);

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 73/86

 

Introdução à Programação  76 

De seguida mostram-se os resultados de vários exemplos de execução da funçãohipotenusa 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>>

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 74/86

 

Introdução à Programação  77 

6.4  FUNÇÕES inline

Quando o valor de uma função matemática precisa de ser determinado dentrode 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 emMatlab, 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 asintaxe:

Nome_função = inline ('expressão matemática')Mostra-se de seguida como exemplo, a definição da função  f(x) = x

2-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 podeser 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 independentespode-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:

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 75/86

 

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 porexemplo:

>> t(2,3)ans =

87>>

7.  GRÁFICOS

Um dos pontos mais fortes do Matlab é a sua capacidade de representação gráficados dados. O Matlab possui muitos comandos capazes de criarem diferentes tipos degráficos bidimensionais (2D) ou tridimensionais (3D). Neste ponto, estudam-seapenas a forma de criar e formatar os gráficos bidimensionais, já que, são os maisutilizados e de uma forma geral adequados para a representação de conjuntos dedados 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ácilcompreensão do que os gráficos tridimensionais. Em comparação com os gráficosbidimensionais, os gráficos 3D têm uma aplicabilidade mais restrita.

De referir que, os gráficos existentes podem sempre ser modificadosinteractivamente, 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áficapela seguinte sucessão de comandos:

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

1 3 5 7 9

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 76/86

 

Introdução à Programação  79 

>> y = x.^2-10y =

-9 -1 15 39 71>> plot(x,y)

O resultado das funções de representação gráfica (no exempo anterior, a funçãoplot) é apresentado numa janela especial (Janela Gráfica), normalmente designada porfigura.

Como se vê no exemplo da Figura 7.1, uma figura padrão possui um título situadona barra superior da janela, um menu, uma barra de ferramentas e a área do gráficoque ocupa a maior parte da janela. Neste caso (o mais simples), a figura contémapenas um gráfico constituído pelos dois elementos básicos: o sistema de eixos e aslinhas 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-seobter uma listagem destas funções digitando help graph2d.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 77/86

 

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 suasintaxe 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 osvalores de x dispostos na abcissa (eixo horizontal) e os valores de y na ordenada (eixovertical). A curva é construída a partir de segmentos de recta que ligam os pontoscujas coordenadas são definidas pelos elementos dos vectores x e y. O primeiro vectordigitado no argumento da função é usado como eixo horizontal e, o segundo, comoeixo 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 oestilo 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 tamanhodo 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 demarcadores das linhas.Os especificadores para estilos de linhas são:

Estilo de linha EspecificadorContínua (Por defeito) -Tracejada --Traço-ponto -.Ponteada :

Os especificadores de cores de linhas são:

Cor de linha EspecificadorAzul (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)

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 78/86

 

Introdução à Programação  81 

Branco w (ou white)

Os especificadores de tipos de marcadores são:

Estilo de linha EspecificadorPonto .

Círculo oMarca x xMarca + +Estrela *Quadrado sDiamante dTriângulo para baixo vTriâ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 docomando plot, e que são opcionais, ou seja, nenhum, um, dois ou todos osespecificadores podem ser incluídos num comando, como se ilustra nos exemplosseguintes. Por fim, refira-se que os especificadores podem ser digitados por qualquerordem. 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 (*).

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 79/86

 

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 daespessura da linha, do tamanho e das cores dos marcadores das linhas e parapreenchimento. As propriedades são digitadas entre plicas, são separadas por vírgula eseguidas do valor da propriedade. De seguida mostram-se valores das propriedades:

Propriedade Descriçãolinewidth 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

orEspecifica a cor do marcador ou a cor da borda da linha

que limita o marcador. A cor é digitada entre plicas.

markeredgecolor Especifica a cor de preenchimento dos marcadores. A coré digitada entre plicas.

Um exemplo:

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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 80/86

 

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 serintroduzidos 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 dodomí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 noponto anterior para o comando plot.

No exemplo seguinte, a curva gerada é apresentada na figura 7.3.

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

-1000 -500 0 500 1000

-5

0

5

10

15

20x 10

-3

 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 .

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 81/86

 

Introdução à Programação  84 

7.3  FORMATAÇÃO

Como vimos, os comandos plot e fplot permitem somente a criação degrá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 doseixos, 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, oeditor das propriedades na Janela Gráfica (Figure Window).

Vamo-nos debruçar sobre o primeiro modo, estudando vários comandos deformataçã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 tornaos 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 avisualização de um gráfico. O comando grid on torna visível a grelha; o comandogrid 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

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 82/86

 

Introdução à Programação  85 

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

0

5

10

15

20x 10

-3

 

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 detexto 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 deComandos, 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 primeirocaractere é inserido na posição indicada pelas coordenadas x e y (de acordocom 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 é:

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 83/86

 

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 emque 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 seguintede 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')

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 84/86

 

Introdução à Programação  87 

0 1 2 3 4 5 65

10

15

20

25

30

35

40

45

Localização à escolha

Texto no ponto 4,15

Eixo dos XX

   E   i  x  o

   d  o  s

   Y   Y

Gráfico de x2+6

x2+6

 FIGURA 7.5 – Gráfico da função y = x

2+6  

7.4  MÚLTIPLOS GRÁFICOS

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

-2 -1 0 1 2 3 4-40

-20

0

20

40

60

80

100

120

 FIGURA 7.6 – Múltiplos Gráficos

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 85/86

 

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 ocomando line.

Dois ou mais gráficos podem ser colocados numa mesma saída digitalizando-separes 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. Osvectores em cada par devem ter o mesmo tamanho.

O Matlab gera gráficos automaticamente em 3 cores diferentes, para que sepossam 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 utilizao 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 seguinteforma:

• Começa por declarar o vector  x que contém o domínio da função (definepontos entre -3 e 5 espaçados por 0,01;

• Declara o vector  y que contém os valores da função 2x3+2x

2-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 atraço pontilhado preto.

De seguida mostra-se a figura gerada por este conjunto de comandos.

5/6/2018 Seb Matlab - slidepdf.com

http://slidepdf.com/reader/full/seb-matlab 86/86

 

Introdução à Programação  89 

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

0

50

100

150

200

250

300

 FIGURA 7.7 – Múltiplos Gráficos – y = 2x

3+2x

2-6x+3, y’ e y’’