Escolar Documentos
Profissional Documentos
Cultura Documentos
http://www.inf.ufes.br/~pet
Sumrio
1 Introduo
1.1 1.2 Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4 4
5
5 5 5 6 6 6
7 10
10 10 11 11 12 12 12 13
13 14 17
17 18
19
19 19 25 27
Grcos 3-D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 Fluxo de Controle
9.1 9.2 9.3 9.4 Loop FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Loop WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comando BREAK
33
33 33 34 34
Comando IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
35 39
1 Introduo
1.1 Matlab
O MATLAB (de MATrix LABoratory) um programa produzido pela Mathworks, Inc. (maiores informaes em
lhar com matrizes e nmeros complexos da mesma forma como uma calculadora trabalha com nmeros reais. Alm disso, ele possui recursos de programao, agindo como uma linguagem procedural, semelhante a C, porm voltada para processamento numrico intensivo. Ele possui tambm programas de projeto de controle e recursos grcos. O MATLAB fornece tambm um conjunto de aproximadamente 200 subprogramas que solucionam problemas diversos tais como: lgebra matricial, aritmtica com complexos, sistemas de equaes lineares, determinao de autovalores e autovetores, soluo de equaes diferenciais, soluo de equaes no lineares, alm de representar e de dar subsdios (sub-mdulo) para a anlise e para sntese de sistemas lineares e no lineares. A interface do MATLAB composta basicamente por uma janela de comandos, com um prompt caracterstico (>>).
1.2 Octave
O Octave uma linguagem de programao de alto nvel, destinada ao tratamento de problemas para computao numrica. ocial do projeto: Ele um Software Livre, produzido por uma Maiores informaes disponveis no site grande equipe cheada por John W. Eaton.
http://www.gnu.org/software/octave/.
O Octave pode efetuar clculos aritmticos com nmeros reais, escalares complexos e matrizes; resolver sistemas de equaes algbricas; integrar funes sobre intervalos nitos e innitos e integrar sistemas de equaes diferenciais ordinrias e diferenciais algbricas. A interface com o programador basicamente atravs de uma linha de comando. Ele ainda gera grcos 2D e 3D, utilizando o Gnuplot. O Octave em grande parte compatvel com o MatLab. Os comandos apresentados nessa apostila servem tanto para Matlab quanto para o Octave. Para iniciar o Octave, apenas digite
octave
no termnial do Linux.
2.1 Soma
A operao "a + b"realiza a soma entre dois escalares. O exemplo 1 exibe sua execuo.
> > 3 + 5
ans
= 8
2.2 Subtrao
O operador - responsvel pela subtrao. O prximo exemplo mostra esta operao.
> > 4
ans
2.3 Multiplicao
Para realizar a multiplicao de dois escalares utiliza-se o operador "* ", conforme o exemplo abaixo.
> > 7
ans
= 14
> > 18
ans
= 3.6000
> > 10
ans
= 0.5000
2.6 Exponenciao
Para efetuar
ab
a exponenciao de escalares.
> > 9 ^ 3
ans
= 729
3;
6;
9];
2 5 8
3 6 9
Um vetor nada mais que uma matriz com uma de suas dimenses igual a 1, assim ele pode ser criado da mesma forma que uma matriz. No exemplo 8, tem-se um vetor-linha de dimenso 3, ou seja uma de uma matriz 1x3:
3];
[1;
2;
3];
5 6 7 8
1 2 3 Vale destacar que, da forma como foram apresentados a matriz ou o vetor, eles so armazenados na memria do programa, mas se quisermos que eles apaream na tela, ou seja, visualizar o contedo da varivel, devemos omitir o ponto-e-vrgula depois dos colchetes. Depois que o vetor criado, pode-se alterar um elemento acessando diretamente a sua posio. Observe o exemplo a seguir:
3];
No comando v(2) = 0, v o nome da varivel vetor e 2 a posio cujo valor deve ser alterado, no caso para 0. Pode-se tambm acessar uma posio inexistente no vetor. Nesse caso, as posies que no existiam at a posio acessada so automaticamente anuladas. O exemplo 11, mostra o que acontece quando acessada a posio 5 do vetor do exemplo anterior.
Repare que a nova dimenso do vetor agora 5, exatamente a posio que no existia antes do acesso, e que a posio 4 foi preenchida com 0, pois no existia antes do acesso a uma posio inexistente do vetor. Uma operao interessante criar uma matriz usando uma j denida. No exemplo 12, a matriz z composta de trs elementos, sendo que um deles uma matriz 1xn, ou vetor linha.
Exemplo 12: Criando uma matriz com um vetor linha como elemento
1 2 3 4 5 6
v];
A matriz resultante uma matriz coma a dimenso 7, que devido aos dois elementos no pertencentes ao vetor v mais a dimenso deste, que 5.
7 6
2; 4;
3 0
11 1
9; 0; 2
1 5
10]; 12];
ans
= 11 3 3 13 12 5 6 9 22
> > A B
ans
5
3
1 10
2
9
Vale lembrar que, caso as matrizes envolvidas sejam de dimenses diferentes, o programa acusar erro.
> > 5 A
ans
= 15 15 35 55 10 45
10
50
> > AB
ans
= 28 42 28 35 74 56 36 120 124
4 3
0; 1;
3 10
6 8
4; 3;
0 4
9 9
2]; 8];
ans
0.2583
0.0083
0.2750
0.3167
11
ans
= 1.92000 0.44667
0.38667
1.41333
2.88000
2.28000
0.25333
1.18667
1.14667
10
3;
6;
4];
ans
cij
Observe o exemplo
> >
[7 = 56
2].[8
3]
ans
12
45
12
ans
= 1 10 3 0 9 6 5 5 4
5 Razes reais
Para se encontrar as razes reais de um polinmio, basta utilizar a funo
roots( v ), que
retorna em um vetor coluna, as razes de um polinmio, cujos coecientes das potncias em ordem decrescente so os elementos do vetor v. No exemplo 21, as razes do polinmio x2 + 3x 4 so -4 e 1.
1 2 3 4 5 6
> >
roots (
=
4]
ans
4
1
13
. . .
Figura 1:
Sistema Ax = b
\
b
ou x = inv(A)*b. Ambos os comandos fazem a diviso de b por A ou a multiplicao da Na resoluo de sistemas lineares por mtodos iterativos, interessante determinar se a soluo converge. Nesse caso, deve-se considerar os autovalores da matriz A. A seguir, alguns comandos teis na resoluo de sistemas lineares. exemplos, considere a seguinte matriz: A = [1 2 3; 4 5 6; 7 8 0]; Nos prximos
1 2 3 4 5 6 7
inv( A ): Calcula a inversa da matriz quadrada A; 1 Exemplo 22: Clculo da inversa de uma matriz > > inv ( A ) ans
=
1.7778
1.5556
0.8889
0.1111
0.2222
0.7778
0.2222
0.1111
0.1111
1 Uma
1 2 3 4 5 6 7
> >
eig (
=
ans
12.1229
0.3884 5.7345
[V, D] = eig( A ):
matriz A, de forma que A*V = V*D. A matriz D a forma cannica de A menos uma matriz diagonal com os autovalores de A na diagonal principal. As colunas da matriz V so os auto-vetores de A;
1 2 3 4 5 6 7 8 9 10 11 12 13
> > V =
0.7471
0.6582
0.2763 0.3884
0.8791
0.0931
0 0
0.3884
0
5.7345
1 2 3 4 5
det( A ): Calcula o determinante da matriz A; Exemplo 25: Clculo do determinante de uma matriz > > det ( A ) ans
= 27
1 2 3 4 5 6 7
> >
fliplr (
= 3 6 0
ans
2 5 8
1 4 7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
> > L =
[L,
U,
0 1.0000 0.5000
0 0 1.0000
P = 0 1 0 0 0 1 1 0 0
16
7 Interpolao polinomial
Em muitas situaes, deseja-se extrair informaes de uma tabela ou derivar/integrar uma funo complexa. Nesse caso, pode-se fazer uma interpolao de um polinmio de grau funo num ponto no tabelado.
n pontos e obter-se n-1, para aproximar uma funo em estudo ou calcular o valor da
Figura 2:
Sistema Ax = b
No MATLAB,
em que os elementos so potncias do vetor v, de forma que, A(i,j) = v(i)(n-j). O exemplo 28 mostra como utilizar o comando.
1 2 3 4 5 6 7
> >
vander
= 4 9 16
ans
2 3 4
1 1 1
matriz de Vandermonde no formato correto. O prximo exemplo mostra como encontrar a matriz de Vandermonde do vetor [2; 3; 4], no formato conhecido:
> >
f l i p l r ( vander (
17
2 3 4 5 6 7
ans
= 1 2 4 1 3 9 1 4 16
p = poly( r ):
Retorna um vetor p de coecientes do polinmio cujas razes so O MATLAB apresenta polinmios como vetores-linha com os
os elementos de r.
coecientes em ordem decrescente de potncias. Assim, no exemplo 30 o polinmio 4 3 2 encontrado x 10x + 35x 50x + 24;
1 2 3 4 5
> >
poly (
= 1
ans
10
35
50
24
p = polyt( x, y, n ):
o prximo exemplo.
aproxima da funo que se ajusta aos pontos (xi, yi), dado pelos vetores x e y. Veja
1 2 3 4 5
> >
polyfit (
= 1.0000
ans
3.0000
4.0000 x2 + 3x 4.
18
Figura 3:
Eixos cartesianos
plot( x, y ):
varivel dependente;
plot( x, y, z, w ):
mentos). O MATLAB seleciona linhas diferentes para cada grco; No exemplo 32, so gerados dois grcos. Um deles referente ao par de vetores [1, 2, 3] e [4, 3, 6] e outro, ao par [1, 2, 3] e [5, 7, 6]. Os grcos podem ser vistos na gura 4.
> >
plot (
19
Figura 4:
semilogx( x, y ):
No exemplo 33 gerado um grco no qual o vetor [1, 2, 3] est na escala logartmica e [5, 4, 6] na linear. O grco gerado est na gura 5.
> >
um eixo na escala logartima signica que o grco apresenta o log10 dos valores fornecidos para aquele eixo.
20
2 Ter
Figura 5:
semilogy( x, y ): loglog( x, y ):
Um grco no qual os vetores [1, 2, 3] e [5, 4 6] esto na escala logartmica est na gura 6. O exemplo 34 o comando utilizado para gerar tal grco.
> >
21
Figura 6:
Comandos auxiliares
title( 'texto' ):
Comando para adicionar um ttulo (texto) ao topo do grco; Escreve uma legenda no eixo x; Escreve uma legenda no eixo x; Escreve um texto no ponto (x,y). Se x e y so vetores, o
texto escrito a cada ponto; Escreve um texto no ponto determinado pela posio do mouse
22
indicada por pos, que podem ser: north, south, east, weast, northeast, northwest,
Adiciona grades no grco plotado; Retira as grades do grco corrente; Usa-se para plotar outro grco na mesma gura. Este
hold on e hold o :
sobrepor os grcos.
comando mantm o grco antigo at que o hold o seja usado. Assim, consegue-se
axis(v):
faixa de valores determinada pelo vetor v. O vetor tem como elementos os valores mnimo e mximo dos eixos x e y ([xmin xmax ymin ymax]).
axis 'parmetro':
grco em quadrada ou cbica. Se for 'tight', ela ajusta a regio de acordo com os dados. E se for 'normal', ela remove qualquer ajuste denido e ajusta o grco da melhor forma possvel.
plot ( x, y, 'parmetro' ):
tipo de linha, de marcador e de cor, que se deseja aplicar ao grco. No h ordem especca para a combinao dos parmetros nem necessrio determinar os trs. A tabela 1 exibe os tipos de parmetros que podem ser utilizados no comando plot para o MATLAB. J os parmetros para o comando plot no Octave so mostrados na tabela 2.
Cores
amarelo azul
Linhas
slida
Marcador
ponto quadrado crculo cruz X estrela tringulo
y b c w r k m g
-. :
. S 0
+
X *
tringulo invertido
3 Para
maiores informaes sobre os tipos de parmetros aceitos por axis, digite help axis no terminal.
23
Cores
azul branco ciano preto roxo verde vermelho
Linhas
slida
Marcador
cruz quadrado crculo
b w c k m g r
3 6 5 0 4 2 1
+
s o V X *
apenas pontos
No prximo exemplo, so criados dois grcos numa mesma gura, um para o seno (linha ponteada vermelha e com pontos marcados com
+)
/4, /2 e 3 /4 e .
e o ttulo do grco.
1 2 3 4 5 6 7
> > > > > > > > > > > > > >
Exemplo 35: Grcos do seno e do cosseno em uma mesma gura x = 0 : pi / 4 : pi ; plot ( x , sin ( x ) , ' r ' , x , cos ( x ) , ' b ' ) legend ( ' s e n o ' , ' c o s s e n o ' , ' l o c a t i o n ' , ' s o u t h w e s t ' ) t i t l e ( ' seno e cosseno ' ) xlabel ( ' e i x o x ' ) ylabel ( ' e i x o y ' ) grid on
24
Figura 7:
25
Figura 8:
No exemplo 36, esto os comandos para gerar o grco, em coordenadas polares, r = sin(2*t)*cos(2*t). O grco obtido est na gura 9.
1 2 3
Exemplo 36: Grco em coordenadas polares t = 0 : . 0 1 : 2 pi ; polar ( t , sin ( 2 t ) . cos ( 2 t ) , 'r ' ) t i t l e ( ' coordenadas p o l a r e s ' )
26
plot3( x, y, z ):
para gerar o grco (x, y, z)=(sen(t), cos(t), t). A gura 10 o grco obtido.
1 2 3 4
27
mesh( x, y, z ):
gerar grcos de funes de duas variveis. O primeiro passo para plotar uma funo de 2 variveis z=f(x,y) gerar matrizes x e y contendo linhas e colunas repetidas, respectivamente, para funcionarem como o domnio da funo. A funo a funo de 2 variveis.
dois vetores em duas matrizes x e y. Essas matrizes ento so usadas para avaliar O exemplo 38 gera o grco referente funo f(x,y) =
sen(x2 +y 2 ) 2 (x2 +y 2 ) 2
1
O comando
1 2 3 4
A gura 11 o grco gerado no exemplo anterior. A m de serem visualizadas as grades, a gura foi editada para um marcador do tipo ponto.
28
contour( z, w ):
x e y, e w for uma constante, o resultado a projeo de um grco 3D no plano xy com w curvas de nvel. O exemplo 39 gera a gura 12, que o contorno em 2D da funo do exemplo anterior.
> >
contour (
29
contour3( x, y, z, n ):
gerar tal contorno.
Na gura 13
> >
contour3 ( x ,
30
surf( x, y, z ): surf (
gerada pelo comando do exemplo 41. O grco obtido est na gura 14.
> >
31
surface( x, y, z ):
42 gera a gura 15, que o contorno 2D do grco 3D da funo do exemplo 38. A cor de cada ponto do grco proporcional ao valor que ele possui. Isso feito distribuindo-se cores para as faixas de valores assumidos pela funo.
> >
surface (
32
9 Fluxo de Controle
O MATLAB possui comandos de programao parecidos com os encontrados na maioria das linguagens de programao, tais como C, C++ e JAVA.
for, a partir de uma condio inicial, enquanto no atingida a condio de Exemplo 43: Comando for
parada, uma seqncia de instrues deve ser executada. O exemplo 43 mostra o uso do
for.
1 2 3 4
> > v( w(
for
i i
i =1:5 i ; i );
) =
end
) = 2 v (
No exemplo anterior, o vetor v obtido [1, 2, 3, 4, 5] e w igual a 2*v. Uma importante observar que se deve sempre nalizar um loop
end. Pode-se utilizar mais de um loop dentro de um loop, mas deve-se lembrar que cada for deve ter seu prprio end.
Pode-se, tambm, fazer com que o incremento seja um valor diferente do unitrio, conforme o prximo exemplo.
1 2 3
> >
for
i
end
v(
) =
while permite que uma ou mais linhas de comando sejam executadas um nmero Exemplo 45: Comando while
indenido de vezes, atravs do controle de uma condio lgica. Veja o exemplo 45.
1 2 3 4
while
x<3
33
5 6
end
x = x +1;
No exemplo 45, as linhas de comando so executadas repetidamente at que x seja igual a 3. Assim, o valor nal obtido para y 10.
while.
tal como um
for ou
9.4 Comando IF
No comando
if, se uma expresso lgica satisfeita uma seqncia de comandos execuif e break. Exemplo 46: Comandos if e break
tada, caso contrrio uma outra seqncia ser executada. O exemplo abaixo ilustra a utilizao dos comandos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
6 1
5];
if
while
v( i
= 1; )<0
break , else
v(
),
end
end ans
i +1;
= 1
ans
= 6
ans
= 3
No exemplo anterior, so impressos os elementos do vetor v at que seja encontrado um elemento negativo.
34
1 2 3 4 5 6 7 8
x = y =
plot ( x , y , t i t l e ( ' seno ' xlabel ( ' e i x o ylabel ( ' e i x o grid on pause
Na ltima linha existe o comando pause. Ele responsvel por parar a execuo dos comandos at que alguma tecla seja pressionada. Existem duas maneiras de executar um arquivo .m. A primeira , j no Octave / Matlab, escrever o nome do arquivo, sem necessidade de escrever a extenso .m, porm, necessrio que voc j esteja na pasta onde se encontra o script a ser executado. No exemplo 47, ao ser digitado
que pode ser visto na gura 16, e as variveis x e y cam mantidas no espao de trabalho.
35
Figura 16:
A segunda maneira de executar um arquivo .m passando-o como parmetro ao abrir o octave. Por exemplo, digitando-se script seno.m. Note que se no
octave seno.m, o octave ser aberto j executar o houvesse o comando pause na ltima linha do script, o
octave seria aberto, as instrues do script seriam executadas e logo em seguida o octave seria fechado, juntamente com o grco gerado, no dando tempo para ver os resultados. Para fazer comentrios em um script, coloque % no comeo da linha. No exemplo 48, os textos %gera o graco de seno de x, % O titulo do graco seno e % usado para conseguir visualizar o grco so ignorados pelo interpretador.
1 2 3 4
x = 0: y =
%gera o g r a f i c o de seno de x
pi / 8 : 2 pi ; sin ( x ) ;
x , y ,
plot (
' r :+ '
36
5 6 7 8 9
t i t l e ( ' s e n o ' ) % O t i t u l o do g r a f i c o seno xlabel ( ' e i x o x ' ) ylabel ( ' e i x o y ' ) grid on pause % usado para c o n s e g u i r v i s u a l i z a r o g r f i c o
Outros dois comandos muito usados em scripts so o
echo
e o
disp.
O echo serve para denir se as linhas digitadas no script devem ser exibidas ou no. No Exemplo 49, o echo no usado, fazendo com que somente a matriz C seja exibida na tela, por no conter o ponto e vrgula no nal do comando de multiplicao.
1 2 3 4 5 6
%matriz A %matriz B
B = [1 4 C = AB A = [1 2 3; 7; 4 2 5 5 6; 8; 7 3 8 6
%m u l t i p l i c a o de A por B
1 2 3 4 5 6 7 8 9 10 11
+ + +
%matriz A %matriz B
4 2 3; 7; 4 2 5 5
+ A = [1
+ B = [1
%m u l t i p l i c a o de A por B
echo o
1 2 3
echo
4 5 6 7 8 9 10
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y = [1
roots
2 (y)
8];
echo
A =
off
sqrt
on
(5820);
1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ + + + +
echo
+ y = [1
roots ans =
echo
off
Como o comando
A = sqrt (5820);
no nal da linha, ele no foi exibido quando executou-se o script. O comando disp ('texto') serve para imprimir na tela a string que passada como parmetro. Tambm podemos passar como parmetro alguma varivel ou constante usada no programa. Exemplo 54. No Exemplo 53 mostrado o uso do disp e podemos ver sua sada no
1 2 3 4 5 6 7
disp disp
pi )
de
pi
' );
alguma
tecla
para
continuar
... ')
cos ( x ) ;
[0:0.01:10];
38
script
pi
alguma
o c t a v e :2 >
1 2 3 4 5 6 7 8 9
function
for
length (
velho_vetor i +1 ) = 0
); ( i );
i =1:N1 ) = velho_vetor ;
end
novo_vetor ( ( 1
novo_vetor
Alguns comentrios sobre arquivos do tipo funo: - A primeira linha declara o nome da funo e os parmetros de entrada e a varivel de sada. - necessrio que o arquivo .m tenha o mesmo nome da funo criada. - O smbolo % indica que o restante de uma linha um comentrio e deve ser ignorado. - As primeiras linhas comentadas descrevem o arquivo-M e so mostradas quando voc digita help
<nome
- As variveis criadas dentro do escopo da funo no aparecem no espao de trabalho. A existncia do arquivo do exemplo 55 dene uma nova funo chamada shift, que usada como qualquer outra funo do MATLAB. Veja o prximo exemplo.
39
4]; v )
shift (
40