Você está na página 1de 45

2015

MATLAB
Uma Introduo

1.O QUE O MATLAB


De uma maneira muito simplista, MATLAB pode ser visto como uma
linguagem de programao como o FORTRAN ou o C.
Definir MATALB com to poucas palavras e, no entanto, muito difcil e,
talvez, seja mais conveniente apenas mencionar algumas caractersticas que
fazem desta linguagem to nica:
-

a programao no ambiente MATLAB uma tarefa relativamente mais fcil do


que em outros ambientes.

unicidade no tratamento de grandezas inteiras, reais ou complexas

uma compreensiva biblioteca matemtica

uma compreensiva biblioteca de ferramentas grficas

uma extensa biblioteca de tool boxes que permite a utilizao das mais
diferentes ferramentas como: lgica fuzzy, algoritmos genticos, anlises
estatsticas, etc. sem falar do simulink uma poderosa ferramenta para a
simulao de sistemas dinmicos.

uma tool box contendo funes apropriadas para o desenvolvimento de


interfaces amigveis com o usurio.

etc.

Miguel H. Hirata
Lucas
Felipe
2015

1. MATLAB
O MATLAB uma linguagem de programao de alto nvel, isto , voc no utiliza
comandos de mquina. Por causa desta caracteristica e por causa dos objetivos dos
desenvolvedores do MATLAB este ambiente muito til para o trabalho do dia a dia do
estudante, como uma poderosa e simples ferramenta de clculo e simulao numrica nas
atividades de um pesquisador e no laboratrio e escritrio de projetos de um engenheiro. O
comando help do MATLAB uma ferramenta poderosamente simples e indispensvel no
dia a dia da utilizao do MATLAB; esta uma caracterstica muito apreciada pelos seus
usurios. Igualmente util so os demos que podem ser acessados a qualquer instante no
ambiente MATLAB.
Pelas suas caractersticas e capacitaes o MATLAB apropriado para anlise dos
dados obtidos num experimento; estes dados podem ser plotados num grfico com grande
facilidade, as tool box permitem a realizao de anlises estatsticas destes dados.
A elaborao de uma interface que seja eficiente e amigvel com o usurio torna o
MATLAB uma ferramenta importante para se desenvolver ferramentas de utilizao cotidiana
no laboratrio ou escritrio de projetos, para se desenvolver um aplicativo didtico em sala
de aula, etc. Uma ferramenta desenvolvida em ambiente MATLAB pode ser facilmente
compilada para ser utilizada em computadores que no dispe do MATLAB.
As tool box permitem que muitas situaes encontradas nas salas de aula, nos
laboratrios de pesquisas e nos escritrios de projetos sejam encaradas com muita
facilidade; como exemplo de tool box mencionam-se:
: Vrias Tool Box para aquisio e tratamento de dados:
- Data Aquisition Toolbox
- Curve Fitting Toolbox
- Statistics Toobox
- etc
: VariasTool Box para operaes matemticas:
- Symbolic Math Toolbox

- Partial Differential Equation Toolbox


- etc
: VariasTool Box para operaes financeiras:
- Econometrics Tool Box
- Financial Tool Box
- Financial DerivativesTool Box
- etc.
: VariasTool Box para Simulao e Controle de Sistemas Dinmicos:
- Control System Toolbox
- Robust Control Toolbox
- Model Predictive Control Toolbox
- etc.
: VariasTool Box para ferramentas de AI:
- Neural Networks Tool Box (Redes Neurais)
- Fuzzy Logic Tool Box (Lgica Nebulasa)
- etc.
: E muitas outras tool box.
Muito provavelmente o MATLAB ser suficiente para quase todos os trabalhos
numricos que voc precisar.
Para trabalhos que exigem grande capacidade computacional o MATLAB permite a
utilizao de ferramentas necessrias para a computao de alto desempenho.
Finalmente, oportuno citar que o MATLAB pode ser utilizado com outras linguagens
como FORTRAN

e C mais utilizadas para clculos pesados. O MATLAB interage

perfeitamente com outros aplicativos como, por exemplo, o Microsoft Word.

2. INICIANDO COM O MATLAB


Para abrir o MATLAB basta clicar no cone na rea de trabalho.

Ao faz-lo aparecer em sua tela uma janela inicial com o cone do MATLAB com
algumas informaes adicionais como a sua verso, por exemplo.
Aps alguns segundos, muito provavelmente, teremos a tela do seu computador
aberta com 3 janelas (a configurao mais usual) com uma barra de menus. Estas janelas
so denominadas:
-Command Window
- Command History
- Workspace
A barra de menus muito parecida com as janelas do Windows; nesta barra aparecem
duas palavras importantes: Desktop e Help.
Acionando o Desktop voce pode configurar sua tela com as janelas que mais lhe for
conveniente. Tente e configure seu espao de trabalho
Acionar o help , provavelmente, a operao mais comum aos iniciantes e
altamente recomendvel. Atravs do help voce acessa informaes sobre o produto
MATLAB, instrues sobre o uso de janelas, demonstrativos e vdeos ilustrativos, enfim, tudo
o que voce vai precisar.
Antes de passarmos para a descrio das janelas, interessante saber que, para
encerrar uma sesso do MATLAB basta digitar exit ou quit. Experimente !

2.1.

JANELAS NO MATLAB

Voc pode configurar a tela do MATLAB acordo com sua vontade e necessidade. No
entanto, a configurao defaut com tres janelas (Command Window, Command History e
Workspace), talvez seja a mais apropriada.
Antes de configurar sua tela, no entanto, faa o seguinte:
1. Abra o menu Desktop
2. Selecione: Desktop Layout e, em seguida, Default (ns a chamaremos de
configurao padro). Muito provavelmente esta a configurao que j existe. Da
configurao padro a Command Window a janela principal; nela que voc ir
digitar os comandos.
3. Duas outras janela fazem parte da configurao default: a Command History (que
lista tudo o que voc j fez e de onde voce pode copiar para colar na command
window) e a workspace.
Observe que voce pode mudar a configurao da sua tela a qualquer momento. Tente abrir a
janela Help atravs do menu Desktop e acrescente a janela Current Folder (para que serve
este folder?)
2.1.1. COMMAND WINDOW, COMMAND HISTORY E WORKSPACE
Com a configurao padro, digite a seguinte sequncia de comandos:
>> a= 1
>> b=2
>>c=a+b
Observe o que aconteceu.
1. Os comando digitados e os resultados aparecem na Command Window, pois esta a
janela atravs da qual os comandos so inseridos.
NOTA: No se pode deletar ou corrigir um comando nesta janela.
2. Na Command History aparecem:
- a data e o horrio
- as variveis a e b com os respectivos valores
- a instruo para o clculo de c

NOTA: Aprender a utilizar estas informaes ser de grande utilidade quando se tem que
executar operaes complexas, corrigi-las e modifica-las.
3. No Workspace aparecem os valores de a , b e c.
Em seguida digite a sequncia de comandos abaixo (no esquea (;) aps cada linha):
>>a= 5;
>>b=6;
>>c=a+b;
O que aconteceu? Nada, no mesmo?
Faa, ento, o seguinte:
- Digite
>> a
e veja que na Command Window aparece o valor 1; o valor de a.
- Como voce pode verificar que 2 o valor de b e 3 o valor de c? Facil, no mesmo?
- Observe, tambm, o que acontece na Command History e no Workspace.
Podemos concluir que: o sinal (;) colocado no final de um comando impede que o valor
da varivel seja mostrado na tela. Isto muito bom quando comearmos a programar; em
geral no queremos ver todos os valores que o computador calcula! Se quisermos saber o
valor de uma varivel basta digit-la, omitindo o (;).
Observe que no se pode apagar um comando especfico da Command Window e
cada novo comando digitado fica registrado nesta janela.
No entanto, a Command Window pode ser totalmente apagada utilizando o boto
direito do mouse que abre um conjunto de instrues e, entre elas, a de apagar totalmente
a Command Window. Observe que apenas o contedo da janela apagado, mas os valores
das grandezas se mantm na memria da mquina.
De fato, se voc digitar um novo valor para a varivel a
>> a = 2;
e, em seguida

