Você está na página 1de 13

Matlab para leigos e desinteressados: uma introduo simples com exemplos banais ca

Rodrigo S. Portugal portugal@ige.unicamp.br Departmento de Geologia e Recursos Naturais Instituto de Geocincias e UNICAMP

Voc pode estar estranhando o t e tulo, mas a verdade que este texto se destina `s e a pessoas que so obrigadas a aprender Matlab ou pela imposio de um orientador ou para a ca alguma disciplina, ou por qualquer outro motivo. Eu acho que num primeiro momento estas pessoas no esto to interessadas assim em aprender, mas, sim, apenas tentando cumprir a a a uma tarefa. Outro pblico so aqueles que se interessam timidamente, mas sempre tm u a e receio em se envolver com mquinas, algoritmos e programas. a Percebi que para todo este pblico faltava algo ainda mais introdutrio que os tutoriais u o que circulam pela internet. Voc ainda pode pensar que este texto uma soluo muito e e ca paternalista para estes desamparados. Se este for o seu caso, ento no leia, voc no est a a e a a entre este pblico. Por outro lado, se voc sente que h um pingo de verdade no que disse, u e a est desesperado ou no sabe por onde comear, v em frente, leia o texto. Seja bem-vindo a a c a ao mundo do Matlab!

Introduo ca

O Matlab (do ingls, Matrix Laboratory) um programa interativo que se e e destina a clculos numricos e grcos cient a e a cos. Seu ponto forte est na manipa ulao e clculos matriciais, como por exemplo, resoluo de sistema lineares, clculo ca a ca a de autovalores e autovetores, fatorao de matrizes, entre outros. Alm disso, muitas ca e funes especializadas j esto internamente implementadas, de modo que em muitos co a a casos no h a necessidade de se construir muitas coisas. a a Outros dois pontos fortes do Matlab so a criao e manipulao de grcos a ca ca a cient cos e a possibilidade de extenso por meios de pacotes comerciais ou escritos a pelo prprio usurio. Em geral o usurio e a funcionalidade do Matlab crescem o a a juntos, pois com o tempo, ele comea a escrever suas prprias funes, agregando c o co capacidades espec cas. Isto faz com que, aos poucos, o Matlab comece a mimetizar, ou at mesmo suplantar, softwares cient e cos espec cos de diversas reas. a Uma caracter stica interessante que o Matlab muito mais fcil de aprender e e a do que as linguagens cient cas convencionais, tais como C e Fortran. Entretanto, quanto maiores e mais complexas as rotinas e funes da biblioteca, pior ca a sua co performance quando comparada ` sua equivalente em C e/ou Fortran. a Este documento se destina ao usurio iniciante, para quebrar o gelo entre ele e o a Matlab, na promessa de uma parceria duradoura. Em nenhum momento este texto servir de manual, uma vez que outros bem mais completos esto dispon a a veis nas bibliotecas, livrarias e na internet tambm. Finalmente cabe dizer que os exemplos e aqui apresentados foram testados na verso 6.5 do programa, sendo assim, apesar de a uma quase certeza, no h garantias de que iro funcionar em verses diferentes. a a a o

Comandos bsicos e grcos simples a a

Nesta seo so apresentados os comandos mais bsicos para insero e manipca a a ca ulao de dados, bem como comandos para se criar os mais simples grcos. Alm ca a e disso so abordados as representaes de nmeros, vetores e matrizes ` luz do para co u a adigma do Matlab. De fato, esta seo cr ca e tica, pois nela que vamos realmente e quebrar o gelo.

2.1

Modo interativo

Logo que o Matlab inicia, h uma tela de para entrada de comandos. Esta tela a est no modo interativo (parecido com MS-DOS, lembra?), onde o computador ca a

esperando um instruo no lugar marcado pelos s ca mbolos >> (em ingls chamado de e prompt). Assim que o usurio digita o seu comando, ele deve naliz-lo apertando a a a tecla <enter>, como se tivesse mandando o Matlab efetuar a instruo da linha. ca Eis alguns exemplos para o leitor praticar, no se esquecendo de digitar a tecla a <enter> ao nal da linha:
>> x = 1 x = 1 >> y = 2 y = 2 >> z = x + y z = 3 >> w = x * y w = 2

A mensagem de sa logo aps a entrada da instruo `s vezes util, mas pode da o ca e a car aborrecendo em muitas outras ocasies. Para suprim o -la, basta inserir um pontoe-v rgula (;) ao nal da instruo, do mesmo modo que nos exemplos abaixo ca
>> >> >> >> x y z w = = = = 1; 2; x + y; x * y;

