Escolar Documentos
Profissional Documentos
Cultura Documentos
26
rel= tfor/tmat Pelo exemplo anterior pode-se concluir que a \vectoriza~o" dos algoritmos a unica forma de ca e utilizar o Matlab de forma eciente. Exerc cio 59 Obtenha uma matriz com 50 colunas em que cada coluna contm um perodo da fun~o e ca seno amostrada em 50 pontos. Exerc cio 60 Gere uma sequ^ncia com 10000 valores aleatrios com distribui~o uniforme e guarde e o ca num vector apenas os que possuem amplitude superior a 0.9. Coloque noutro vector os ndices das amostras anteriores. Exerc cio 61 Obtenha o grco da fun~o sin(x)=x variando o argumento entre -100 e 100 com a ca passos de 0.1.
25
3. Escrever o bloco com o resultado no cheiro de sa da Esta tcnica apesar de permitir um aumento da rapidez de execu~o, resulta normalmente num e ca algoritmo mais complexo.
Vectoriza~o de algoritmos ca
Todos os operadores e fun~es do Matlab podem ser aplicados sobre vectores e matrizes. Se, por co exemplo, quisermos calcular o seno de cada um dos elementos do vector x com 100 elementos basta fazer v= sin(x) para se obter o resultado pretendido. O Matlab permite assim utilizar como argumento da fun~o ca sin n~o apenas um nmero mas um vector, aplicando a fun~o a cada um dos seus elementos. No a u ca entanto, existe uma outra forma de realizar os clculos que consiste em recorrer ao ciclo for aplicando a a fun~o sin a um elemento de x de cada vez ca for n= 1:100 v(n)= sin(x(n)); end Contudo, o Matlab utiliza uma linguagem interpretada, o que signica que antes de ser executada cada linha de cdigo lida e descodicada. Este processo repetido para cada linha e pode em certos o e e casos, ser da ordem de grandeza do prprio processamento ou mesmo superior. Um caso ilustrativo o e o do clculo do produto interno entre dois vectores linha a e b, denido pela express~o a a ab =
N X
a (n) b (n) ;
n=1
e que em linguagem do Matlab se escreve simplesmente a*b'. O programa que se segue pretende demonstrar a diferena de velocidade de processamento entre c a vers~o que calcula o produto interno fazendo uso de um ciclo for, e outra que o calcula na forma a vectorizada. % Compara~o do tempo de CPU no clculo de um produto interno. ca a N= 10000; a= rand(1,N); b= rand(1,N); nciclos= 100; % Clculo utilizando um ciclo for a t= cputime; for c= 1:nciclos, y= 0; for n= 1:N, y= y+a(n)*b(n); end end tfor= cputime-t % Clculo de forma vectorizada a t= cputime; for c= 1:nciclos, y= a*b'; end tmat= cputime-t % Velociade de clculo relativa a % Num Pentium II a 266MHz foi cerca de 180 vezes mais rpido a
24
23
[y,fs]= wavread('ficheiro.wav'); e se se pretender gravar num cheiro com a extens~o \wav" um vector pode-se utilizar o comando a wavwrite(y,fs,'ficheiro.wav'); Apesar de no Matlab se poder escolher qualquer frequ^ncia de amostragem a maior parte das placas e de som n~o permitem a reprodu~o de sinais amostrados a n~o ser nas seguintes frequ^ncias a ca a e 48000 44100 32000 24000 22050 16000 12000 11025 8000
Exerc cio 56 Gere um vector com 32000 elementos utilizando a fun~o randn. Oua o sinal criado ca c utilizando uma frequ^ncia de amostragem de 32000Hz. e Exerc cio 57 Gere a sinuside de 1000Hz do exemplo dado e oua-a com a frequ^ncia de amostragem o c e de 8000Hz. Reproduza agora a sinuside com as seguintes frequ^ncias de amostragem: 4000, 16000, o e 44100. Exerc cio 58 Gere um sinal constitu por 5000 elementos 1 e -1 dispostos alternadamente. Reprodo duza esse sinal com a fun~o sound utilizando uma frequ^ncia de amostragem de 8000Hz. ca e
Imagens
O Matlab possui um conjunto de fun~es para manipula~o e visualiza~o de imagens a cores. As co ca ca imagens s~o representadas sob a forma de matrizes. No caso de imagens s com n a o veis de cinzento, estas podem ser armazenadas numa matriz bidimensional em que cada elemento representa o nvel de cinzento. Os seguintes comandos mostram como visualizar uma imagem armazenada num cheiro em disco I=imread('banner.jpg'); image(I) axis image
O comando imread carrega a imagem banner.jpg para a matriz I, e o comando image mostra a gura no ecran. Podemos facilmente criar imagens sintticas com o Matlab e visualiz-las com os comandos antee a riores. Vejamos um exemplo de uma imagem com a metade inferior a branco e a superior a preto: M= zeros(100); M(1:50,:)= 1; colormap gray image(M);
22
end A instru~o for s deve ser utilizada quando n~o se encontra outra forma de implementar o algoritca o a mo pois como veremos na sec~o sobre "Vectoriza~o de algoritmos" (pag.25), torna a execu~o do ca ca ca programa muito lenta uma vez que o Matlab utiliza uma linguagem interpretada. Exerc cio 52 Gere um vector x com 1000 elementos utilizando a fun~o rand. Extraia para um outro ca vector todos os elementos de x menores que 0.3. Utilize as instru~es for e if. co Exerc cio 53 Neste exerccio pretende-se visualizar a fun~o ex quando se varia o par^mentro ca a segundo a express~o = 1 + 0:1 n, com n 2 [1; 2; : : : ; 10]. Armazene cada uma das variantes da a fun~o numa coluna de uma matriz A (100 10) considerando 100 pontos para a varivel x 2 [0 : : : 2]. ca a Para visulizar as curvas simult^neamente faa apenas plot(A) e experimente mesh(A). a c Exerc cio 54 A expans~o em srie de Taylor da fun~o seno dada pela express~o a e ca e a sin(x) = x x3 x5 xn + ::: + sin n : 3! 5! n! 2
Calcule a aproxima~o para 5 termos da srie em 100 pontos do intervalo [0 : : : 2] e faa um grco ca e c a comparando a aproxima~o com a fun~o seno. ca ca Exerc cio 55 Usando a instru~o for, construa uma matriz de 10 10 em que cada coluna um ca e vector v cujos elementos s~o os nmeros inteiros de 1 a 101. a u
Sinais de Audio
O Matlab possui uma srie de fun~es que permitem manipular cheiros de som em formato \ri"2 e co e, se o computador tiver uma placa de som, reproduzir o sinal armazenado num vector. A instru~o ca sound permite fazer esta reprodu~o utilizando uma dada frequ^ncia de amostragem. A frequ^ncia ca e e de amostragem indica o nmero de amostras que s~o convertidas de digital para analgico em cada u a o segundo. Se quisermos reproduzir um vector preenchido com um sinal aleatrio a uma taxa de 8000Hz o e com uma dura~o de 2 segundos utilizamos a seguinte sequ^ncia de comandos: ca e r= 2*(rand(1,16000)-0.5); sound(r,8000); A amplitude dos elementos do vector de entrada da fun~o sound deve estar compreendida entre -1 ca e 1, sendo as amplitudes superiores convertidas para -1 ou 1. Se quisermos reproduzir uma sinuside o de 1000Hz com a dura~o de 0.5 segundos, utilizando uma frequ^ncia de amostragem de 8000Hz ca e procede-se da seguinte forma fs= 8000; % Frequ^ncia de amostragem e Ts= 1/fs; % Perodo de amostragem t= 0:Ts:0.5; % Instantes de amostragem x= sin(2*pi*1000*t); sound(x,fs); Para carregar para um vector um sinal armazenado num cheiro de som com o formato \ri", pode-se utilizar o comando
1 Este exemplo da instru~o for, pode ser realizado de forma mais eciente com o comando: v*ones(1,length(v)), ca em que v um vector coluna. e 2 No ambiente windows os cheiros de som com este formato t^m a extens~o "wav". e a
21
Exerc cio 48 Gere a sequ^ncia f1; 2; 3; : : : ; 9; 10g e extraia os nmeros maiores que 4. e u Exerc cio 49 Gere uma sequ^ncia aleatria com distribui~o normal e elimine os elementos negae o ca tivos. Exerc cio 50 Gere uma sequ^ncia aleatria com distribui~o normal e calcule o nmero de elementos e o ca u negativos. Exerc cio 51 Gere um sinal aleatrio com distribui~o uniforme e com 1000 amostras. Obtenha o o ca nmero de amostras com uma amplitude superior a 0.9. Calcule em seguida o nmero de amostras u u cujo mdulo possui uma amplitude entre 0.5 e 0.7. o
Programa~o em Matlab ca
O Matlab possui um conjunto de instru~es que permitem a constru~o de programas. Nesta introco ca du~o apenas faremos refer^ncia s instru~es if e for. ca e a co
A instru~o IF ca
Esta instru~o permite a execu~o condicional de cdigo tendo em conta uma dada condi~o lgica. ca ca o ca o A estrutura a seguinte e if cond then, instru~o 1 ca instru~o 2 ca ::: else instru~o 3 ca instru~o 4 ca ::: end Se a condi~o cond for verdadeira s~o executadas as instru~es 1 e 2, sen~o ser~o executadas as ca a co a a instru~es 3 e 4. A directiva end no nal indica o m da instru~o if. co ca Na forma mais simples a directiva else pode ser omitida.
A instru~o FOR ca
Esta instru~o permite a repeti~o de um conjunto de instru~es. A sintaxe de utiliza~o a seguinte: ca ca co ca e for varivel= incio:passo:fim, a Instru~o 1 ca Instru~o 2 ca ::: end A seguir podemos ver alguns exemplos de utiliza~o ca r= 10; for n= 1:10, r= r+10 end N~o dif vericar que a express~o direita do sinal de igual na instru~o for apenas cria um a e cil a a ca vector e que se pode utilizar a instru~o for da seguinte forma ca r=10; v= 1:10; for n= v, r= r+10
20
Expans~o escalar a
A expans~o escalar consiste na repeti~o automtica de um escalar de modo a que seja possvel realizar a ca a a opera~o pretendida com cada elemento de uma matriz. Se pretendermos somar o nmero 5 a uma ca u matriz A de dimens~o 4 4 basta fazer a A+5 em vez de A+5*ones(4) Esta nota~o simplica as express~es tornando-as de leitura mais fcil. Tambm possvel realizar ca o a e e atribui~es fazendo por exemplo: co A= magic(4); A(1:3,1:3)= 1 1 1 1 13 1 1 1 8 1 1 1 12 4 14 15 1
Indices lgicos o
O Matlab permite a indexa~o de elementos de uma matriz atravs de ndices lgicos que podem ser ca e o obtidos a partir de equa~es lgicas. Considere-se o seguinte vector v co o v= [0.1 0.4 0.3 -0.3 -0.9 0.4 0.1 -0.5 -0.1 -0.3 0.1 0.5] e vamos supor que se pretendia obter um vector apenas com as amostras com amplitude superior a 0.3; ent~o, fazendo a v>0.3 ans = 0 1 0 0 0 1 0 0 0 0 0 1 obtm-se um vector de zeros e uns com o valor 1 nas amostras onde a condi~o era verdadeira. Para e ca obter os elementos do vector que satisfazem a condi~o basta fazer ca v(v>0.3) 0.4 0.4 0.5 Se se pretender um vector com os ndices das amostras que satisfazem a condi~o v > 0:3 pode-se ca fazer n= 1:length(v); n(v>0.3) ans= 2 6 12 ou, em alternativa, utilizar a fun~o find ca find(v>0.3) ans= 2 6 12 Na tabela seguinte s~o apresentados os operadores lgicos mais comuns da linguagem Matlab a o == ~= < > <= >= & j ~ igual diferente menor maior menor ou igual maior ou igual "e" lgico o "ou" lgico o nega~o ca
19
100 90 80 70 60 50 40 30 20 10 0 1 2 3 4 5 6 7 8 9 10
Exerc cio 42 Crie uma matriz com tr^s colunas e coloque em cada uma delas as seguintes fun~es: e co sin(x), cos(x) e sin(x)*cos(x). O argumento x dever ser um vector a comear em 0 e a acabar em a c 2 , com um passo de =100. Exerc cio 43 Desenhe o grco da fun~o sin x2 utilizando o mesmo argumento que no exerc a ca cio anterior. Exerc cio 44 A fun~o abs d como resultado o mdulo de um nmero complexo e a fun~o angle ca a o u ca o seu argumento. Construa um grco do mdulo e argumento da seguinte fun~o a o ca y (!) = ! ej! em que ! varia de 0 a 8 com passos de =40. Desenhe igualmente um grco da parte real versus a a parte imaginria. a
18
1 2.1 1.1 -5 2 o que indica que o polinmio caracter o stico det (A I) e 4 + 2:13 + 1:12 51 + 2 Exerc cio 37 Construa um vector linha x constitudo pelos nmeros inteiros pares pertencentes ao u intervalo [1 : : : 8]. Calcule os valores prprios do produto externo de x com x. o Exerc cio 38 Resolva o seguinte sistema de equa~es com o Matlab co 8 < x + 2y z = 10 2x 7y = 1 : x + 3y 4z = 0 Verique com o Matlab a solu~o obtida. ca Exerc cio 39 Crie uma matriz aleatria A com a fun~o rand e obtenha uma matriz simtrica B = o ca e A AT . Verique que B satisfaz a sua equa~o caracter ca istica. Nota: utilize a fun~o polyval. ca Exerc cio 40 Verique que fazendo o produto externo entre um vector coluna v e um vector linha preenchido com um nmero n de uns, se obtm uma matriz com n colunas iguais a v. u e Exerc cio 41 Calcule os valores prprios da matriz simtrica B do exerc 39 e verique que pelo o e cio menos um deles superior unidade. Calcule A20 e verique que os elementos da matriz resule a A 20 tante aumentaram de valor. Calcule agora 20 e verique que os elementos da matriz resultante diminuiram de amplitude e que os valores prprios s~o todos inferiores unidade. o a a
Opera~es elemento-a-elemento co
Em muitas situa~es pretende-se efectuar opera~es aritmticas com matrizes aplicando a opera~o co co e ca entre os elementos das matrizes. Para transformar um operador matricial na forma elemento-aelemento, basta acrescentar o carcter \." antes do operador. Note-se que no caso da adi~o \+" e a ca da subtra~o \-" n~o existe qualquer diferena para os operadores \.+" e \.-" respectivamente. ca a c O exemplo seguinte ilustra o produto elemento-a-elemento de duas matrizes com a mesma dimens~o: a A= [1 2 3; 4 5 6] B= [2 3 4; 9 8 7] A.*B ans= 2 6 12 36 40 42 Vejamos agora uma lista de operadores elemento-a-elemento + Adi~o ca Subtra~o ca .* Multiplica~o elemento-a-elemento ca ./ Divis~o elemento-a-elemento a .^ Potencia~o elemento-a-elemento ca .' Transposta n~o conjugada a Este tipo de operador muito util para, por exemplo, gerar matrizes com valores de fun~es: e co n= (1:10)'; M= [n n.^2 n.*log2(n)]; plot(M,'-o')
17
Ficheiros de comandos
Quando se pretende executar repetidamente um conjunto de comandos muito longo, ter de os escrever torna-se muito moroso. Para resolver este problema, possvel colocar num cheiro de texto com e a extens~o \.m" o conjunto de comandos que se pretende executar. Para executar os comandos a guardados no cheiro, basta escrever na janela de comando do Matlab o nome do cheiro sem a extens~o. Para criar e comear a editar um cheiro basta escrever o comando edit, para que arranque a c um pequeno editor de texto com \debugging" integrado.
Algebra linear
E poss resolver com o Matlab diversos problemas da lgebra linear, sendo fcil realizar clculos vel a a a elaborados com matrizes, como por exemplo, o produto de duas matrizes, invers~o de matrizes, clculo a a dos valores prprios, etc. Dadas as matrizes A e B, por exemplo, a sua soma calculada da seguinte o e forma: A= rand(4); B= rand(4); C= A+B; Para calcular o produto entre as duas matrizes anteriores basta fazer C= A*B que efectua produtos internos entre as linhas de A e as colunas de B. Se quisermos calcular o produto interno entre dois vectores linha x e y x= 1:4 y= 3:6 x*y' ans= 50 enquanto que o produto externo entre estes vectores dado por e A = x'*y A = 3 4 5 6 6 8 10 12 9 12 15 18 12 16 20 24 O determinante da matriz A pode ser calculado fazendo apenas d= det(A) e se quisermos calcular os valores prprios da matriz simtrica A AT pode-se utilizar o comando o e eig(A*A') e a inversa da matriz A obtm-se fazendo e inv(A) E igualmente poss calcular a n pot^ncia de uma matriz quadrada fazendo simplesmente vel e A^n e se se quiser calcular o polinmio caracterstico de uma matriz temos o p= poly(A) p=
16
Movimenta o cursor para a esquerda Movimenta o cursor para a direita Salta para o comando anterior Salta para o comando seguinte Salta para o incio da linha Salta para o m da linha Apaga a linha Apaga o carcter da direita a Apaga o carcter da esquerda a
Existe ainda a possibilidade de guardar num cheiro todos os comandos introduzidos durante uma sess~o com o comando diary. a
Directrios e cheiros o
Quando se arranca o Matlab, o directrio corrente ser o c:nmatlabR12nwork. No entanto, se preteno a dermos guardar num cheiro variveis, fun~es e programas Matlab elaborados por ns, conveniente a co o e mudar a directoria corrente para uma directoria pessoal. Para visualizar qual o directrio corrente o pode-se utilizar o comando pwd ans = C:nmatlabR12nwork Para mudar de directrio pode-se utilizar o comando cd. Para mudar para a \drive" H: por exemplo, o o seguinte comando deve ser utilizado cd h: Quando se escreve um comando na janela do Matlab esse nome ser pesquisado em primeiro lugar a no directrio corrente. Se n~o for encontrado, o Matlab pesquisa nos directrios que constarem duma o a o lista interna (comando path).
15
whos. O primeiro apresenta no ecran uma lista abreviada das variveis indicando apenas o seu nome, a enquanto que o segundo apresenta tambm o espao ocupado em memria, dimens~o, etc. e c o a Para apagar variveis da memria pode-se utilizar o comando clear. Para apagar por exemplo as a o variveis x e b faz-se a clear x b O comando clear sem argumentos apaga todas as variveis armazenadas em memria. a o
O comando format
O comando format controla a forma como os valores numricos s~o apresentados. Este comando e a controla apenas a forma com os valores s~o apresentados e n~o a forma como estes s~o representados a a a internamente. Os seguintes exemplos ilustram os formatos mais comuns. a= [1/5 pi] format short 0.2000 3.1416 format short e 2.0000e-001 3.1416e+000 format long 0.20000000000000 3.14159265358979 format long e 2.000000000000000e-001 3.141592653589793e+000 Uma op~o util do comando format ca e format compact que elimina as linhas em branco extra introduzidas entre a apresenta~o das variveis permitindo uma ca a apresenta~o dos resultados mais compacta. ca
Supress~o de resultados a
Quando as matrizes s~o de grande dimens~o torna-se bastante incmodo para o utilizador a apresena a o ta~o do resultado no ecran de todos os clculos efectuados. Para evitar a apresenta~o dos resultados ca a ca basta colocar no nal da linha de comando um ponto e v rgula tal como o seguinte exemplo demonstra: a= [1/5 pi];
Edi~o de comandos ca
A janela de comando do Matlab permite a edi~o de comandos escritos anteriormente. Se por exemplo ca se entrou o seguinte comando: a= sqrt(1:10] j Improper function reference. A '','' or '')'' is expected. o Matlab devolve, como se pode constatar, um erro de sintaxe. Para alterar a linha e substituir o par^ntesis recto por um curvo, basta carregar na tecla " que a linha aparecer de novo. Com as teclas e a e desloca-se o cursor ao longo da linha. O Matlab guarda uma lista de todos os comandos ! introduzidos numa sess~o. Se quiser obter um comando introduzido anteriormente, basta escrever os a primeiros caracteres desse comando e carregar em " para que o comando aparea. A lista seguinte c mostra as teclas de edi~o dispon ca veis
14
-0.5
0.5
Exerc cio 34 Visualize em grco a parte real e a parte imaginria da fun~o ej! , para valores de a a ca ! 2 [0 : : : 2] e passo de =10.
O ambiente Matlab
A janela de comando do Matlab possui algumas potencialidades na apresenta~o dos resultados, ca gest~o da variveis, formata~o numrica dos resultados, edi~o da linha de comandos, etc. Nesta a a ca e ca sec~o vamos descrever algumas das suas potencialidades. ca
Gest~o de variveis a a
Todas as variveis do Matlab s~o guardadas na \rea de trabalho" (\workspace"). Para visualizar a a a as variveis que est~o na \rea de trabalho" num dado momento podemos utilizar os comados who e a a a
13
A fun~o plot permite escolher o tipo de linha, a cor, etc; e existem ainda fun~es para por ca co exemplo, acrescentar etiquetas aos eixos, criar uma grelha, etc, (ver o \help" da fun~o plot para ca refer^ncia). Destas fun~es destacam-se as seguintes: e co xlabel ylabel gure gure(gcf) zoom grid axis Etiqueta do eixo das abcissas Etiqueta do eixo das ordenadas Cria uma janela nova Coloca a janela de grca corrente frente a a Para aumentar zonas de um grco a Grelha Dene os limites dos eixos do grco a
Exerc cio 25 Faa o plot da fun~o seno para dois per c ca odos. Exerc cio 26 Compare o grco da fun~o seno com o da fun~o coseno para ^ngulos entre 0 e 2 e a ca ca a um passo de pi/150. O seno deve ser representado por c rculos azuis e o coseno por uma linha verde a cheio. Exerc cio 27 Desenhe o grco da fun~o sin () = com a variar de 2 a 2 e passos de =10. a ca Exerc cio 28 Visualize o grco da fun~o ex para 100 valores de x 2 [0 : : : 5]. a ca Exerc cio 29 Visualize o grco da fun~o ex para 100 valores de x 2 [0 : : : 5]. a ca Exerc cio 30 Visualize o grco da fun~o loge x para valores de x 2 [0 : : : 5]. a ca Exerc cio 31 Construa uma matriz X em que a primeira coluna constitu com 100 valores da e ida fun~o ex e a segunda coluna por 100 valores da fun~o loge x para o intervalo x 2 [0 : : : 1]. Execute ca ca o comando plot(X). Exerc cio 32 Determine gracamente uma solu~o aproximada da equa~o loge x = ex . Utilize para ca ca a anlise o intervalo [0 : : : 1]. a Exerc cio 33 Desenhe no mesmo grco a fun~o ex em que a varivel toma os seguintes valores a ca a 2 [1; 1:1; 1:2; 1:3; 1:4; 1:5] e a varivel x 2 [0 : : : 1]. a
12
Grcos a
A gera~o de grcos no Matlab representa um dos seus aspectos mais uteis. Nesta sec~o ser~o ca a ca a apresentados alguns dos comandos mais importantes para a cria~o de grcos a partir dos valores ca a armazenados em matrizes.
Cria~o de grcos ca a
A fun~o plot a mais utilizada no Matlab para gerar grcos variando o seu comportamento conca e a soante os par^metros de entrada. A sua forma mais simples consiste em passar como entrada apenas a um vector: plot(y) O grco gerado apresenta em abcissas os a ndices i dos elementos do vector e em ordenadas o valor de cada um dos elementos do vector. Tambm possvel utilizar um segundo vector para o eixo das e e abcissas tal como no exemplo seguinte: w=0:pi/100:2*pi; x= sin(w); plot(w,x)
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1
3 rad
A fun~o plot admite a representa~o simult^nea de vrias curvas, acrescentando mais argumentos ca ca a a de entrada, devendo os vectores possuir o mesmo nmero de amostras. Vejamos um exemplo: u w=0:pi/100:2*pi; x1= sin(w); x2= sin(w+pi/2) plot(w,x1,w,x2)
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 rad 4 5 6 7
11
2 3 4
2 3 4
3 1 3
4 2 4
Exerc cio 15 Crie uma matriz 3 3 em que todos os elementos s~o iguais a 3. a Exerc cio 16 Crie um vector coluna com 100 elementos aleatrios com uma distribui~o uniforme. o ca Exerc cio 17 Crie uma matriz 4 4 em que todos os elementos s~o iguais a 1 + j2. a Exerc cio 18 Com a fun~o eye crie uma matriz diagonal 4 4 em que todos os elementos da ca diagonal s~o iguais a 3. a Exerc cio 19 Construa um vector com 128 elementos com a sequinte sequ^ncia: e 0 1 0 1 0 1 0 1 :
Exerc cio 20 Crie uma matriz com dimens~o 4 4 em que cada coluna seja o vector v = [1; 2; 3; 4]. a Exerc cio 21 Forme a matriz quadrada com dimens~o 6 6 constituda por quatro blocos em que os a elementos de cada bloco sejam \um" ou zero, tal como ilustrado na seguinte matriz: e 2 3 1 1 1 0 0 0 6 1 1 1 0 0 0 7 6 7 6 1 1 1 0 0 0 7 6 7 6 0 0 0 1 1 1 7: 6 7 4 0 0 0 1 1 1 5 0 0 0 1 1 1
10
Manipula~o de matrizes ca
Esta sec~o introduz alguns conceitos elementares sobre a cria~o e manipula~o de matrizes. ca ca ca
Cria~o de matrizes ca
As quatro fun~es seguintes permitem a cria~o de algumas matrizes elementares: co ca zeros ones eye rand randn Cria Cria Cria Cria Cria uma matriz preenchida com zeros uma matriz preenchida com uns a matriz identidade uma matriz de nmeros aleatrios com distribui~o uniforme [0 : : : 1] u o ca uma matriz de nmeros aleatrios com distribui~o normal u o ca
Vejamos alguns exemplo de utiliza~o destas fun~es: ca co Z= zeros(2,5) Z = 0 0 0 0 0 0 0 0 0 0 a= ones(2,3)*3 a = 3 3 3 3 3 3 n= round(3*rand(1,10)) n = 3 1 2 1 3 2 1 0 2 A= randn(1,3)+j*randn(1,3) A = -0.43256 + 0.28768i -1.6656 -
1.1465i
0.12533
1.1909i
Concatena~o de matrizes ca
Concatenar matrizes consiste em formar matrizes a partir de outras mais pequenas. A nota~o ca e id^ntica utilizada para formar matrizes com nmeros. Os seguintes exemplos ilustram a concatena~o e a u ca de matrizes. a= [1 2; 3 4] a = 1 2 3 4 A= [a a; a a] A = 1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 b= (1:4)' b = 1 2 3 4 B= [b b [a;a]] B = 1 1 1 2
Polinmios o
Existe no ambiente Matlab um conjunto de fun~es para manipular polinmios. A deni~o de co o ca polinmios feita criando vectores cujos elementos s~o os coecientes do polinmio ordenados por o e a o pot^ncia decrescente tal como o exemplo seguinte ilustra. Para representar o polinmio p(x) = e o x2 3x + 2, cria-se o vector p=[1 -3 2]; e para calcular as suas razes existe a fun~o ca r= roots(p) r= 2 1 Para obter os coecientes de um polinmio a partir das ra pode-se utilizar a fun~o o zes ca poly(r) ans= 1 -3 2 Tambm poss calcular o valor de um polinmio num conjunto de pontos utilizando a fun~o e e vel o ca polyval tal como o exemplo ilustra polyval(p,r) ans= 0 0 e que, como se pode ver, calculou o valor do polinmio nos seus zeros. o O produto entre dois polinmios obtido atravs da fun~o conv (convolu~o). O exemplo seguinte o e e ca ca ilustra o produto entre os polinmios x2 + 1 e x3 + x 1 dado por x5 + 2x3 x2 + x 1 o p1= [1 0 1] p2= [1 0 1 -1] conv(p1,p2) ans= 1 0 2 -1 1 -1 Exerc cio 7 Calcule o seno, o coseno, a tangente, a raz quadrada e a raz cbica de =2. u Exerc cio 8 Calcule o logaritmo e a raz quadrada de -1. Exerc cio 9 Calcule o valor da fun~o ex em 100 pontos do intervalo [1 : : : 1]. ca Exerc cio 10 Calcule o valor da fun~o sin(x + pi=10) cos(x) em 100 pontos do intevalo [ : : : ]. ca Exerc cio 11 Calcule o produto dos polinmios x6 + 10 e x2 2x + 3. o Exerc cio 12 Obtenha o polinmio cujas razes s~o os nmeros inteiros 1, 2 e 3. o a u Exerc cio 13 Calcule os zeros do seguinte polinmio p(x) = x3 + 4x2 3x + 1. Calcule o valor do o polinmio em 100 pontos da forma x = ej! com ! 2 [0 : : : 2]. o Exerc cio 14 Calcule o valor do mdulo do polinmio p(x) = 1= x2 + 1 em 100 pontos da forma o o x = ej! com ! 2 [0 : : : 2].
Operadores
As opera~es nas express~es do Matlab seguem as regras habituais de preced^ncia e podem ser aplico o e cadas quer a matrizes quer a nmeros. u + * / ^ ' () Adi~o ca Subtrac~o ca Multiplica~o ca Divis~o a Potencia~o ca Transposta Par^ntesis e
Fun~es co
O Matlab possui um conjunto muito grande de fun~es matemticas que permitem resolver grande co a parte dos problemas de clculo encontrados, tais como: sin, cos, tan, sqrt, log, etc. Estas aceitam a nmeros complexos como argumento e podem tambm devolver resultados do tipo complexo. Se, por u e exemplo, se calcular a ra quadrada de um nmero negativo n~o ocorre um erro mas o correspondente z u a nmero complexo automaticamente devolvido. Quando as fun~es s~o aplicadas sobre matrizes a u e co a fun~o aplicada a cada um dos elementos. ca e Para obter ajuda sobre a utiliza~o de qualquer fun~o basta fazer ca ca help func em que func o nome da fun~o. e ca Existem algumas fun~es especiais que devolvem o valor das constantes matemticas mais utico a lizadas: pi i j eps realmin realmax Inf NaN 3.14159265 p p1 1 Precis~o relativa do formato double 252 a O menor nmero real 21022 u O maior nmero real (2 eps)21023 u Innito \Not-a-Number"
Express~es o
Na constru~o de express~es podemos utilizar operadores, fun~es e variveis. Eis alguns exemplos: ca o co a r= (pi+1)/(pi-1) r = 1.9339 a= abs(4+3i) a= 5 t= angle(4+3i) t= 0.6435 a= 0/0 Warning: Divide by zero. a = NaN x= sqrt(-2) x =
Exerc cio 5 Gere uma sequ^ncia de nmeros mltiplos de 3 compreendidos entre 100 e 132, dispostos e u u num vector por ordem decrescente. Exerc cio 6 Gere uma sequ^ncia a comear em e a acabar em com um passo de =15. e c
Express~es o
O Matlab permite a constru~o de express~es matemticas sem qualquer declara~o do formato ca o a ca numrico ou dimens~o das matrizes. Existem quatro constituintes bsicos nas express~es do Mate a a o lab: Variveis a Nmeros u Operadores Fun~es co
Variveis a
Todas as variveis do Matlab s~o do tipo matriz e a sua cria~o automtica. Por exemplo, o comando a a ca e a Custo total= 1000 resulta na cria~o em memria de uma matriz de 1 1 com o valor 1000. O Matlab distingue as ca o letras maisculas das minsculas nos nomes das variveis e s toma em considera~o os primeiros 31 u u a o ca caracteres. Para visualizar o valor de uma varivel basta escrever o seu nome. a Existe uma varivel especial que utilizada pelo Matlab quando n~o se atribui o resultado de a e a uma express~o a qualquer varivel. Esta varivel designa-se por\ans" (do termo\answer", resposta) e a a a pode ser utilizada numa sess~o interactiva para continua~o dos clculos, tal como o exemplo seguinte a ca a demonstra 2*sin(2) ans= 1.8186 ans/102 ans = 0.017829
N meros u
O Matlab utiliza uma nota~o standard para a representa~o dos nmeros, admitindo nota~o cientca ca ca u ca e nmeros complexos. A unidade imaginria j = sqrt(1) representada no Matlab pelas letras i u a e ou j. Como estas letras podem ser utilizadas no nome de outras variveis convm ter o cuidado de a e conrmar o seu valor antes de as usar. A seguir ilustram-se alguns exemplos: 10 1+i 10e6j -11 10j 10e-2 0.312 3e2 -2.3e-4
Indices
O elemento da linha i e da coluna j de uma matriz A designado por A (i; j). Por exemplo o elemento e da linha 1 e coluna 3 da matriz A designado por A (1; 3). Em nota~o Matlab, para obter o elemento e ca A (1; 3) denida anteriormente, pode-se escrever A(1,3) e obtm-se e ans= 3 Para alterar o valor do elemento A (1; 3) para 7 basta fazer A(1,3)= 7 Os ndices das matrizes s~o nmeros inteiros positivos pertencentes ao intervalo [1 : : : N] em que N a u depende da memria disponvel, e podem ser vectores declarados anteriormente. Se pretendermos por o exemplo, extrair a segunda linha da matriz A podemos fazer v= A(2,[1 2 3]) v= 4 5 6 ou declarando primeiro um vector para os ndices das colunas k= [1 2 3] v= A(2,k) v= 4 5 6
O operador \:"
A cria~o de vectores elemento a elemento bastante morosa e para matrizes de grandes dimens~es ca e o quase irrealizvel. O Matlab permite gerar sequ^ncias de nmeros de forma rpida se zermos uso do a e u a operador\:". Se quisermos gerar o vector a = [1; 2; 3; : : : ; 10] podemos fazer a= 1:10 A nota~o geral para o operador \:" a seguinte ca e Nmero inical : incremento : Nmero final u u e permite a gera~o de sequ^ncias de nmeros inteiros como no exemplo anterior ou mesmo de nmeros ca e u u reais. Eis alguns exemplos: e= 0:pi/20:2*pi f= 10:-1:-10 O operador\:" pode ser utilizado na gera~o de vectores de ndices obtendo-se uma nota~o muito ca ca compacta. Se quisermos obter as colunas mpares da matriz A podemos fazer B=A(1:2,1:2:3) No caso anterior s~o indexadas todas as linhas da matriz. Para simplicar a nota~o, quando n~o se a ca a conhece exactamente o nmero de linhas de uma matriz, pode-se utilizar a nota~o u ca B=A(:,1:2:3) Exerc cio 1 Gere uma sequ^ncia de nmeros pares com in em 4 e a terminar no nmero 100. e u cio u Exerc cio 2 Gere uma sequ^ncia numrica decrescente com incio em 5 e a terminar em -5. e e Exerc cio 3 Gere uma sequ^ncia numrica com 100 elementos pertencentes ao intervalo [0 : : : 1]. e e Exerc cio 4 Considere uma matriz A com 20 linhas e 30 colunas. Construa um comando que permita extrair para uma matriz B uma sub-matriz de A constituda pelas linhas de 10 a 15 e as colunas de 9 i a 12.
O \Help Desk"
A partir da vers~o 5.0, o Matlab vem acompanhado com uma ajuda em formato\html" e todos os mana uais em formato\pdf". Essa informa~o pode ser encontrada no endereo http://www.mathworks.com. ca c Dentro do campus da Universidade de Aveiro, tambm possvel ter acesso directo a essa informa~o e e ca no endereo http://acs.det.ua.pt/matlab. c
O sistema Matlab
O sistema Matlab constitu pelas seguintes partes: e do A linguagem
Permite a manipula~o e cria~o de matrizes de forma rpida e intuitiva. Diferentes solu~es ca ca a co para um problema podem ser testadas numa frac~o do tempo que levaria com outras linguagens ca (C ou Fortran por ex.). Possui um conjunto muito vasto de fun~es que permitem resolver co problemas complexos de forma eciente.
O ambiente de trabalho
O Matlab proporciona um ambiente de trabalho que permite a gest~o e visualiza~o das variveis, a ca a ler e gravar variveis em disco e gerar programas em linguagem Matlab, possibilitando assim a a automatiza~o de clculos complexos. ca a
Grcos a
As fun~es de cria~o, visualiza~o e manipula~o de grcos s~o muito fceis de usar e permitem co ca ca ca a a a a cria~o de grcos 2D e 3D. O ajuste de escala automtico e o utilizador pode comear ca a e a c a utilizar as fun~es de gera~o de grcos pouco tempo depois do primeiro contacto com o co ca a ambiente do Matlab.
"Toolboxes"
O Matlab disponibiliza um conjunto de pacotes de fun~es para as mais variadas reas de co a clculo cient a co, sendo estes denominados \toolboxes". Existem\toolboxes" para estatstica, processamento de sinal, processamento de imagem, controlo, clculo simblico, etc. a o
Matrizes
Cria~o de matrizes ca
Uma matriz uma estrutura de dados bidimensional que permite guardar nmeros de uma forma e u ordenada e indexvel. Para criar, por exemplo, a seguinte matriz com duas linhas e tr^s colunas a e 1 2 3 A= ; 4 5 6 basta introduzir o comando: A= [1 2 3;4 5 6] ou em alternativa A= [1,2,3;4,5,6] Os vectores coluna e linha s~o casos particulares de matrizes e s~o criados utilizando a mesma a a nota~o. Para criar uma varivel com apenas um elemento basta fazer ca a a= 10 Este um caso particular de uma matriz de dimens~o 11, e pode-se igualmente utilizar a nota~o e a ca mais geral a= [10]
Ajuda
O comando HELP
Para esclarecer a maior parte das dvidas acerca da utiliza~o de uma dada fun~o do Matlab o u ca ca comando help de grande utilidade. Se se pretender, por exemplo, informa~o sobre a fun~o sin, e ca ca basta fazer help sin obtendo-se a seguinte descri~o ca SIN Sine. SIN(X) is the sine of the elements of X. O Matlab possui todas as fun~es organizadas em grupos e a prpria estrutura de directrios onde o co o o Matlab armazenado em disco reecte esse facto. Por exemplo, todas as fun~es de lgebra linear e co a est~o armazenadas no directrio matfun. Para obter uma lista completa deste tipo de fun~es basta a o co fazer help matfun Como n~o fcil decorar os nomes de todas as categorias de fun~es, existe uma janela de ajuda mais a e a co organizada, bastando para tal escrever o comando helpwin
O comando LOOKFOR
Quando se pretende encontrar uma fun~o para resolver um problema, mas desconhece-se se existir ca a alguma adequada no Matlab, o comando lookfor permite pesquisar as primeiras linhas do\help" de todas fun~es da instala~o do Matlab. Esta pesquisa adequada para resolver a maior parte das co ca e situa~es uma vez que a primeira linha do\help" de uma fun~o contm sempre uma descri~o sumria co ca e ca a da sua funcionalidade. O seguinte exemplo procura pela palavra\inverse". lookfor inverse Se se pretender que a fun~o lookfor pesquise todas as linhas do\help", pode-se utilizar a op~o ca ca -all, tal como o seguinte exemplo ilustra. lookfor -all inverse
Agradecimentos
O autor agradece aos seus colegas Prof. Ana Maria Tom, Prof. Antnio Joaquim Teixeira, e o Prof. Paulo Jorge Ferreira e Prof. Jos Lu Azevedo, pelas sugest~es e correc~es realizadas neste e s o co documento
c 2001, Jos Manuel Neto Vieira (vieira@det.ua.pt) e http://www.ieeta.pt/~vieira/MatlabNumInstante.pdf O \Matlab num Instante" pode ser distribudo sujeito s seguintes restri~es: a co O seu contedo n~o pode ser alterado. u a N~o pode ser utilizado (no todo ou em parte) na venda ou promo~o de qualquer produto ou a ca documento.
Som e Imagem no Matlab . . . . . . . . Sinais de Audio . . . . . . . . . . . . . . Imagens . . . . . . . . . . . . . . . . . . Constru~o de cdigo eciente com o Matlab ca o Reserva de espao para variveis . . . . c a Vectoriza~o de algoritmos . . . . . . . . ca
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
22 22 23 23 24 25
Contedo u
Introdu~o . . . . . . . . . . . . . . ca O que o Matlab? . . . . . . . e Ajuda . . . . . . . . . . . . . . . . . O comando HELP . . . . . . . O comando LOOKFOR . . . . O \Help Desk" . . . . . . . . . O sistema Matlab . . . . . . . . Matrizes . . . . . . . . . . . . . . . . Cria~o de matrizes . . . . . . ca Indices . . . . . . . . . . . . . . O operador \:" . . . . . . . . . Express~es . . . . . . . . . . . . . . o Variveis . . . . . . . . . . . . . a Nmeros . . . . . . . . . . . . . u Operadores . . . . . . . . . . . Fun~es . . . . . . . . . . . . . co Express~es . . . . . . . . . . . . o Polinmios . . . . . . . . . . . o Manipula~o de matrizes . . . . . . . ca Cria~o de matrizes . . . . . . ca Concatena~o de matrizes . . . ca Remo~o de colunas e linhas . . ca Grcos . . . . . . . . . . . . . . . . a Cria~o de grcos . . . . . . . ca a Grcos de variveis complexas a a Visualiza~o de fun~es de duas ca co O ambiente Matlab . . . . . . . . . . Gest~o de variveis . . . . . . . a a O comando format . . . . . . . Supress~o de resultados . . . . a Edi~o de comandos . . . . . . ca Directrios e cheiros . . . . . o Os comandos LOAD e SAVE . Ficheiros de comandos . . . . . Tpicos sobre matrizes . . . . . . . . o Algebra linear . . . . . . . . . . Opera~es elemento-a-elemento co Fun~es estat co sticas . . . . . . . Expans~o escalar . . . . . . . . a Indices lgicos . . . . . . . . . . o Programa~o em Matlab . . . . . . . ca A instru~o IF . . . . . . . . . ca A instru~o FOR . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . variveis a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 4 4 5 5 5 5 6 6 7 7 7 8 8 8 9 10 10 10 11 12 12 13 14 14 14 15 15 15 16 16 17 17 17 18 19 20 20 21 21 21
Jos Manuel Neto Vieira e Departamento de Electrnica e Telecomunica~es o co da Universidade de Aveiro 19 de Setembro de 2001