>> c
vai verificar que o computador mostrar o resultado 3, que representa o
valor atual de c (observe o valor de c no Workspace). No entanto, se digitarmos
>> c = a + b
verificamos que o novo valor fornecido para c 4, que representa a soma do novo valor 2 (de
a) com o valor 2 (de b).
Ou seja, o computador assume o ltimo valor de cada varivel. Acompanhe o que est
acontecendo na Command History e no Workspace.
No existe melhor maneira de aprender o MATLAB do que ser curioso e explorarnovas
alternativas. Tente!
Defina, isto , digite.
>>a = 3
>>b=2
e, em seguida, digite os seguintes comandos que possuem interpretao bvias:
>> c= a+b

% soma

>> s=a-b

% subtrao

>> d=a/b

% diviso; mais tarde aprenderemos o significado de (\)

>> m=a*b

% produto

>> e = a^b

% potncia

Observe que as instrues escritas com a cor verde foram todas precedidadas pelo
smbolo (%); este o argumento para se dizer ao MATLAB que todas a instrues seguintes
so apenas notas explicativas e no devem ser consideradas.
Experimente copiar instrues da Command Window ou da Command History e cole-os na
Command Window. O que aconteceu?

3. UMA PEQUENA DEMONSTRAO DO QUE SE PODE FAZER E


COMO FACIL FAZER.
Digite com cuidado as instrues abaixo e veja o que acontece. NO ESQUEA O
PONTO E VRGULA (;) ao final das linhas como mostrado no exemplo 3.1.
EXEMPLO 3.1
Digite:

>>x = linspace(0,6);
O que aconteceu? Nada, no mesmo?
Agora digite sem o (;)
>>x = linspace(0,6)
O que aconteceu? Um monto de nmeros no mesmo?
Como j vimos, se voc colocar o (;) o MATLAB calcula o valor de x e no escreve nada.
Se voc no colocar (;) o MATLAB calcula o valor de x e escreve na tela!
Agora escreva:
>>x = [1 2 3 4 5 6]

% no se esquea de colocar um espao


% entre os dgitos.

o que aconteceu? O MATLAB entendeu que voc deseja criar o vetor x com as componentes
x(1)=1, x(2)=2, x(3)=3, x(4) = 4, x(5) = 5 e x(6) =6.
OBSERVAO: Lembre que toda vez que voce iniciar uma linha com o smbolo (%) o
MATLAB assume que o que vem a seguir apenas um lembrete ou um esclarecimento e
no um comando MATLAB.
EXPERIMENTE: digite
>>x(2)
e veja o que acontece; experimente!
EXPERIMENTE: digite
>>y = linspace(1,6,3)

% vetor com 3 componentes, sendo


% y(1) = 1 e y(3) = 6

Verificamos que a utilizao do comando linspace muito comoda e mais simples do que
digitar y = [1 2 3 4 5 6], no mesmo?
O comando
y = linspace (a,b,n)
cria um vetor com n componentes igualmente espaadas, tal que y(1) = a e y(n) =b.
Se voc no fornecer o valor de n, o MATLAB assume que n = 100.
EXEMPLO 3.2
Digite:
x = linspace(0,2*pi);
y = sin(2*x);

plot(x,y)
xlabel(x);
ylabel(sen(2x));

% criar o vetor x com 100 componentes, sendo a


% primeira igual a zero (0) e a ltima igual a (2)
% criar o vetor y, que tem as componentes iguais a
% seno(2x), estas componentes so calculadas nos
% pontos correspondentes das componentes do
% vetor x.
% fazer um grfico y versus x.
% coloca o nome x do eixo x
% coloca o nome sen(2x) do eixo y

O que aconteceu? Viu o grfico?


Plotemos duas curvas num mesmo grfico. Para isto, digite:
x = linspace(0,4*pi);
y = sin(2*x);
plot(x,y)
hold on
z=cos(2*x);
plot(x,z)
hold off

% criar o vetor x.
% criar o vetor y
% fazer um grfico y versus x.
% o MATLAB fica esperando
% criar o vetor z
% acrescentar o grfico z versus x
% desabilita a espera.

O MATLAB faz isto tudo de maneira fcil e muito outras coisasmais. Faz grficos
incrveis!
Tente colocar nomes nos eixos do grfico acima? No sabe? Digite
>>helpxlabel
e aprenda!

3.1.COMANDOS QUE VOCE J APRENDEU


Observe e identifique os comandos principais que voc aprendeu at agora.
O espao abaixo destinado a voc.
Escreva, depois dos comandos aprendidos e que so apresentados em azul, o tipo
de ao que eles desencadeiam; veja os dois primeiros comandos:
x =linspace(a,b,n) cria um vetor com n componentes, sendo a = primeira
componente e b = ltima componente.
y = sin(x)
y = cos(x)

calcula o valor da funo trigonomtrica seno de x.


Verifique como calcular outras funes trigonomtricas. Como? Que tal
utilizar o HELP?

plot
xlabel
hold on
hold off

3.2.NOVOS COMANDOS DE GRANDE UTILIDADE


Listamos neste item alguns comandos de grande utilidade na utilizao diria do
MATLAB
help ... Acho que voc j comeou a entender que o comando mais importante

(pelo menos para ns que estamos comeando) o help. Assim sendo vamos
experimentar:
>>help

% muito vago e o MATLAB no sabe sobre o que voc %precisa de


ajuda. O que acontece? Apenas uma lista
%enorme e pouco til de assuntos sobre os quais ele pode % lhe ajudar.
% Nas verses novas do MATLAB o help quase que
%automtico.

Tente, por exemplo, digitar help xlabel e espere um pouco. O que aconteceu? Legal,
no ? Repita help cos
Para o comando help ser mais efetivo, no entanto, necessrio saber o que estamos
procurando saber.
clock
1.0e+003 um multiplicador para os valores [ano, mes, dia, hora,
minuto, segundo]
Deu para ntender ?
date auto explicativo
Existem muitos outros comandos importantes que voc vai aprender com o tempo, como, por
exemplo
pi

reconheceu?

Digite
>> format short
>>pi
e, em seguida
>> format long
>>pi
Compare os resultados. Para entender melhor digite
>> help format
i ou j entendeu? O MATLAB trabalha com nmeros complexos.
Digite:
>>x = 2 +20i;
>>y=10+2j;
>>z=x+y
OBS: O MATLAB diferencia as letras maisculas das minsculas; elas possuem significado
diferentes; h, no entanto, a possibilidade de modificar esta caracterstica

3.3.OPERAES TEIS
Mencionamos a seguir duas operaes muito teis (principalmente quando voce
estiver programando) que, provavelmente voce j conhece.

ctrl c
ctrl v

copiar
colar

Utilize estas operaes para copiar linhas da Command History para o seu local de trabalho.
Outra operao muito til consiste em escrever
whos
digite
>>x = [1 2 3];
>> y =[1 2 3; 4 5 6];
Observe que na definio de y foi utilizado (;) para separar os 3 primeiros dgitos dos 3
ltimos. Em seguida, digite
>> x
ir aparecer x = 1 2 3 no mesmo? Se digitar
>> y
ira aparecer uma matriz de duas linhas e tres colunas (2 x 3)
1

De fato, agora estesso os valores que x e y assumem na command window.


