You are on page 1of 41

Programa de Educao Tutorial

Matlab / Octave

PET Engenharia de Computao


1

Sumrio

Introduo Ajuda Operaes bsicas sobre escalares Definio de variveis Vetores e matrizes Operaes simples com vetores e matrizes Ordenao Busca em Matrizes

Complexos Operadores Relacionais Funes lgicas e relacionais Fluxo de controle Arquivos-m Armazenagem de dados Resoluo de sistemas lineares Polinmios Ajuste de curvas Grficos
2

Introduo
Matlab e Octave so ferramentas para uso no processamento numrico Possuem recursos de programao, como uma linguagem procedural de alto nvel Matlab: http://www.mathworks.com Octave: http://www.gnu.org/software/octave/

Ajuda
Comando help: Apresenta a descrio da funo. Ex: help sin Comando lookfor: Procura nas funes do Octave e do Matlab, alguma que possua em sua descrio a palavra procurada. Ex: lookfor sine Para sair do help digite 'q'.

Operaes bsicas sobre escalares


>> 3 + 8 (soma) >> 5 2 (subtrao) >> 4 * 2 (multiplicao) >> 4 / 2 (diviso direta) >> 2 \ 4 (diviso inversa) >> 3^2 (potenciao)

Definio de variveis

Segue o modelo <nome da varivel> = <valor> >> x = 1 Ao colocar ; depois, o valor no aparece na tela: >>x=1; Para saber o contedo de uma varivel basta digitar o nome da mesma: >>x esse valor armazenado em ans

Quando o resultado de uma operao no atribudo a uma varivel, >> 2 + 3

Vetores e matrizes
Na definio de vetores e matrizes, um espao em branco ou uma vrgula separam elementos de colunas diferentes numa mesma linha. O ponto-e-vrgula separa elementos de linhas diferentes numa mesma coluna. v = [1, 2, 3] ou v = [1 2 3] (vetor linha) V = [1; 2; 3] (vetor coluna) >> A = [1, 2, 3; 4, 5, 6; 7, 8, 9] (matriz 3x3)

Exemplos:
>> v = [1; 2; 3]; (no aparece na tela) >> a = [1 2 3] >> b = [1; 2; 3] >> b (2) = 4 (acesso a uma posio do vetor) >> A = [1 2 3; 4 5 6; 7 8 9]; >> A = [1, 2, 3; 4, 5, 6; 7, 8, 9] >> A(1,1) = 0 (acesso a uma posio da matriz)

Exemplos:
Outras formas de definir vetores: Usando o operador : >> v = [0:9] >> v = [0:2:10] >> 1:9 Usando a funo linspace >> v = linspace(0, 20, 5)

Operaes simples com vetores e matrizes


Deve-se atentar para as dimenses das matrizes! Os operadores so os mesmos das operaes com escalares: +, -,
*, / , \ e ^

As operaes elemento-por-elemento so iguais s simples porm


precedidas de .

Funes importantes:
size(A) det(A) length(X) inv(A) Para acessar mais de uma posio da matriz: B = A(i:j, k:l) ou A(:,n)

Exemplos:
>> size([1 2 3; 4 5 6]) >> [1 2 3; 4 5 6; 7 8 9]*[1 2 3; 1 2 3; 1 2 3] >> [1 2 3; 4 5 6; 7 8 9]/[1 1 1] >> [1 2 3; 4 5 6; 7 8 9]/[1; 1; 1] >> [1; 1; 1]\[1 2 3; 4 5 6; 7 8 9] >> [1 2 3; 4 5 6; 7 8 9].*[1 2 3; 1 2 3; 1 2 3] >> [1 2 3; 4 5 6; 7 8 9]./[1 2 3; 1 2 3; 1 2 3] >> A = [1 3 4 6; 7 8 9 1; 15 6 0 9]; O comando ' calcula a transposta de uma matriz qualquer, ou seja, transforma as linhas em colunas, e vice-versa. Ex: A'

Exemplos:
>> det(A) >> inv (A) >> length([5 6 1 10 7 54]) >> length(A) >> rows(A) >> columns(A) >> B = A(1:2, 2:4) >> B = A(:,3) Algumas matrizes pr-definidas: eye(i,j) ones(i,j) zeros(i,j)

Ordenao
Fornecido um vetor de dados, a funo sort ordena os elementos de forma crescente. Matrizes so ordenadas de acordo com as colunas!