No modo interativo, extremamente recomendvel que o usurio iniciante guarde e a a os comandos (e os resultados) que foram inseridos em uma sesso. Aos invs de a e escrever tudo em uma folha de papel (o que pode ser muito util tambm), o usurio e a pode requisitar ao Matlab que guarde tudo em um arquivo. Basta entrar com o comando 3

diary <nome_do_arquivo.txt>

que ir guardar todos os comandos subseqentes at o nal da sesso. a u e a Finalmente, para sair do Matlab usando o modo interativo, basta digitar exit.

2.2

Pedindo ajuda

Certamente o comando mais bsico que todo usurio deve conhecer o help. a a e Este comando o companheiro nas horas mais ingratas, quando tudo d errado. e a Muitas vezes achamos que sabemos usar um comando (ou programa) at o momento e em que as coisas do errado mesmo. Muito depois de quebrar a cabea, usando o a c famoso mtodo da tentativa e erro, lembramos de usar o help e aprendemos a maneira e realmente correta de usar o tal comando problemtico. Sendo assim para aprender a como se usa um comando em Matlab, basta digitar na linha de comando
>> help <nome_do_comando>

ou ainda consultar o manual. Por exemplo, como j vimos alguns comandos, voc a e pode tentar fazer
>> help help >> help diary >> help exit

e ver o que acontece. Outra maneira de pedir ajuda, que, por incr vel que parea, funciona melhor, c pedir dicas ao colega sentado ao lado. Depois de um tempo, prepare-se pois vai e acabar tirando a dvida de algum :) . u e

2.3

Matrizes, matrizes, matrizes

O paradigma do Matlab que tudo so matrizes. Um nmero uma matriz e a u e de um por um, um vetor de n nmeros uma matriz de n por um e strings (cadeias u e de caracteres) so matrizes caracteres. Existem outros exemplos mais complexos que a no valem a pena serem citados neste momento, porm, para quem ainda no xou a e a a idia, exite um velho ditado que diz e

Tudo no Matlab so matrizes. a


Para vericar este fato, observe o que o comando whos dispe na tela, logo aps o o o exemplo da Seo 2.1: ca 4

>> x = 1; >> y = 2; >> z = x + y; >> w = x * y; >> whos Name Size w x y z 1x1 1x1 1x1 1x1

Bytes 8 8 8 8

Class double double double double array array array array

Grand total is 4 elements using 32 bytes

Sem entrar em detalhes, observe que a sa do comando whos exibir um da e sumrio das vriaves que esto guardadas na memria, descrevendo quais so as a a a o a suas dimenses, quantos bytes gastam e de qual tipo pertencem. Do exemplo acima o podemos concluir que todas as variveis so escalares (ou matrizes 1x1, no entedia a mento do Matlab), gastam 8 bytes cada uma e so reais (double). Para aprender a mais sobre o comando whos digite
>> help whos

2.4

Exemplos

Para xar os conceitos apresentados at aqui, acho que vale a pena o leitor testar e os seguintes exemplos 1. Criando uma matriz 4 3 (4 linhas e 3 colunas). Cada linha separada por e um ponto-e-v rgula e cada entrada separada por uma v e rgula
>> A = [1, 2, 3; 1, 4, 7; 2, 6, 1; 4, 5, 0]

2. Criando uma matriz 2 4 com todas as entradas iguais a um


>> O = ones(2,4)

3. Criando uma matriz 4 4 nula


>> Z = zeros(3,4)

4. Criando uma matriz identidade 3 3 5

>> E = eye(3)