Voce observou o que aconteceu na workspace?
Agora digite
>>whos
o que aconteceu? Parece que so as caractersticas de todas as variveis ativas (veja o
workspace)
Se voc precisa de mais detalhes, procure no help.
Sua command window est ficando muito cheia? Isto no faz mal, mas se voc quiser
limp-la v para o menu Edit e escolha (ns j aprendemos uma outra maneira de fazer isto,
lembra-se?):
Clear command window

Clear command history


Clear command workspace
Antes de prosseguir tente o comando:
>> clc
O que aconteceu? Voc acabou de apagar a Command Window!!! E, o que acontece se voc
digitar
>> clear all
Experimente e descubra
Estamos indo muito devagar?
Voc pode avanar mais rpido e sozinho.
Para isto procure na barra superior o ponto de interrogao dentro de um crculo azul.
Escolha a opo MATLAB e, em seguida:
Getting Started
ou
Demos
ou
Video
e divirta-se

3.4.FUNES QUE O MATLAB CALCULA


J tivemos a oportunidade de utilizar algumas funes que o MATLAB calcula
automaticamente.
Abaixo so listadas estas e outras novas funes; a apresentao no exaustiva.
A Tabela 3.1, fornece as principais funes trigonomtricas. Existem outras que voc
pode descobrir utilizando o help.
TABELA 3.1: FUNES TRIGONOMTRICAS

FUNO

OBSERVAES

sin(x)

Calcula o valor do seno de x; x em radianos

cos (x)

Calcula o valor do coseno de x; x em radianos

tan(x)

Calcula o valor da tangente de x; x em radianos

asin(x)

Calcula o valor do arcoseno de x

acos(x) Calcula o valor do arcoseno de x


atan(x)

Calcula o valor do arcotangente de x

Outras funes matemticas importantes so fornecidas na Tabela 3.2. Experimente


utiliz-las.
FUNO

TABELA 3.2: OUTRAS FUNES


OBSERVAES

sqrt(x)

Calcula a raiz quadrada de x

exp (x)

Calcula o valor de ex

log(x)

Calcula o valor do logaritmo neperiano de x

Log10(x) Calcula o valor do logaritmo de x, na base 10


outras

Procure saber: bessel, legendre, gamma, etc.

Finalmente algumas funes especficas, que sero teis para trabalhos mais
avanados, so apresentadas na Tabela 3.3.
importante que voc tente utilizar pelo menos algumas das funes AGORA. Se
voc no conseguir utilize o help.
TABELA 3.3: FUNES ESPECIAIS
FUNO

OBSERVAES

abs(x)

Calcula o valor absoluto de x

round(x)

Arredonda o valor de x para o valor inteiro mais prximo

fix(x)

Obtm o valor inteiro de x; experimente x = 1.55 e

sign(x)

Obtm o sinal de x; experimente x = 1.55 e x= -1.55

rand

Fornece um nmero randmico x, tal que 0 < x <1

x= -1.55

Procure saber mais sobre os comandos: rand(n) e rand(seed


,k)

linspace (x1,x2,n) Cria o vetor com n componentes, sendo x1= primeira


componente e x2=ltima componente
length(a)

Fornece o nmero de componentes do vetor a. Veja,


tambm, o comando size(a)

sort(a)

Ordena em ordem crescente os componentes do vetor a

sum(a)

Fornece a soma dos componentes do vetor a

max(a)

Fornece o maior componente do vetor a

min(a)

Fornece o menor componente do vetor a

NOTA: nas verses novas do MATLAB existe um cone do MATLAB na parte inferior
esquerda da command window. Clique neste cone para ver as funes do MATLAB
EXEMPLO 3.3: Utilizao dos comandos abs(x) e sign(x); veja tabela 3.
Digite
>>x = -2;
Em seguida, podemos obter os valores de y,z e w digitando
>>y = abs(x)
>>z = sign(x)
>>w= sign(y)

ans = 2
ans = -1
ans = 1

EXEMPLO 3.4: Utilizao dos comandos round(x) e fix(x); veja tabela 3.


Digite
>>x = 2.45;
>>y= 2.90;
Em seguida, podemos obter os valores de xx, xxx, yy e yyy; veja tabela 3.
>>xx= round (x)
>>xxx=fix(x)
>>yy = round(y)
>>yyy=fix(y)

ans = 2
ans = 2
ans = 3
ans = 2

4. COMO O MATLAB FUNCIONA?


J foi mencionado que o MATLAB uma linguagem de programao de alto nvel, isto
, voc no utiliza comandos de mquina.

Uma das grandes vantagens do MATLAB reside no fato de que a sua base de
operao a matriz; assim, por exemplo, se digitarmos na Command Window:
>> a=4
>> a = [ 1

a grandeza a ser um escalar ou uma matriz (1 x 1)


2

3]

>> a = [ 1; 2; 3]

a grandeza a ser uma matriz (1 x 3) ou seja uma


matriz com uma linha e 3 colunas que ser referido
como um vetor de 3 componentes.
a grandeza a ser uma matriz (1 x 3) ou seja uma
matriz com 3 linhas e 1 coluna que ser referido
como um vetor coluna de 3 componentes.

>> a = [1 2 3; 4 5 6] a grandeza a ser uma matriz (2 x 3) ou seja uma


matriz com 2 linhas e 3 colunas.
Por causa desta grande vantagem e por causa dos objetivos dos desenvolvedores do
MATLAB este ambiente muito til para o trabalho do dia a dia do estudante, engenheiro ou
pesquisador.
Muito provavelmente os recursos do MATLAB sero suficientes para todos os
trabalhos numricos que voc precisar. Se houver necessidade de clculos realmente muito
pesados ento, talvez, seja apropriado a utilizao de um outro ambiente como o FORTRAN
ou o C; no entanto, considere antes a possibilidade de utilizao do MATLAB.

4.1. MATRIZES E OPERAES ELEMENTARES


A base de operao do MATLAB a matriz.
Poresta razo observe as operaes seguintes:
Vetor:Seja a matriz de uma linha com 4 elementos (vetor de 4 componentes)
x = [x1 x2 x3 x4] = [ 1 2 48]
para isto digite
>>x = [ 1 2 48];
na tela nada aparecer pois utilizamos (;). Se for digitado, a seguir
>> length(x)
o resultado ser: 4 que o nmero de componentes de x. Agora digite
>>x(4)
o resultado ser 8 que o valor da quarta componente do vetor x
Digite, a seguir
>> x=[x 52]
o MATLAB retorna
x=

