Programa de Educação Tutorial

Matlab / Octave

PET Engenharia de Computação
1

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
2

• • •

• •

Introdução
• 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

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'.

Operações básicas sobre escalares • >> 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 .

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. • >> 2 + 3 . Para saber o conteúdo de uma variável basta digitar o nome da mesma: >>x esse valor é armazenado em ans • Quando o resultado de uma operação não é atribuído a uma variável.

9] (matriz 3x3) 7 .Vetores e matrizes • Na definição de vetores e matrizes. 7. 2. 6. 3] (vetor coluna) • >> A = [1. 5. 3] ou v = [1 2 3] (vetor linha) • V = [1. 8. • O ponto-e-vírgula separa elementos de linhas diferentes numa mesma coluna. • • 4. um espaço em branco ou uma vírgula separam elementos de colunas diferentes numa mesma linha. 2. 2. • v = [1. 3.

4 5 6. 6. 5.1) = 0 (acesso a uma posição da matriz) . (não aparece na tela) >> a = [1 2 3] >> b = [1. 2. 4. 8. 3] >> b (2) = 4 (acesso a uma posição do vetor) >> A = [1 2 3. >> A = [1. 3]. 3. 7 8 9].Exemplos: >> v = [1. 9] >> A(1. 7. 2. 2.

20. 5) .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.

-. k:l) ou A(:. / . *.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: +.” • Funções importantes: • size(A) • det(A) • length(X) • inv(A) • Para acessar mais de uma posição da matriz: • B = A(i:j.n) . \ e ^ • As operações elemento-por-elemento são iguais às simples porém precedidas de “.

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

3) • Algumas matrizes pré-definidas: –eye(i.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(:.j) .j) –zeros(i.j) –ones(i.

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! .

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

i] = max(x): retorna o valor máximo e seu índice • [mn. i] = min(x): retorna o valor mínimo e seu índice . 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.Busca em Matrizes • I = find(x): fornece os índices lineares dos elementos não-nulos de x • [i.

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

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

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). >. ~ (NOT) . ==. | (OR).Operadores Relacionais • Como dados de entrada de expressões relacionais e lógicas.

B = 9 – A.Exemplos: >> A = 1:9. >> 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.B): Verdadeiro se matrizes forem iguais • isprime(x): Verdadeiro para primos .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.

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

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

y = x/100.54. > case {‘metros’.7.’pol’} > > y = x*2.Fluxo de controle Switch-case: >> x = 2. >> u = ‘m’. >> switch u > case {‘polegadas’.’m’} > otherwise disp([‘unidade desconhecida: ’ u]) > end >> y .

Arquivos-m • Podem ser script e funções: – Nos scripts.” e comentários • Input solicita ao usuário que forneça algum dado de entrada . 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 “.

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

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). end novo_vetor (1) = 0. for i = 1:N-1 novo_vetor (i+1) = velho_vetor (i). .

for i = 1:row for j = 1:col printf("%8. comentario ) row = size(M. col = size(M. % 8 campos.Exemplos: function mostra( M. % nova linha end end . comentario).j)).M(i.1).2). printf("%s\n".3f ". 3 após a vírgula end printf("\n").

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

U.P] = lu(A) • eig(A): retorna os autovalores e os autovetores de uma matriz • poly(A): determina o polinômio característico .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.

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

p2): armazena a divisão de p1 por p2 em p e o resto em r • [r. p. k.p2): faz a multiplicação do polinômio p1 pelo p2 • [p.b): faz a expansão em frações parcias de a/b • [a.r] = deconv(p1. b] = residue(r. e): faz o inverso .Polinômios • Um polinômio é definido como um vetor contendo seus coeficientes • roots(p): retorna as raízes do polinômio p • conv(p1. k. e] = residue(a. p.

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

n): retorna o polinômio de grau n que se ajusta aos pontos dos vetores dados por x e y • polyval(p. pode-se aproximar um polinômio para a função de estudo.y.x): avalia o polinômio p para cada elemento de x .Ajuste de curvas • Quando deseja-se extrair informações de uma tabela. • poly(vetor): retorna um polinômio cujas raízes são os elementos do vetor • polyfit(x.

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

b) • polyint(p. 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.Integração • A integração pode ser feita por aproximação trapezoidal usando trapz ou por aproximações de ordem mais elevada.y) • quad(f.a.a.cte) .b) • quadl(f.

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

é melhor realizar um ajuste de curvas • A derivada aproximada pode ser obtida por diferenças finitas.Diferenciação • É muito sensível a pequenas alterações na forma de uma função. mas os resultados são piores • Também é possível calcular o gradiente e o laplaciano de uma função . • Com dados experimentais.

>> y = [-.4 .34 7.66 9.6 .447 1.48 9.978 3.2 .30 11.9 1]. >> p = polyfit(x.7 . %Arquivo diff.56 9.28 6.5 .2].3 .y.08 7.16 7.Exemplos: >> x = [0 .1 . >> dp = polyder(p) >> Dy = diff(y).8 .m %calcula as diferenças e usa divisão vetorial % ajuste de curva de segunda ordem ./diff(x).2).

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

'param'): 'param' define tipo de linha. formato do marcador e a cor do gráfico.Gráficos • plot(x. Não há ordem específica nem é preciso determinar os três. y): Gera gráficos com x e y nas escalas logarítmicas . • semilogx (x.[a. y. z. y): Gera gráficos com x na escala linear e y na escala logarítmica • loglog (x. y): Gera gráficos com y na escala linear e x na escala logarítmica • semilogy (x.b] %para Matlab • plot(x. y. y): Plota um gráfico de y em função de x • plot(x.b]): Plota a curva no intervalo [a. w): Plota dois gráficos numa mesma figura • ezplot('curva'.

2 . [0.Gráficos • polar(ang. 2 . 'param'): Plota em coordenadas polares uma função f.m • Arquivo grafico4. [ 5 . 7 . 6 ] ) • ezplot('x^2 . z): Plota gráficos em 3D • help plot • plot( [ 1 .m • Arquivo grafico2. 3 ] .2*x + 1‘.2*x + 1') ou ezplot('x^2 .m . 6 ] . y. f.10]) • Arquivo grafico1. 3 ] . • plot3(x. 3 .m • Arquivo grafico3. [ 1 . [ 4 .