Uma vez que os exemplos acima foram testados, os comandos abaixos podem ser inseridos (observe que o texto aps o caracter % no precisa ser digitado) o a
>> >> >> >> >> >> >> >> C D F G T M P a = = = = = = = = 2*A [3, 4, 5; 1, 6, 3; 2, 2, 9; -1, 0, 17] A + D A - D G F * T inv(M) det(P) % % % % % % % % multiplicacao por escalar inserindo uma nova matriz adi~o de matrizes ca subtra~o de matrizes ca transposta de matriz multiplica~o de matrizes ca inversa de matriz determinante de matriz

2.5

Quero plotar uma funo, o que o fao? ca c

Existem duas maneiras de gracar uma funo. A mais simples usar o comando ca e fplot. Basicamente, voc deve fornecer como primeiro argumento a funo que e ca pretende usar entre apstrofes e como segundo o intervalo sobre o qual a funo ser o ca a gracada. Para xar a idia, seguem alguns exemplos: e
>> fplot(sin(x),[ -pi, pi]) >> fplot(x^2+3, [ -1, 2]) >> fplot(sin(x),[ -0, pi]) % % %

Existem outras opes que podem ser vericadas com help fplot. co A outra maneira, mais dif porm mais ex cil, e vel, usa o paradigma de que tudo em Matlab so matrizes. Neste caso, considera-se somente uma verso discretizada a a da funo. Mas anal, o que uma discretizao de uma funo? Para responder a ca e ca ca essa pergunta temos que dar uma paradinha e explicar esse conceito. 2.5.1 Discretizao de funes ca co

Basicamente uma discretizao de uma funo qualquer f (x) quando uma ca ca e seqncia de nmeros gerados a partir de outra seqncia de nmeros usando a ue u e ue u prpria funo como a regra para a gerao. A seqncia ` qual ser aplicada a funo o ca ca ue a a ca chamada de dom discretizado e a outra seqncia de imagem discretizada. Para e nio ue que tudo corra bem, no entanto, h a condio de que todos os nmeros do dom a ca u nio discretizado sejam distintos. Se existir repetio, ainda vai funcionar para todos os ca efeitos, mas no mais uma funo, outra coisa que est fora do escopo desta a e ca e a introduo. ca

Por exemplo se a funo f (x) = x2 , podemos considerar a seqncia de nmeros ca e ue u xn = [2, 1, 0, 1, 2, 3, 4] e quando aplicamos a funo f a cada um dos nmeros de xn geramos outra seqncia ca u ue de nmeros a saber: u yn = [4, 1, 0, 1, 4, 9, 16]. Se ns juntarmos as duas seqncias em pares, ento obtemos uma discretizao da o ue a ca funo ca [(2, 4), (1, 1), (0, 0), (1, 1), (2, 4), (3, 9), (4, 16)] Resumindo, discretizao quando uma funo aproximadamente descrita por ca e ca e vrios pares ordenados (xn , yn ), onde os xn so todos distintos e, de preferncia, mas a a e no necessariamente, ordenados de forma crescente. a Pode-se notar, portanto, que um vetor (geralmente muito grande) pode representar uma discretizao de uma funo, quando o dom ca ca nio, isto , a seqncia de e ue nmeros a qual ser aplicada a funo, o conjunto de nmeros naturais. u ` a ca e u De outra forma, uma funo discretizada deve ser representada por dois vetores ca com a mesma dimenso (geralmente grande), onde um representa o dom a nio discretizado e o outro a imagem discretizada. Uma vez que o leitor j entendeu o que uma discretizao, falta ainda a exa e ca plicao de uma capacidade espec ca ca que o Matlab possui em realizar operaes co com vetores, as chamadas operaes elemento-a-elemento (elementwise), vistas a co seguir. 2.5.2 Operaes elemento-a-elemento (eae) co

Para multiplicar duas matrizes, necessrio que as as dimenses sejam come a o pat veis, como no exemplo A(35) B(51) = C(31) . O leitor pode conferir que o nmero de colunas da matriz ` esquerda (A) igual ao u a e nmero de linhas da matriz ` direita (B), satisfazendo a condio para a multiplicao u a ca ca entre matrizes. Por outro lado, no possivel realizar a multiplicao de duas matrizes com mesma a e ca dimenso m n, com m = n, como por exemplo (m = 5 e n = 3) a A(53) B(53) = ?? Imposs ! vel