1 2 48 52
ou seja o MATLAB acrescentou o nmero 52 ao seu vetor original.
Vetor coluna: A matriz de uma coluna apenas denominado de vetor coluna. O vetor coluna
y de 3 elementos escrito como
>> y =[1;2;3]
e o MATLAB retorna
y=
1
2
4
e, se como anteriormente for digitado
>> y =[y:5]
o MATLAB retorna
y=
1
2
4
5
Matriz Quadrada: Seja a matriz quadrada (n x n) = (3 x 3) tal que:
- a primeira linha seja composta pelos algarismos: 1, 2 e 3
- a segunda linha por: 3, 2 e 1
-a terceira linha por 1, 1 e 1
Digite:
>> a = [ 1 2 3; 4 5 6; 7 8 9]
E o MATLAB mostra
a=
1 2 3
4 5 6
7 8 9
E, como visto anteriormente, o sinal (;) utilizado para indicar mudana de linha.
Os comandos:
[m,n] = size(a) fornece (m= nmero de linhas, no caso 3 e n = nmero de
colunas, no caso 3 (veja o equivalente length(x)
a(m,n)

fornece o valor do elemento localizado na linha m e coluna n.

Matriz Identidade: uma matriz com todos os elementos nulos, exceto aqueles da diagona
principal que assumem o valor unitrio. Para criar uma matriz identidade (m x n) digite
>>I =eye(3,4)
e o resultado ser:
I=
1

0 0

Experimente digitar: >>eye(3) e veja que o resultado uma matriz identidade quadrada.
Soma e Subtrao: Digite, agora, a matriz
>> b = [ 1 1 1; 2 2 2; 3 3 3];
e, em seguida o comando (soma de matrizes)
c = a+b
O MATLAB retorna
c=
2

10

11

12

uma matriz quadrada que representa a soma da matriz a com b.


Resultado anlogo ser obtido com a utilizao do comando (subtrao de matrizes)
d=ab
Produto de Matrizes: O que acontece se for digitado (produto de matrizes)
d = a*b
No dificil descobrir que a matriz d o produto de a por b, cuja primeira coluna formada
pelos elementos:
d11 = (1*1) + (2*2) + (3*3) = 14
d21 = (4*1) + (5*2) + (6*3) = 32
d31 = (7*1) + (8*2) + (9*3) = 50
e assim por diante. Se voce deseja saber o valor de qualquer elemento da matriz d, utilize o
comando j visto d(m,n)

Produto de uma Matriz por um Escalar:Observe a prxima operao ecompare o resultado


com o resultado anterior
>> e = 5

% um escalar

>> f = 5*a

% produto de um escalar por uma matriz

Verifique que o resultado desta operao resulta na multiplicao de cada elemento da


matriz pelo valor do escalar; para isto utilize o comando
>> f
Produto de Matrizes por Elementos: O MATLAB permite a seguinte operao:
d = a.*b
que retorna uma matriz cujos elementos so iguais ao produto do elemento equivalente de a
pelo elemento equivalente de b, isto , dpq = apq *bpq
Potnciao: Observe que 52 = 5*5. Logo se a = matriz quadrada, ento operao
b = a^2
equivalente a
b = a*a
Observe que esta operao s possvel se a for uma matriz quadrada e se o expoente (no
caso 2) for inteiro.
Potenciao por elementos: Esta uma operao muito comum. Tente os seguintes
comandos e verifique os resultados
a = [1

3] um vetor ou uma matriz linha


potenciao por elementos

b = a.^2
O resultado ser
b=
1

Observe, tambm que se


c = [1; 2; 3]

uma matriz coluna

o resultado de
d = c.^2
ser: d =
1

potenciao por elementos

4
9
Matriz Inversa: considere o produto de duas matrizes A e B. Se A*B = I, I = matriz
identidade, diremos que A e B possuem uma relao inversa. Assim sendo, se A*A -1 = I a
matriz inversa de A indicada como Inv(A) = A-1. Em MATLAB a matriz (IV) inversa de A
obtida utilizando o comando
IV = inv(A)
Observe que a inversa de A s definida se A for uma matriz A for uma matriz quadrada.
Procure no seu livro de clculo o que significa o aviso fornecido pelo MATLAB se voce tentar
calcular IV=inv(A) se A =[1 2 3; 4 5 6; 7 8 9]
Diviso de uma Matriz por Outra: Estano uma operao trivial ecomo o assunto
extenso e est fora dos propsitos desta introduo, recomenda-se que o leitor o estude nos
livros de Matemtica. Aqui atem-se apenas aos aspectos mais simples e utilizados.
Em MATLAB as seguintes operaes entre A e B so possveis:
C = B/A

multiplicao a direita de B pelo inverso de A

C = A./ B

diviso a direita por elementos

C= A\B

multiplicao a esquerda de B pelo inverso de A

C = A.\B

diviso esquerda por elementos

A multiplicao a direita de B pelo inverso de A, isto ,C = B/A corresponde a operao


C = B/A = B*Inv(A)
A multiplicao a esquerda de B pelo inverso de A, isto ,C = A\B corresponde a operao
C = A\B = inv(A)*B
A motivao para a apresentao de um comando de diviso, em ambiente MATLAB, pode
ser ilustrada considerando o sistema de trs equaes
x1 2x2 + 3x3 = 2
2x1 + 0x2 - 3x3 = 3
x1 + x 2 + x 3 = 6
que, em linguagem matricial pode ser escrito como

Ax=b
Nesta equao matricial, a matriz dos coeficientes A uma matriz quadrada definida como
A = [1 -2 3; 2 0 -3; 1 1 1]
As matrizes colunas como
x = [x1; x2; x3]
b = [ 2; 3; 6]
Se A e b forem conhecidos a matriz x determinada dividindo-se b pelo inverso de A, ou
x = b/ A-1
Em ambiente MATLAB esta operao efetuada escrevendo simplesmente
>> x = A\b
que resulta:
x=
3
2
1
importante, no entanto, ressaltar que
A uma matriz quadrada (n x n)
x e b so matrizes colunas com n linhas, isto : (1 x n)
Finalmente deve-se lembrar que a operao s possvel se o determinante de A for
diferente de zero, isto , det(A) 0.

4.2. COPIAR DADOS


No item anterior matrizes de vrios tipos foram introduzidas. Para facilitar a
apresentao, em todos os exemplos,foram utilizadas matrizes com poucos elementos.
Na prtica, as matrizes podem apresentar um nmero grande de elementos. Digitar
estas matrizes pode ser demorado e erros so frequentes; as vezes a identificao e
correo dos erros torna-se muito difcil.
Uma maneira fcil de introduzir uma matriz com muitos elementos consiste em digitla no Microsoft Excel e depois copi-la na Command Window
A figura abaixo mostra uma pgina do Excel, ou uma matriz quadrada com 6 linhas e 6
colunas.

10

12

12

15

18

12

16

20

24

10

15

20

25

30

12

18

24

30

36

7
Na Command Window, tente digitar a matriz (5 x 5) utilizando os procedimentos
conhecidos, isto , procedendo como:
>>a = [ 1 2 3 4 5; 2 4 6 8 10; etc.]
Se a matriz possuir muitas linhas e colunas e se os valores no apresentarem uma
sequncia lgica (como o caso quando se coleta dados num experimento) a tarefa acima
proposta pode se tornar trabalhosa e sujeita a erros, como j mencionado.
Se os valores estiverm disponveis numa tabela do Excel, no entanto, a tarefa
relativamente fcil. Basta selecionar as clulas de interesse (no caso aqueles marcados com
a cor amarela), copi-las e, em seguida, colar na Command Window com a devida definio,
isto :
>> a =[ | ]

colar (ctrl V) dentro dos colchetes

>> a = [colar]
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25

5. FAZENDO CONTAS E PLOTANDO GRFICOS


O exerccio abaixo j foi feito na parte 4. Pretende-se, agora, ver se a lio aprendida
e, tambm, aprender mais alguns procedimentos.
A primeira coisa a aprender :
Antes de comear a fazer alguma coisa no MATLAB
IMPORTANTE SABER COM TODOS OS DETALHES
o que queremos fazer
Saber com todos os detalhes significa:
- SABER O QUE FAZER
- SABER COMO FAZER
- SABER EM QUE ORDEM FAZER
EXEMPLO5.1

a) Deseja-se calcular as 4 funes abaixo relacionadas, no intervalo 0 < x < 4


y1 = seno (x)
y2 = cos(x)
y3 = seno (2x)
y4 = xseno(x)
b) Os resultados devem ser apresentados em 4 grficos diferentes, expostos numa mesma
pgina.
O QUE FAZER: O que foi descrito acima representa o que fazer; observe que alem de
calcular as funes, foi especificado o intervalo em que as funes devem ser calculadas e,
ainda, foi informado como os resultados devem ser apresentados.
Note que:
- no se pediu para se mostrar uma tabela com os valores calculados; por motivos bvios
no o ser feito
- no foi especificado em quais pontos as funes devem ser calculadas; neste caso vamos
usar nossos conhecimentos e especificar os pontos de modos que as curvas dos grficos
sejam suaves. Para isto usaremos um nmero grande de pontos; por exemplo 100.
COMO FAZER: tem-se algumas tarefas elementares para conseguir atingir os objetivos;
listam-se, a seguir, estas tarefas sem que haja a preocupao de especificar a sequncia dos
clculos (isto ser feito quando for especificada a ordem das operaes)
- gerar um vetor x contendo os 100 pontos (sero utilizados 100 pontos igualmente
espaados)
- gerar 4 vetores y1, y2, y3 e y4; cada um destes vetores possui 100 componentes
calculados nos pontos especificados pelas componentes de x. Observe que se tem de ter
um cuidado especial para criar o vetor [y4]; veja abaixo, nos comandos, como isto pode
ser feito.
- gerar 4 grficos; o primeiro (y1 versus x), o segundo (y2 versus x), o terceiro (y3 versus x) e
o quarto (y4 versus x).