Exemplos:
>> x = randperm(8); >> xs = sort(x) ou [xs, idx] = sort(x) >> xsd = sort(x:-1:1) >> A = [randperm(6); randperm(6); randperm(6)] >> [As, idx] = sort(A) >> As = sort(A(:,3)) %somente a 3 coluna >> As = sort(A,2) % ao longo das linhas

Busca em Matrizes
I = find(x): fornece os ndices lineares dos elementos no-nulos de x [i, j] = find(x): fornece os ndices de linhas e colunas diag(x): gera uma matriz com a diagonal sendo os elementos de x diag(A): retorna os elementos da diagonal de A [mx, i] = max(x): retorna o valor mximo e seu ndice [mn, i] = min(x): retorna o valor mnimo e seu ndice

Exemplos:
>> x = -3:3; >> k = find(abs(x) > 1) >> A = [1 2 3; 4 5 6; 7 8 9]; >> [i,j] = find (A>5) >> A(i,j) >> diag(A(i,j)) >> v = rand(1,3) >> [mx,i] = max(v) >> [mn,j] = min(v)

Complexos
A estrutura de um complexo a + i*b, onde i = sqrt(-1) >> z = 4 + i*3; >> real(z) >> imag(z) >> abs(z) >> angle(z)

Operadores Relacionais
Como dados de entrada de expresses relacionais e lgicas, qualquer nmero diferente de zero Verdadeiro e o zero Falso A sada produz 1 para Verdadeiro e 0 para Falso Operadores relacionais: <, <=, >, >=, ==, ~= Operadores lgicos: & (AND), | (OR), ~ (NOT)

Exemplos:
>> A = 1:9; B = 9 A; >> vf = A>4 >> vf = (A==B) >> vf = B (A>2) >> vf = ~(A>4) >> vf = (A>2) & (A<6)

Funes lgicas e relacionais


xor(x,y): Retorna 1 se x ou y for diferente de zero e 0 se ambos forem Falso ou Verdadeiro any(x): Retorna 1 se algum elemento difere de zero all(x): Retorna 1 se todos os elementos diferem de zero Isequal(A,B): Verdadeiro se matrizes forem iguais isprime(x): Verdadeiro para primos

Fluxo de controle
For: for i = 1:5 (equivale a 1:1:5) v(i) = i+1; end While: i = 1; while i < 5 x(i) = i; i = i+1; end

Fluxo de controle
Break e If: >> v = [1 6 3 -2 5]; > > i = 1; >> while 1 if v(i ) < 0 break , else v( i ), end i = i +1; end

Fluxo de controle
Switch-case: >> x = 2.7; >> u = m; >> switch u > case {polegadas,pol} > > y = x*2.54; y = x/100; > case {metros,m} > otherwise disp([unidade desconhecida: u]) > end >> y

Arquivos-m
Podem ser script e funes: Nos scripts, os comandos so simplesmente executados em srie pelo Octave Funes podem ser definidas e utilizadas depois em outros arquivos ou chamadas na linha de comando A funo disp imprime algo na tela, o valor de uma varivel ou um comentrio echo define se as linhas digitadas devem ser impressas ou no, inclusive comandos com ; e comentrios Input solicita ao usurio que fornea algum dado de entrada

Exemplos:
%Arquivo seno.m x = 0:pi/8:2*pi; y = sin(x); echo on %calculando o seno plot(x,y,'r:+') title('seno') xlabel('eixo x') ylabel('eixo y') grid on echo off pause % isso um comentrio!!!! disp ('calculando o seno')

Exemplos:
function novo_vetor = shift (velho_vetor) %shift desloca os elementos de um vetor uma casa a direita %shift retorna o novo vetor %velho_vetor eh um vetor linha N = length (velho_vetor); for i = 1:N-1 novo_vetor (i+1) = velho_vetor (i); end novo_vetor (1) = 0;

Exemplos:
function mostra( M, comentario ) row = size(M,1); col = size(M,2); printf("%s\n", comentario); for i = 1:row for j = 1:col printf("%8.3f ",M(i,j)); % 8 campos, 3 aps a vrgula end printf("\n"); % nova linha end end

Armazenagem de dados
a = [1 2 3 4 5 6 7 8]; b = a*2; c = a - 1; save arquivo a b c dir clear whos load arquivo whos

Resoluo de sistemas lineares


Um sistema linear pode ser representado na forma de matrizes como A*x = b Uma soluo pode ser calculada diretamente fazendo x = A\b Pode-se tambm usar a decomposio LU: [L,U,P] = lu(A) eig(A): retorna os autovalores e os autovetores de uma matriz poly(A): determina o polinmio caracterstico

