Palestra Matlab Octave

41
Programa de Educação Tutorial 1 Matlab / Octave PET Engenharia de Computação 1

Transcript of Palestra Matlab Octave

Page 1: Palestra Matlab Octave

Programa de Educação Tutorial

1

Matlab / Octave

PET Engenharia de Computação

1

Page 2: Palestra Matlab Octave

22

Sumário

• Introdução• Ajuda• Operações básicas sobre

escalares• Definição de variáveis• Vetores e matrizes• Operações simples com vetores

e matrizes• Ordenação• Busca em Matrizes

• Complexos• Operadores Relacionais• Funções lógicas e relacionais• Fluxo de controle• Arquivos-m• Armazenagem de dados• Resolução de sistemas lineares• Polinômios• Ajuste de curvas• Gráficos

Page 3: Palestra Matlab Octave

3

• Matlab e Octave são ferramentas para uso no processamento numérico

• Possuem recursos de programação, como uma linguagem procedural de alto nível

• Matlab: http://www.mathworks.com

• Octave: http://www.gnu.org/software/octave/

3

Introdução

Page 4: Palestra Matlab Octave

Ajuda

• Comando help: Apresenta a descrição da função.

• Ex: help sin

• Comando lookfor: Procura nas funções do Octave e do Matlab, alguma que possua em sua descrição a palavra procurada.

• Ex: lookfor sine

• Para sair do help digite 'q'.

Page 5: Palestra Matlab Octave

5

• >> 3 + 8 (soma)

• >> 5 – 2 (subtração)

• >> 4 * 2 (multiplicação)

• >> 4 / 2 (divisão direta)

• >> 2 \ 4 (divisão inversa)

• >> 3^2 (potenciação)

5

Operações básicas sobre escalares

Page 6: Palestra Matlab Octave

Definição de variáveis

• Segue o modelo <nome da variável> = <valor>

• >> x = 1

• Ao colocar “;” depois, o valor não aparece na tela: >>x=1;

• Para saber o conteúdo de uma variável basta digitar o nome da mesma: >>x

• Quando o resultado de uma operação não é atribuído a uma variável, esse valor é armazenado em ans

• >> 2 + 3

Page 7: Palestra Matlab Octave

7

• Na definição de vetores e matrizes, um espaço em branco ou uma vírgula separam elementos de colunas diferentes numa mesma linha.

• O ponto-e-vírgula 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; (matriz 3x3)

• 4, 5, 6;

• 7, 8, 9]

7

Vetores e matrizes

Page 8: Palestra Matlab Octave

Exemplos:

>> v = [1; 2; 3]; (não aparece na tela)

>> a = [1 2 3]

>> b = [1; 2; 3]

>> b (2) = 4 (acesso a uma posição 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 posição da matriz)

Page 9: Palestra Matlab Octave

Exemplos:

• Outras formas de definir vetores:

• Usando o operador “:”

>> v = [0:9]

>> v = [0:2:10]

>> 1:9

• Usando a função linspace

>> v = linspace(0, 20, 5)

Page 10: Palestra Matlab Octave

Operações simples com vetores e matrizes

• Deve-se atentar para as dimensões das matrizes!

• Os operadores são os mesmos das operações com escalares: +, -, *, / , \ e ^

• As operações elemento-por-elemento são iguais às simples porém precedidas de “.”

• Funções importantes:

• size(A)

• det(A)

• length(X)

• inv(A)

• Para acessar mais de uma posição da matriz:

• B = A(i:j, k:l) ou A(:,n)

Page 11: Palestra Matlab Octave

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'

Page 12: Palestra Matlab Octave

>> 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)

Exemplos:

Page 13: Palestra Matlab Octave

Ordenação

• Fornecido um vetor de dados, a função sort ordena os elementos de forma crescente.

• Matrizes são ordenadas de acordo com as colunas!

Page 14: Palestra Matlab Octave

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

Page 15: Palestra Matlab Octave

Busca em Matrizes

• I = find(x): fornece os índices lineares dos elementos não-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 máximo e seu índice

• [mn, i] = min(x): retorna o valor mínimo e seu índice

Page 16: Palestra Matlab Octave

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)

Page 17: Palestra Matlab Octave

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)

Page 18: Palestra Matlab Octave

Operadores Relacionais

• Como dados de entrada de expressões relacionais e lógicas, qualquer número diferente de zero é Verdadeiro e o zero é Falso

• A saída produz 1 para Verdadeiro e 0 para Falso

• Operadores relacionais:

– <, <=, >, >=, ==, ~=

• Operadores lógicos:

– & (AND), | (OR), ~ (NOT)

Page 19: Palestra Matlab Octave

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)

Page 20: Palestra Matlab Octave

Funções lógicas 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

Page 21: Palestra Matlab Octave

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

Page 22: Palestra Matlab Octave

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

Page 23: Palestra Matlab Octave