EM QUE ORDEM FAZER: esta tarefa muito simples mas fornece a oportunidade de
mostrar que um planejamento bem feito economiza esforos. Afinal deve-se: pensar primeiro
e fazer depois
De fato compare as duas sequncias abaixo:
SEQUNCIA A:
1) Gerar o vetor x = [x(1) x(2) x(3) ... x(n)]
2) Gerar o vetor y1= [seno(x(1)) seno(x(2)) seno(x(3)) ... seno(x(n))]
3) Gerar o grfico (y1 versus x)
4) Gerar o vetor x = [x(1) x(2) x(3) ... x(n)]
5) Gerar o vetor y2= [cosseno(x(1)) cosseno(x(2)) cosseno(x(3)) ...
cosseno(x(n))]
6) Gerar o grfico (y2 versus x)
7) Gerar o vetor x = [x(1) x(2) x(3) ... x(n)]
8) Gerar o vetor y3= [seno(2*x(1)) seno(2*x(2)) seno(2*x(3)) ...
seno(2*x(n))]
9) Gerar o grfico (y3 versus x)
10)
Gerar o vetor x = [x(1) x(2) x(3) ... x(n)]
11)
Gerar o vetor y4= [x(1)*seno(x(1))
x(2)*seno(x(2))
x(3)*seno(x(3)) ... x(n)*seno(x(n))]
12)
Gerar o grfico (y4 versus x)
SEQUNCIA B:
1)
Gerar o vetor x = [x(1) x(2) x(3) ... x(n)]
2)
Gerar o vetor y1= [seno(x(1)) seno(x(2)) seno(x(3))
seno(x(n))]
3)
Gerar o grfico (y1 versus x)
4) Gerar o vetor y2= [cosseno(x(1)) cosseno(x(2)) cosseno(x(3))
cosseno(x(n))]
5) Gerar o grfico (y2 versus x)
6) Gerar o vetor y3= [seno(2*x(1)) seno(2*x(2)) seno(2*x(3))
seno(2*x(n))]
7) Gerar o grfico (y3 versus x)
8) Gerar o vetor y4= [x(1)*seno(x(1)) x(2)*seno(x(2)) x(3)*seno(x(3))
x(n)*seno(x(n))]
9) Gerar o grfico (y4 versus x)

...
...
...
...

obvio que a sequncia B mais interessante que a sequncia A, uma vez que se
economiza trs vezes o esforo para gerar o vetor x (veja os comandos assinalados na
sequncia A).
Este um ponto importantssimo no desenvolvimento de uma rotina de clculos e que
constantemente ignorado pelos menos experientes. Este tpico ser retomado quando da
apresentao das funes, que nada mais so do que subrotinas.

O passo seguinte consiste na programao das operaes, o que ser feito utilizando
asequncia B
clf;
x=linspace(0, 4*pi,100);
y1=sin(x);

subplot(2,2,1); plot(x,y1);
y2=cos(x);
subplot(2,2,2); plot(x,y2);
y3=sin(2*x);
subplot(2,2,3); plot(x,y3);
y4=x.*sin(x);

subplot(2,2,4); plot(x,y4);

% limpa a janela
% cria o vetor x
% cria o vetor y1
% observe que para calcular a
% funo y1= seno(x) o comando
% apropriado : y1= sin(x);
% cria o espao e faz o
%grfico [y1 versus x]
% cria o vetor y2
% cria o espao e faz o
%grfico [y2 versus x]
% cria o vetor y3
% cria o espao e faz o
%grfico [y3 versus x]
% cria o vetor y4. Observe
%atentamente como foi feito o %produto
de x por seno(x). Foi
% necessrio acrescentar um ponto
% (.) antes do sinal de multiplicao
% (*) para que o MATLAB entenda % que
no uma multiplicao
% por elementos da matriz [x] pela %
matriz [seno(x)].
% cria o espao e faz o
% grfico [y4 versus x]

Agora est na hora de voce comear a caminhar com suas prprias pernas. Faa os
seguintes melhoramentos no seu trabalho (CONSELHO: Faa uma coisa de cada vez)
1. Coloque os ttulos nos eixos
2. Coloque ttulos aos seus grficos
3. Procure no help os comandos set e get
4. Coloque cores aos seus grficos
5. Mude a espessura das linhas dos grficos
6. Mude a apresentao dos seus grficos; ao inves de linhas contnuas utilize
sinais como (+), (*), etc.
Finalmente, agora, voc deve estar apto a vencer o seguinte desafio:

plote num grfico o valor do volume de uma esfera versus o seu dimetro. Voce deve
assumir o que no foi pedido e fazer o seu grfico com todas as perfumarias: cores, ttulos,
marcas, etc.
EXEMPLO 5.2
a) Deseja-se calcular as duas funes abaixo relacionadas
y1 = seno (x)
y2 = cos(x)
no intervalo 0 < x < 4.
a) Deseja-se, no entanto, apresentar os resultados em um nico grfico.
Para isto, os mesmos passos do exemplo anterior sero utilizados, mas com o uso do
comando hold.
clf;
x=linspace(0, 4*pi,100);
y1=sin(x);
y2=x.*cos(x);

plot (x,y1);hold;plot(x,y2)

% limpa a janela
% cria o vetor x
% cria o vetor y1
% cria o vetor y2. Observe
%atentamente como foi feito o %produto
de x por cosseno(x). Foi
% necessrio acrescentar um ponto
% (.) antes do sinal de multiplicao
% (*) para que o MATLAB entenda % que
no uma multiplicao
% simples da matriz [x] pela matriz
% [cosseno(x)].
% O comando hold permite
% que duas curvas sejam traadas
% no mesmo grfico.

6. OTIMIZANDO O TRABALHO: Programa e Funes


At agora, os trabalhosforam realizados na Command Window e se perda
praticamente tudo o que era feito; mais do que isto, numa sequncia, no se consegue
modificar um comando errado j digitado
Como evitar esta perda de esforo, isto :
- como evitar a repetio de tarefas j realizadas (veja item anterior)

- como repetir um procedimento que utilize os mesmos comandos mas que, a cada vez que
utilizado, feito com valores diferentes (por exemplo, o clculo da funo seno de alfa que
feito a cada instante com um valor diferente de alfa),
- etc.?
Esta otimizao do trabalho feita com a elaborao de um programa que consiste
de uma sequncia lgica de comandos e que utilizada para se atingir um objetivo. Esta
sequncia de comandos elaborada na Command History
Na elaborao de um programa, em geral, se utiliza um novo conceito: a funo.
Estas so rotinas especficas (ou subrotina) que, em geral, se repetem vrias vezes ao longo
do programa.
Como ilustrao considere que se deseja programar um robo para que execute a
seguinte tarefa: entrar na sala de aula e se dirigir at a mesa do professor que fica em frente
ao quadro. A seguinte sequncia de eventos deve ser programada, isto , deve-se elaborar
o programa:
1.
2.

