palestra matlab octave
TRANSCRIPT
Programa de Educação Tutorial
1
Matlab / Octave
PET Engenharia de Computação
1
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
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
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'.
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
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
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
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)
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)
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)
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'
>> 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:
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!
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 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
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 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)
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)
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
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
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
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
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
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 após a vírgula
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
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
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)
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
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 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
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)
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)
Exemplos:
>> x = 1:.1:2;
>> y = exp(x);
>> area = trapz(x,y)
>> area = quad(@exp,1,2)
>> area = quadl(@exp,1, 2)
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
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
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))
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
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