Switch-case:

>> x = 2.7;

>> u = ‘m’;

>> switch u

> case {‘polegadas’,’pol’}

> y = x*2.54;

> case {‘metros’,’m’}

> y = x/100;

> otherwise disp([‘unidade desconhecida: ’ u])

> end

>> y

Fluxo de controle

Page 24: Palestra Matlab Octave

Arquivos-m

• Podem ser script e funções:

– Nos scripts, os comandos são simplesmente executados em série pelo Octave

– Funções podem ser definidas e utilizadas depois em outros arquivos ou chamadas na linha de comando

• A função disp imprime algo na tela, o valor de uma variável ou um comentário

• echo define se as linhas digitadas devem ser impressas ou não, inclusive comandos com “;” e comentários

• Input solicita ao usuário que forneça algum dado de entrada

Page 25: Palestra Matlab Octave

Exemplos:%Arquivo seno.m

x = 0:pi/8:2*pi;

y = sin(x); % isso é um comentário!!!!

disp ('calculando o seno')

echo on

%calculando o seno

plot(x,y,'r:+')

title('seno')

xlabel('eixo x')

ylabel('eixo y')

grid on

echo off

pause

Page 26: Palestra Matlab Octave

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;

Page 27: Palestra Matlab Octave

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 após a vírgula

end

printf("\n"); % nova linha

end

end

Page 28: Palestra Matlab Octave

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

Page 29: Palestra Matlab Octave

Resolução de sistemas lineares

• Um sistema linear pode ser representado na forma de matrizes como A*x = b

• Uma solução pode ser calculada diretamente fazendo x = A\b

• Pode-se também usar a decomposição LU:

– [L,U,P] = lu(A)

• eig(A): retorna os autovalores e os autovetores de uma matriz

• poly(A): determina o polinômio característico

Page 30: Palestra Matlab Octave

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)

Page 31: Palestra Matlab Octave

Polinômios

• Um polinômio é definido como um vetor contendo seus coeficientes

• roots(p): retorna as raízes do polinômio p

• conv(p1,p2): faz a multiplicação do polinômio p1 pelo p2

• [p,r] = deconv(p1,p2): armazena a divisão de p1 por p2 em p e o resto em r

• [r, p, k, e] = residue(a,b): faz a expansão em frações parcias de a/b

• [a, b] = residue(r, p, k, e): faz o inverso

Page 32: Palestra Matlab Octave

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], [ ])

Page 33: Palestra Matlab Octave

Ajuste de curvas

• Quando deseja-se extrair informações de uma tabela, pode-se aproximar um polinômio para a função de estudo.

• poly(vetor): retorna um polinômio cujas raízes são os elementos do vetor

• polyfit(x,y,n): retorna o polinômio de grau n que se ajusta aos pontos dos vetores dados por x e y

• polyval(p,x): avalia o polinômio p para cada elemento de x

Page 34: Palestra Matlab Octave

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)

Page 35: Palestra Matlab Octave

Integração

• A integração pode ser feita por aproximação trapezoidal usando trapz ou por aproximações de ordem mais elevada, usando quad e quadl

• A integral de um polinômio pode ser calculada usando polyint e fornecendo o polinômio e uma constante de integração

• trapz(x,y)

• quad(f,a,b)

• quadl(f,a,b)

• polyint(p,cte)

Page 36: Palestra Matlab Octave

Exemplos:

>> x = 1:.1:2;

>> y = exp(x);

>> area = trapz(x,y)

>> area = quad(@exp,1,2)

>> area = quadl(@exp,1, 2)

Page 37: Palestra Matlab Octave

Diferenciação

• É muito sensível a pequenas alterações na forma de uma função.

• Com dados experimentais, é melhor realizar um ajuste de curvas

• A derivada aproximada pode ser obtida por diferenças finitas, mas os resultados são piores

• Também é possível calcular o gradiente e o laplaciano de uma função

Page 38: Palestra Matlab Octave

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); % ajuste de curva de segunda ordem

>> dp = polyder(p)

>> Dy = diff(y)./diff(x); %calcula as diferenças e usa divisão vetorial

%Arquivo diff.m

Page 39: Palestra Matlab Octave

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))

Page 40: Palestra Matlab Octave

Gráficos

• plot(x, y): Plota um gráfico de y em função de x

• plot(x, y, z, w): Plota dois gráficos 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 gráfico. Não há ordem específica nem é preciso determinar os três.

• semilogx (x, y): Gera gráficos com y na escala linear e x na escala logarítmica

• semilogy (x, y): Gera gráficos com x na escala linear e y na escala logarítmica

• loglog (x, y): Gera gráficos com x e y nas escalas logarítmicas

Page 41: Palestra Matlab Octave

Gráficos

• polar(ang, f, 'param'): Plota em coordenadas polares uma função f.

• plot3(x, y, z): Plota gráficos 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