Entrar na sala
Virar de 90 para a direita, isto para o lado em que se

encontra o quadro
3.
Caminhar em linha reta
4.
Calcule a distncia at o quadro
5.
Se a distncia for igual a 1m, pausa.
6.
Virar de 90 para a esquerda, isto , para o lado em que se
encontra a mesa do professor
7.
Caminhar em linha reta
8.
Calcule a distncia at a mesa
9.
Se a distncia for igual a 0.5 m,pare
10. Fim
De uma maneira um pouco mais detalhada, este programa poderia ser elaborado com
a utilizao dos comandos:
1.
2.
3.
4.
5.
6.
7.
8.
9.

Entrar na sala
= Funo virar (90,direita)
= Funo caminhar (reta)
d = Funo distncia (robo,quadro)
Se d = 1.0m, pare
= Funo virar (90,esquerda)
= Funo caminhar (reta)
d = Funo distncia (robo, mesa)
Se d = 0.5m, pare

10.

Fim

Observe que o programa composto por vrias alguns comando simples (entrar na
sala, fim), algus comandos para tomadas de deciso do tipo se (especificar) ento faa
(especificar) e funes (subrotinas):
= Funo virar (ngulo, sentido) esta funo faz o robo virar de um ngulo
e sentido especificados. Esta funo utilizada duas vezes
= Funo caminhar (linha) esta funo especifica como o robo deve
caminhar; no caso em linha reta. Esta funo utilizada duas vezes
d = Funo distncia (robo, objeto) esta funo calcula a distncia do robo
at um objeto especificado. Esta funo utilizada duas vezes.
Verifica-se que funes so composta por um conjunto de comandos pr programados
e que so chamados quando necessrio sem que haja a necessidade de re-programlos
novamente.

6.1.ELABORAO DE UM PROGRAMA: COMMAND HISTORY


Como uma introduo s tcnicas de programao considere o seguinte exemplo.
Com esta finalidade digite o seguinte na Command Window:
x = 1:10;
y=log(x);
plot(x,y)

% gera o vetor x com 10 elementos


% gera o vetor y com 10 elementos
% plota o grfico y =log(x)

e, como era de se esperar, o MATLAB plota o grfico y = log(x).


OBS: note que o comando x = 1:10 representa uma alternativa para o comando
linspace.
Observe que a nossa experincia mostra que: se houver necessidade de se fazer
alguma modificao nos comandos acima, tudo dever ser re-escrito novamente com as
mofificaes necessrias.
Uma alternativa, no entanto, consiste em acessar a janela Command History e
executar as seguintes tarefas:
a) Selecionar
x = 1:10;
y=log(x);
plot(x,y)
b) Clicar com o boto direito do mouse e selecionar Create Script

c) Com este procedimento abre-se uma nova janela, o Editor j com os comandos
selecionados.
d) Se a inteno verificar novamente o resultado, v at a barra de menu e clique em run
(ou no cone contendo um quadrado com um tringulo verde no seu interior)
e) se a inteno criar um programa devemos clicar no cone de salvamento e dar um
nome ao programa. Por exemplo, chamaremos de Programasimples. Pronto quando
quisermos rodar o Programasimples, basta digitar Programasimples na Command
Window.
f) se, no entanto, o desejo seja modificar o Programasimples ou se alguns comandos novos
devem ser adicionados, o caminho consiste em ir para o Editor. Para isto vpara a barra
de menus e escolha a seqncia: file open escolha Programasimples
g) modifique o Programasimples como mostrado a seguir
x = (1:10)
for k = 1:5

y(:,k)=k*log(x)

% gera a matriz coluna [observe o () ao final do


%comando]
% os comandos for end so utilizados para que
% os comandos digitados entre eles sejam
% repetidos 5 vezes. No entendeu? No faz mal,
% voltaremos e este tipo de comandos mais abaixo.
% criamos uma matriz coluna composta por 5
% linhas que representam os vetores y(k), isto :
%
y(1) = 1* log(x)
%
y(2) = 2*log(x)
%
...
%
y(5) = 5*log(x)

end
plot(x,y)
h) qual foi o resultado obtido? Primeiro o MATLAB LISTA o que foi calculado
vetor x, coluna com 10 termos

x=
1
2
...
10
y=
0
0.6931
1.0986
...
2.3026

construindo o vetor y, primeira coluna [y1]

construindo o vetor y, primeira e segunda colunas


[y1
y2]

y=
0
0.6931
1.0986
...
2.3026

0
1.3863
2.1972
...
4.6052
construindo o vetor y, primeira, segunda e terceira colunas [y1
y2
Y3]

0
0.6931
1.0986
...
2.3026

0
0
1.3863
2.1972
...
4.6052

y=

2.0794
3.2958
...
6.9078

Etc.
i) em seguida o MATLAB plota um grfico com 5 curvas y = k*log(x) tendo k como parmetro
j) no esquea de salvar o seu programa para utilizao futura.

6.2. UMA FUNO


Em MATLAB, funes so sinnimos de subrotinas e, como tal, as funes so elaboradas
dependendo das necessidades.
Se uma funo usada frequentemente ento conveniente faze-la e, quando
necessrio, a nica coisa que se tem a fazer chama-las como feito com as funes
trigonomtricas (estas funes trigonomtricas e muitas outras j foram elaboradas pelos
criadores do MATLAB).
Por exemplo, sendo dado o valor de x, para o clculo do valor do cosseno de x, digitase
>> y = cos(x)
e o valor do cosseno de x ficar associado a varivel y.
Duas caractersticas importantes das funes so:
- elas so desenvolvidas numa janela especial
- elas so salvas num espao especial do MATLAB para serem utilizadas
quando necessrio. Quer dar uma olhada?

V at o menu File e escolha Open. O que aparecer nesta janela so as suas funes
(as funes dos desenvolvedores do MATLAB fica em outro lugar); se a sua primeira vez,
provavelmente no existir nenhuma funo neste arquivo.
Para saber o que tem numa funo particular (escolha uma) e s clicar nela que o
seu contedo aparece na tela.
Ao contrrio do que acontece na Command Window, no desenvolvimento de uma
funo, uma linha anteriormente escrita pode ser corrigida e modificada com facilidade.
A estrutura bsica de uma funo mostrada a seguir:
function [f] = nomedafuno(x,y,z,...)
% Comentrios sobre caractersticas da funo: esta funo calcula ...
% Toda linha que vier precedida do sinal de porcentagem (%) vista,
% pelo MATLAB como um comentrio e ignorada.
Comandos especficos
....................
.....................
end
Neste contexto tem-se:
f

o valor da funo

nomedafuno

um nome sugestivo dado pelo autor da funo

x,y,z,...

grandezas que necessitam ser definidas antes de se utilizar a funo.


Estas grandezas sero utilizadas para o clculo do valor da funo.

Observe o comando end no final da funo que necessrio para que o computador saiba
que o final das instrues da funo.
Mostra-se abaixo, como criar uma funo; em seguida, esta funo deve ser gravada
(salva) e utilizada.
Antes, porm, uma flexibilidade adicionada ao Programasimples, criado no item
anterior. Para isto, o programa transformado em uma funo atravs dos seguintes passos:
a) No Editor as seguintes modificaes so introduzidas:
function [y] = funcaosimples(curvas)

% criao da funo

% denominada: funcaosimples(curvas)
% curvasrepresenta o nmero de curvas
% desejadas; a flexibilidade reside no fato de
% se poder escolher o nmero de curvas sem
% ter que modificar a funo; bastaando
% prescrever o valor e associa-lo a grandeza
% parametro.
x = (1:10);
for k = 1:curvas