Exemplos:
>> A = [1 2 3; 4 5 6; 7 8 9]; >> b = [4; 6; 3]; >> x = A\b; >> [L,U,P] = lu(A) >> lambda = eig(A) (retorna os autovalores da matriz) >> [lambda, V] = eig(A) (retorna os autovalores lambda e autovetores V da matriz A) >> poly(A)

Polinmios
Um polinmio definido como um vetor contendo seus coeficientes roots(p): retorna as razes do polinmio p conv(p1,p2): faz a multiplicao do polinmio p1 pelo p2 [p,r] = deconv(p1,p2): armazena a diviso de p1 por p2 em p e o resto em r [r, p, k, e] = residue(a,b): faz a expanso em fraes parcias de a/b [a, b] = residue(r, p, k, e): faz o inverso

Exemplos:
>> p = conv([1 2 3],[1 -2 1]) >> [p,r] = deconv([1 2 4], [1 -2 1]) >> roots([1 3 2]) >> roots([1 -2 1]) >> [r, p, k, e] = residue([1, 1, 1], [1, -5, 8, -4]) % para octave >> [r,p,k] = residue([1,1,1],[1,-5,8,-4]) % para matlab >> [a, b] = residue ([-2; 7; 3], [2; 2; 1], [ ])

Ajuste de curvas
Quando deseja-se extrair informaes de uma tabela, pode-se aproximar um polinmio para a funo de estudo. poly(vetor): retorna um polinmio cujas razes so os elementos do vetor polyfit(x,y,n): retorna o polinmio de grau n que se ajusta aos pontos dos vetores dados por x e y polyval(p,x): avalia o polinmio p para cada elemento de x

Exemplos:
>> t = (-1:.1:1); >> x = t.^2; >> xr = x+0.2*(rand(size(x))-.5); >> figure(1); plot(t, xr, g*) >> p = polyfit(t, xr, 2) >> xa = polyval(p, t); >> figure(1); plot(t, xr, g*, t, xa) >> [x, y] = ginput(2)

Integrao
A integrao pode ser feita por aproximao trapezoidal usando trapz ou por aproximaes de ordem mais elevada, usando quad e quadl A integral de um polinmio pode ser calculada usando polyint e fornecendo o polinmio e uma constante de integrao trapz(x,y) quad(f,a,b) quadl(f,a,b) polyint(p,cte)

Exemplos:
>> x = 1:.1:2; >> y = exp(x); >> area = trapz(x,y) >> area = quad(@exp,1,2) >> area = quadl(@exp,1, 2)

Diferenciao
muito sensvel a pequenas alteraes na forma de uma funo. Com dados experimentais, melhor realizar um ajuste de curvas A derivada aproximada pode ser obtida por diferenas finitas, mas os resultados so piores Tambm possvel calcular o gradiente e o laplaciano de uma funo

Exemplos:
>> x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1]; >> y = [-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; >> p = polyfit(x,y,2); >> dp = polyder(p) >> Dy = diff(y)./diff(x); %Arquivo diff.m %calcula as diferenas e usa diviso vetorial % ajuste de curva de segunda ordem

Exemplos:
>> [x, y, z] = peaks (20); >> dx = x(1,2) x(1,1); >> dy = y(2,1) y(1,1); >> [dzdx, dzdy] = gradient(z, dx, dy) >> contour(x, y, z) >> hold on >> quiver(x, y, dzdx, dzdy) >> hold off >> L = del2(z, dx, dy); >> surf(x, y, z, abs(L))

Grficos
plot(x, y): Plota um grfico de y em funo de x plot(x, y, z, w): Plota dois grficos numa mesma figura ezplot('curva',[a,b]): Plota a curva no intervalo [a,b] %para Matlab plot(x, y, 'param'): 'param' define tipo de linha, formato do marcador e a cor do grfico. No h ordem especfica nem preciso determinar os trs. semilogx (x, y): Gera grficos com y na escala linear e x na escala logartmica semilogy (x, y): Gera grficos com x na escala linear e y na escala logartmica loglog (x, y): Gera grficos com x e y nas escalas logartmicas

Grficos
polar(ang, f, 'param'): Plota em coordenadas polares uma funo f. plot3(x, y, z): Plota grficos em 3D help plot plot( [ 1 , 2 , 3 ] , [ 4 , 3 , 6 ] , [ 1 , 2 , 3 ] , [ 5 , 7 , 6 ] ) ezplot('x^2 - 2*x + 1') ou ezplot('x^2 - 2*x + 1, [0,10]) Arquivo grafico1.m Arquivo grafico2.m Arquivo grafico3.m Arquivo grafico4.m

You might also like