Outra coisa imposs de se fazer a diviso de uma matriz por outra, no imporvel e a a tando quais sejam as dimenses o A(mn) = ?? B(pq) Imposs ! vel

Esta operao causa graves problemas de sade em professores quando alunos insistem ca u em realiz-la. a Contudo, para matrizes que possuam as mesmas dimenses, digamos m n, o e poss denir o que se chama de operao elemento-a-elemento (eae), incluindo a vel ca multiplicao-eae e diviso-eae. Para que isso funcione, no Matlab, basta voc fazer ca a e o seguinte: use o sinal de ponto do lado esquerdo da operao desejada (sem espao ca c entre os s mbolos). Multiplicao-eae ca
>> A = B .* C

Diviso-eae a
>> A = B ./ C

Potenciao-eae ca
>> A = B .^ C

Para xar a idia das operaes eae, vale a pena testar os comandos abaixos e co
>> >> >> >> >> A D F G T = = = = = [3, 4, 5; 1, 6, 3; 2, 2, 2; -1, 1, 2] [2, 0, 4; 0, 1, 6; 4, 1, 0; -1, 0, 7] A .* D D ./ A G .^ A % % % % % inserindo uma nova matriz inserindo uma nova matriz multiplica~o eae ca divis~o eae a potencia~o eae ca

2.5.3

Criao de funes mais complexas ca co

Dado essa grande quantidade de ferramentas eae e os conceitos de discretizao, ca poss unir esses dois mundos para criar funes (discretizadas) bem complexas e vel co no Matlab. Por exemplo, suponha que desejamos criar uma funo polinomial do quinto grau ca f (x) = 0.1x5 + 40x3 2000x 5 para examinarmos o seu grco. Como devemos proceder? a Em primeiro lugar devemos denir o dom discretizado como o comando linspace nio 8

Figura 1: Grco da funo polinomial a ca


>> x = linspace(-20, 20, 100);

que quer dizer o seguinte: o vetor x ter 100 elementos, onde o primeiro 20 e o a e ultimo 20, e os intermedirios esto igualmente espaados. e a a c Depois deve-se criar o vetor que vai representar a imagem da funo discretizada ca
>> y = -0.1*(x.^5) + 40*(x.^3) - 2000*(x) - 5;

Para, nalmente, plotar o grco da funo discretizada, utilizamos a ca


>> plot(x,y)

cujo resultado pode ser conferido na Figura 1.

2.6

Operaes com escalares, uma pequena exceo co ca

Rigorosamente falando, imposs e vel somar uma constante (que uma matriz e um por um, lembra?) a uma matriz qualquer de dimenses maiores do que um, o anal de contas as dimenses no batem. No entanto o Matlab permite este o a abuso entendendo que se deseja somar a constante a todas as entradas da matriz. Isto funciona para todas as outras operaes, tais como subtrao, multiplicao e co ca ca diviso, entre outras. Entretanto, o leitor deve tomar cuidado, pois isso no funciona a a com a potenciao. ca Para vericar esta propriedade, teste os seguintes exemplos
>> >> >> >> A B C D = = = = [1, 5 + 2 * 0.5 2, 1; 0, 1, 2; 1; 3; 0] A A - A

3
3.1

Exemplos avanados c
Curvas planas

Comandos abordados: help(), linspace(), plot(), sin(), cos() A forma paramtrica de uma curva plana pode ser descrita atravs do seguinte e e par de funes co x = f (t) : (1) y = g(t) onde t um parmetro real que assume valores em um intervalo [a, b] e f (t) e g(t) e a so funes quaisquer. Quando t = a, o ponto (xa , ya ) = (f (a), g(a)) o in da a co e cio curva e quando t = b, o ponto (xb , yb ) = (f (b), g(b)) o nal da curva. e Para xar a idia, examine os seguintes exemplos: e 1) 2)
x = t + sin(2t) 1 : y = t + 2 cos(5t) x = cos(t) cos(80t) sin(t)