y=(:,k)=k*log(x);
end
plot(x,y)

%observe o () ao final do comando


% os comandos for end so utilizados para
% indicar ao computador que os comandos
%digitados entre eles sejam repetidos curvas
%vezes.
% a funo log(x) multiplicada por k, k = 1,5.

b) A funo criada deve ser salva


c) Para rodar um exemplo necessrio definir o valor de parmetros. Assim sendo se o
objetivo consiste em traar um grfico com 8 curvas, por exemplo, digita-se, na Command
Windows
>>curvas = 5;
y = funcaosimples(curvas)
e o resultado mostrar um grfico com 5 curvas.
EXEMPLO 6,1:Suponha que se deseja calcular o volume de uma esfera de rio r. Este
clculo ser repetido muitas vezes, o que justifica a criao de uma funo; a funo
volesfera. Como o volume da esfera calculado atravs da frmula
= (4/3) r3
Conclui-se que, para calcular o volume da esfera, basta conhecer uma nica grandeza, o raio
(r). Assim sendo
function [vol] =volesfera(r)

vol = (4/3)*pi*r.^3;

% A funo volesfera calcula o volume % de uma


esfera de raio r. Os
% camandos especficos desta funo
% so escritos como:
% No se esquea de colocar (;) aps
% o clculo de vol; caso contrrio a
% funo sempre retornar duas vezes

% o valor do volume.
% Para fazer o exemplo 9, voce ter
% que colocar o (.) depois do r quando
% for efetuar o clculo do volume. Po
% qu?
end
OBSERVAO: ao terminar de criar uma funo, nunca se esquea de salv-la (veja como
faz-lo abaixo). Se voce no o fizer, ela se perder quando a janela for fechada.
6.2.1. CRIAR e SALVAR UMA FUNO
Como j mencionadoas funes no so criadas na Command Window. Elas possuem
um ambiente prprio o Editor - para serem criadas. Para abrir este ambiente faa
simplesmente:
- no menu FILE escolha New e, em seguida, function.
Uma nova janela se abre e, nela, aparece uma espcie de template para a criao
da funo.
Alternativamente abaixo da primeira linha de menus, temos uma linha com cones.
Escolha a primeira, uma folha em branco, que o efeito ser o mesmo.
OBSERVAO: para que suas funes sejam efetivadas necessrio que voce as salve.
Para isto, a maneira mais intuitiva consiste em clicar no cone de um disquete (terceiro da
esquerda para a direita) da segunda linha, a dos cones acima mencionada.
- no menu FILE voce pode escolher Open para ver quais as funes voce j criou. Escolha
uma delas para voce modificar como lhe for conveniente.
Alternativamente abaixo da primeira linha de menus, temos uma linha com cones.
Escolha a segunda, um arquivo abrido que o efeito ser o mesmo.
OBSERVAO: para que suas modificaes sejam efetivadas necessrio que voce salve a
funo modificada. Para isto, a maneira mais intuitiva consiste em clicar no cone de um
disquete (terceiro da esquerda para a direita) da segunda linha, a dos cones acima
mencionada.
EXEMPLO6.2:Crie e salve a funo volesfera.
6.2.2. UTILIZAR UMA FUNO

A utilizao de uma funo muito simples; voce j o fez. Por exemplo, para calcular
o valor do seno de x, voce fez:
x = 2*pi;
y = cos(x);
disp([x,y])
Este ltimo comando disponibiliza o valor de x e de y na tela do computador.
Da mesma maneira voce pode utilizar o valor do rio e do volume da esfera utilizando a sua
funo volesfera.
ALTERNATIVA 1.Pretende-se calcular o volume de uma esfera, sendo conhecido o seu raio.
Para isto pode-se utilizar a nova funo volesfera.
Digite, inicialmente, o valor do raio:
>>r = 0;

% r= 0 um valor apropriado por a verificao


% imediata.

Em seguida digite:
>> V = volesfera(r)
Qual o valor fornecido pelo computador? Fcil de utilizar uma funo e mais facil ainda foi
verificar se os seus procedimentos foram corretos.
conveniente que voce teste mais vezes a sua funo; assim sendo, que tal testar a funo
com um raio unitrio?
ALTERNATIVA 2.Como alternativa aos procedimentos acima, pode-se utilizar o comando
feval.
Digite o valor do raio:
>>r = 0;
Em seguida, digite
>> v=feval (volesfera,r)
e o resultado obtido deve ser o mesmo.
6.2.3. UMA FUNO QUE RETORNA MAIS DE UMA GRANDEZA

Uma funo pode retornar mais de um valor calculado; por exemplo, se o desejo
consiste em que a funo retorne os valores a e b, por exemplo. Para isto, tem-se que
especificar este fato na elaborao da funo, como mostrado a seguir:
function [a,b] = nomedafuno(x,y,z,...)
Como ilustrao seja a funo media_desvio (x) que retorna o valor mdio e o desvio padro
do conjunto de valores que formam o vetor x. Seja, ento:
function [mean, stdv]= media_desvio(x)
% Esta funo fornece o valor
% mdio e o desvio padrode um vetor x.
n=length(x);
% nmero de componentes do vetor
y=sum(x);
% clculo da soma dos componentes de x
mean = y/n;
% clculo do valor mdio
stdv=sqrt(sum(x.^2)/n - mean.^2);% clculo do desvio padro
end
Tendo salvo a funo a sua utilizao se faz definindo o vetor x, por exemplo
x = [ 1 10 2 9 3 8 4 7 5 6];
e chamando a funo
[m,d]=media_desvio(x)
que retorna:
m = 5.5
d = 2.8723
EXEMPLO 6.2. Suponha que se deseja analisar o comportamento do volume da esfera em
funo do seu raio. Para isto elaborada a funo
[r,V] = verfificador_1(r)
que retornar o valor do raio e do volume da esfera.
function [r, V]= verificador_1(r)

% Esta funo fornece o valor de r e o valor


% correspondente do volume da esfera

V = volesfera(r);
end
6.2.4. UMA FUNO DENTRO DE OUTRA FUNO
Em muitas ocasies torna-se necessrio chamar uma funo dentro de outra funo.

No item anterior, por exemplo, isto foi feito 3 vezes. De fato, na elaborao da funo
media_desvio(x) as seguintes funes (j embutidas no MATLAB) foram utilizadas:
n=length(x)

que retorna o nmero de componentes do vetor x

y=sum(x)

que retorna a soma dos valores das components do vetor x

stdv=sqrt(y)

que retorna o valor da raiz quadrada de y.

Observe que no exemplo 6.4 a funo [r,V]=verificador_1(r) utilizou a funo v =


volesfera (r).
A seguir, mostra-se como programar uma funo que chama outra funo por j
desenvolvida.
Isto ser feito utilizando exemplos bem simples (o que, alis uma prtica muito til
quando se deseja desenvolver algo novo: em situaes anlogas nada melhor do que pensar
e implementar casos bem simples, onde um novo comando utilizado.
Seja a funo V = volesfera(r), j conhecida.
Em seguida, vamos criar uma funo que utiliza no seu interior a funo volesfera (r).
Com esta finalidade desenvolve-se, a seguir, a funo
funo [r,V] = verificador_2(n)
function [r,V] = verificador_2(n)% n = nmero de pares (r,V) que a funo deve
% calcular. Nesta funo, o primeiro valor de r sempre nulo e
% sofre sempre incrementos unitrios.
p=n-1;
r=linspace(0,p,n);
V=volesfera(r);
End
e, obviamente a sua utilizao muito simples: por exemplo
n = 5;
retorna
r=
0

4.1888

33.5103

113.0973

268.0826

V=

7. PROGRAMANDO: A lgica em funcionamento.


Um programa visto como uma sequncia lgica de operaes que so utilizadas
para se atingir um objetivo.
Para ilustrar, o exemplo anteriormente apresentado ser retomado com um pouco
mais de complexidade: pretende-se fazer um robo partir do corredor, entrar na sala de aulas
e caminhar at a mesa do professor. Assim sendo:
1.
2.
3.
4.
5.

Incio da Operao: o robo deve iniciar sua operao em algum ponto do corredor.
Caminhar em Linha Reta(at a porta da sala)
Entrar(na Sala).
Verificar ngulo(de que lado se encontra o quadro)
Virar(de + 90; isto , para o lado em que se encontra o quadro)
6.
Caminhar em Linha Reta(at o quadro)
7.
Verificar ngulo (de que lado se encontra a mesa do
professor)

8.

Virar(de - 90 para a esquerda, i, para o lado em que se

9.
10.
11.

Caminhar em Linha Reta(at 1m de distncia da mesa)


VerificarDistncia (se a distncia for igual a 1m, pausa).
Fim da operao

encontra a mesa)

Observe que algumas operaes exigem que vrios eventos sejam realizados. Por
exemplo:
Evento 2 - Caminhar em linha reta at a porta da sala: o robo sabe apenas que tem que
caminhar em linha reta; quando deve parar? Uma maneira de responder a esta pergunta
consiste em fazer o robo caminhar de uma unidade (por exemplo) e verificar qual a sua
distncia da porta e tomar uma deciso. Isto exige algumas operaes mais simples:
a) calcular a distncia do robo at a porta ()
b) comparar a distncia calculada com o valor zero (0)
c) tomar uma deciso;
- se a distncia for maior que zero
- caminhar mais uma unidade em linha reta
- calcular a distncia do robo at a porta
- caparar a distncia calculada com o valor zero (0)
- tomar uma deciso
Repita esta sequncia at que a distncia seja menor ou igual a zero.
- se a distncia for menor que zero
- caminhe de volta, meia unidade (por exemplo)
Fica a cargo do leitor completar a sequncia !
-...................................................
- se a distncia for igua a zero
- passe para o Evento 3 Entrar na sala
Evento 3 Entrar na sala: o robo deve caminhar em linha reta apenas 30 cm (por exemplo) e
para para uma nova tomada de deciso

Evento 4 Verificar de que Lado se Encontra o Quadro : o robo deve utilizar um de seus
sensores e verificar qual deve ser o valor do ngulo () para o qual ele deve se orientar; no
caso = + 90 (o smbolo + indica para a direita)
Evento 5 Virar de +90 : o robo deve se direcionar para o quadro
E assim por diante.
Deve-se observar, no entanto, que algumas operaes foram realizadas vrias vezes; para
tornar a programao mais eficiente e segura estas operaes so realizadas pelas
funces.Por exemplo:
Funo linha reta () a varivel que indica a distncia a ser caminhada.
Funo girar() a varivel que indica o ngulo de giro do robo
- etc.
Esta sequncia macro de eventos, necessrios para atingir um objetivo, pode ser
ilustrada graficamente com a utilizao
de um diagrama de blocos como ilustrado na figura
INCIO
7.1.
+ 000000000
- 000000000
CAMINHAR
Do acima exposto, fica claro
que antes de comear a programar (mas ns j
comeamos, no mesmo?) necessrio aprender Caminhar
mais alguns comandos e
operaesimportantes (alguns deles
tambm()
j foram utilizados).
CALCULAR

Tomada
de
Deciso

> 0 000000000

:0

< 0 000000000

= 0 000000000
ENTRAR

Entrar

CALCULAR ()
Girar
GIRAR ()

CAMINHAR
Caminhar
CALCULAR ()

:0

FIGURA 7.1
DIAGRAMA DE BLOCOS

7.1. OPERADORES RELACIONAIS


Abaixo apresentada uma Tabela 7.1com os operadores relacionais. Na primeira
coluna tem-se o smbolo utilizado em MATLAB e a segunda coluna a operao
correspondente.
TABELA 7.1: OPERADORES RELACIONAIS
OPERADOR

OPERAO

a < b a menor do que b

<
<=

a b a menor ou igual a b
a > b a maior do que b

>

a b a maior ou igual a b

>=

a = b a igual a b

=
==

a == 4 a igual a 4 (ou qualquer valor numrico


aps uma condicional veja nos comandos de
condicionalidade abaixo)

~=

a ~= b a no igual a b.

A utilizao destes operadores fornece o valor 1 se a operao for verdadeira e 0


se ela for falsa.
Assim, por exemplo, se for digitado
>> a = 5;
>>b = 6;
e, em seguida
>> a < b
obtem-se
ans =
1
Por outro lado se for digitado
>> a>b

obtem-se

ans = 0

Utilizando (como feito anteriormente e como ser visto no item 7.3) os comandos de
condicionalidade, pode-se ilustrar a seguinte sequncia de comandos que pode ser de
grande utilidadea
>> if a<b
>>
a =b
>> end
Obtem-se:
a=6

% se a < B
% ento faa a = b
% fim

7.2. OPERADORES LGICOS


Os operadores lgicos so apresentados na Tabela 7.2. Para compreender o
significado destes operadores considere as matrizes quadradas a, b e c definidas abaixo
1

a= 4

b=

c = 0

TABELA 7.2: OPERADORES LGICOS


OPERADOR

OPERAO

&

and indica unio; por exemplo: se a & b ento ...

or indica interseco; por exemplo: se a (...) | b (...)


ento ...

not indica excluso; por exemplo: se a ~ b ento...

Operador unio: and (&) a & b retorna uma matriz quadrada com a mesma dimenso de
a e b e com valores unitrios (1) nas clulas em que a e b no possuem valores nulos e
valores nulos ( 0 ) nas clulas em que a ou b apresentam valores nulos.
Assim sendo
>>a & b
retorna
1

ao passo que
>>a&c

retorna
1

Operador interseco: or ( | ) a & b retorna uma matriz quadrada com a mesma


dimenso de a e b e com valores unitrios (1) nas clulas em que pelo menos uma matriz a

ou b apresenta valor no nulo e valores nulo (0) nas clulas em que a e b apresentam
valores nulos.
Experimente verificar.
Operador excluso: not ( ~ ) ~a retorna uma matriz com a mesma dimenso de a e com
valores unitrios (1) nas clulas em que o valor no nulo e valores nulos (0) nas clulas em
que o valor nulo.

7.3. COMANDOS DE CONDICIONALIDADE


Em seguida, so apresentados os comandos de condicionalidade; de uma maneira
geral estes comandos so do tipo:
SE
(alguma condio for satisfeita veja operadores lgicos e relacionais)
ENTO
(faa uma sequncia de operaes)
FIM
(termine a sequncia de operaes)
Observe que estes tipos de comandos j foram utilizados no exemplo do rob. Por
exemplo, foi feita a seguinte comparao: SE a distncia do rob at a porta for igual a zero,
ENTO pare; FIM
Observe, em seguida, que o comando acima muito simples e no consegue simular
completamente a situao; para esta necessrio a utilizao de uma estrutura mais
completa, do tipo
SE
(alguma condio for satisfeita veja operadores lgicos e relacionais)
ENTO
(faa uma sequncia de operaes)
CASO CONTRRIO
(se a condio NO for satisfeita veja operadores lgicos e relacionais)
ENTO
(faa uma sequncia de operaes)
FIM
(termine a sequncia de operaes)

7.3.1. ESTRUTURA CONDICIONAL BSICA:


A estrutura de condicionalidade mais bsica composta pelos comandos if e end,
como ilutrado a seguir:
If(seguida de uma expresso lgica (veja tabelas 1 e 2))