2 : y = 2 sin(t) sin(80t);

Finalmente, para exibir as curvas acima, so necessrios os seguintes comandos a a abaixo (observe que o comentrio aps o % no necessita ser digitado) a o a Curva 1
>> >> >> >> >> t = linspace(0,10*pi,1001); x = t + 3*sin(2*t); y = t + 5*cos(5*t); figure(1) plot(x,y) % % % % % gera o domnio discretizado coordenadas x da curva discretizada coordenadas y da curva discretizada aciona uma janela grfica a desenha a curva

Curva 2
>> >> >> >> >> t = linspace(0,5*pi,5001); x = cos(t) - cos(80*t).*sin(t); y = 2*sin(t) - sin(80*t); figure(2) plot(x,y)

O leitor mais corajoso certamente vai mexer nos parmetros das curvas acima para a ver o que acontece. Os grcos resultantes destes comandos podem ser conferidos na a Figura 3.1.

10

Figura 2: Curvas planas 1 (equerda) e 2 (direita).

3.2

Gerao de n meros aleatrios ca u o

O comando bsico para gerao de nmeros aleatrios o rand. Basicamente ele a ca u o e gera uma matriz com nmeros com distribuio uniforme [0, 1] (faa >> help rand u ca c para saber mais). Seguem abaixo alguns exemplos de sua utilizao ca
>> >> >> >> >> x y A B z = = = = = rand(100,1); rand(1,100); rand(100); rand(50,30); 2*rand(100,1) - 1; % % % % % vetor coluna com 100 numeros aleatorios vetor linha com 100 numeros aleatorios matriz de 100x100 numeros aleatorios matriz de 50x30 numeros aleatorios vetor 100x1 com distr. unif. [-1,1]

` As vezes pode ser util que o vetor aleatrio gerado seja sempre o mesmo. Para o conseguir isso voc deve xar a semente do gerador de nmeros aleatrios. Primeirae u o mente guarde a semente atual com o comando
>> seed = rand(state); % guarda a semente do gerador

onde seed uma varivel qualquer, que pode ter outro nome da sua escolha. Em e a seguida, xe a semente no gerador com o comando
>> rand(state, seed); % fixa a semente no gerador

para se assegurar que ele vai repetir a mesma seqncia de nmeros aleatrios. ue u o Observe o exemplo abaixo, em que a semente no xada a e
>> x = rand(100,1); >> y = rand(100,1); >> isequal(x,y) ans = 0 % gera um vetor aleatrio o % gera outro vetor aleatrio o % verifica se x e y s~o iguais a

11

Aqui a funo isequal retorna 0 indicando que os vetores x e y so diferentes. Por ca a outro, lado verique, atravs do exemplo abaixo, quando a semente xada e e
>> >> >> >> >> seed = rand(state); x = rand(100,1); rand(state,seed); y = rand(100,1); isequal(x,y) % % % % guarda a semente do gerador gera um vetor aleatrio o fixa a semente previamente guardada gera outro vetor aleatrio o

ans = 1

Aqui a funo isequal retorna 1 indicando que os vetores x e y so iguais. Como ca a j foi dito, isso que signica que sempre que o comando rand(state,seed); for a usado, a gerao dos nmeros aletrios vai se repetir. ca u o

3.3

Vetorizao ca

3.4

Estat sticas

Tabela de funes co
AS funes em Matlab podem ser divididas em dois tipos: co

1. Funes que preservam a dimenso do argumento; co a 2. Funes que trazem uma sa com dimeses diferentes (em geral menores) em co da o relao ao seu argumento; a Funo ca fun1 Argumento escalar vetor matriz (m n) escalar vetor matriz (m n) Resultado escalar vetor matriz (m n) escalar escalar vetor linha (1 n)

fun2

As funes do tipo fun1 podem ser co 12

Funo ca cos sin tan exp log sqrt

Descrio ca Cosseno de um ngulo (em radianos) a Seno de um ngulo (em radianos) a Tangente de um ngulo (em radianos) a Exponecial na base e Logaritmo natural Raiz quadrada

e as funoes do tipo fun2 podem ser c

13

Você também pode gostar