• Nenhum resultado encontrado

Introdução. Iniciação ao MatLab. Introdução. Introdução. Introdução. Exemplo transpor uma matriz. Eugênio Silva. E Adriano Cruz

N/A
N/A
Protected

Academic year: 2021

Share "Introdução. Iniciação ao MatLab. Introdução. Introdução. Introdução. Exemplo transpor uma matriz. Eugênio Silva. E Adriano Cruz"

Copied!
18
0
0

Texto

(1)

Iniciação ao MatLab

Eugênio Silva E Adriano Cruz

Introdução

Introdução

MatLab – Matrix Laboratory (Universidades de Stanford e Novo México - 1970)

originalmente escrito para trabalhar com matrizes e vetores

evoluiu ao longo do anos até se tornar uma ferramenta de ampla abrangência.

Introdução

o MatLab é uma poderosa ferramenta matemática e uma linguagem de programação de alto-desempenho para a computação científica

integra cálculos matemáticos, visualização e programação em um ambiente interativo

é de fácil utilização

Exemplo – transpor uma matriz

Pascal

var

a, b : array [1..3, 1..3] of integer;

i, j : integer;

begin . . . for i = 1 to 3

for j = 1 to 3 b(j,i) := a(i,j);

end;

end;

MatLab

>> a = [1 2 3; 4 5 6; 7 8 9]

a = 1 2 3 4 5 6 7 8 9

>> b = a’

b = 1 4 7 2 5 8 3 6 9

Introdução

o elemento de dados básico é uma matriz

matrizes e vetores são manipulados com mais facilidade e rapidez que em programas escritos em linguagens não-interativas como Pascal, C ou Fortran

(2)

Introdução

Linha de comandos – é possível usar o matlab através de comandos emitidos a partir de linha de comandos

scripts – arquivos que contém comandos matlab

Introdução

toolboxes - bibliotecas de funções que permitem a resolução de classes particulares de problemas

simulink - acessório que acrescenta uma interface de diagramas de blocos e recursos de simulação real aos demais recursos numéricos, gráficos e de linguagem

Aplicações

matemática e computação

desenvolvimento de algoritmos

modelagem, simulação e prototipação

análise de dados, exploração e visualização

gráficos científicos em duas e três dimensões

Help

On line

Linha de comandos - help

help elfun help abs

demos - demo

Comandos

Operações Elementares

>> 4 + 6 – 2 ans =

8

>> 4 * 2 + 6 * 5 + 2 * 9

ans = 56

>> 25 / 5 + 5 \ 25 ans =

10

>> 3 ^ 2 * 2 ^ 2 + 2 ans =

38

(3)

Prioridades

Parênteses

Potência

3 * 2 ^ 3 = 24

* e /

Resolvendo da esquerda para direita 8 / 4 * 3 = 6

+ e -

Resolvendo da esquerda para direita

Números

Inteiros: 32, -12345

Reais: 3.1789, -23.0, 1.0e-3

Complexos: 3.2 – 23.5i

Inf: Infinito (resultado da divisão por 0)

NaN: Not a number 0/0

Contas são feitas com 15 dígitos aproximadamente

Comando format controla impressão dos resultados.

Definição de Variáveis

>> a = 10 a =

10

>> b = 20;

O ‘;’ evita que o resultado apareça na tela.

>> c = 1 + 2i ou c = 1 + 2j c =

1.0000 – 2.0000i

Nomes de Variáveis

Combinações de letras e números, começando com letra

n1, ab, temp

Nomes especiais

eps = 2.220446049250313e-16 (o menor número tal que 1 + eps é indistinguível de 1)

pi i, k

Variáveis Pré-definidas

ans: váriavel padrão usada para resultados de expressões do tipo

>> 3 + 5

pi

iouj: igual a raiz quadrada de -1

realmax: maior número real utilizável 1.797693134862316e+308

realmin: menor número real utilizável 2.225073858507201e-308

Variáveis Pré-definidas

nargin: número de argumentos de entrada

nargout: número de argumentos de saída

(4)

Funções Elementares

abs(x) valor absoluto de x

sin(x) seno de x

asin(x) arc seno x

cos(x) co-seno x

acos(x) arc co-sen x

tan(x) tangente x

exp(x) e elevado a x

Funções Elementares

log(x) log inverso de exp(x)

log10(x) log base 10 de x

gcd(x,y) mdc de x e y

lcm(x,y) mmc entre x e y

max(x) máximo de x

min(x) mínimo de x

inv(x) matriz inversa de x

...

Espaço de Trabalho

>>who lista variáveis na memória

>> whos lista variáveis detalhadamente

>> clear apaga variáveis da memória

>> save salva variáveis em arq .mat

>> load carrega variáveis de um .mat

>> format formato de apresentação dos resultados

Comandos do SO

>> dir ou ls arquivos do diretório

>> cd ou pwd diretório corrente

>> cd . . diretório acima do corrente

>> cd \ diretório raiz

>> delete <arquivo> apaga arquivo

>> edit <arquivo> abre arquivo para edição

>> type <arquivo> mostra o conteúdo do arquivo

>> quit ou exit sai do ambiente

Vetores

Vetores em linha

>> x = [ 1 3 5 ];

>> lenght(x) ans =

3

>> y = [ 3 4 5 ];

>> x + y ans =

4 7 10

>> z = 3 * y ans =

9 12 15

(5)

Vetores

>> x = [ 1 3 5 ];

>> v1 = [ 3 4 5 6];

>> x + v1

??? Error using ==> plus Matrix dimensions must agree.

Gerando vetores

>> x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1] .* pi ou

>> x = (0:0.1:1).* pi ou

>> x = linspace(0,pi,11)

>> y =sin(x)

Gerando vetores

linspace(x1,x2) gera um vetor linha com 100 pontos igualmente espaçados.

linspace(x1,x2,n) gera vetor com n pontos entre x1 e x2

>>linspace(0,pi,11)

Gerando vetores

a : b : c gera vetor começandoem a, incrementandopor b, atéchegarem c. Não gera além de c.

>> 0:0.1:1 ans =

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

a : b gera vetor começando em a até chegar em b incrementando por 1

Manipulando vetores

x = (0:0.1:1)*pi

x = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416

x(6) = 1.5708

x(1:5) = 0 0.3142 0.6283 0.9425 1.2566

x(7:end) = 1.8850 2.1991 2.5133 2.8274 3.1416

x(3:-1:1) = 0.6283 0.3142 0

x(2:2:7) = 0.3142 0.9425 1.5708

Manipulando vetores, matrizes

x = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416

x([8 2 9 1]) = 2.1991 0.3142 2.5133 0

z = x[(2:5) 4 5 7] = 0.3142 0.6283 0.9425 1.2566 4.0000 5.0000 7.0000

w = [ x y ] %vetor linha

k = [ x; y ] % matriz com duas linhas

(6)

Manipulando vetores, matrizes

A = [1 2 3; 4 5 6; 7 8 9];

A(3,3) = 9

A(2, 2:3) = 5 6

A(3,:) = 7 8 9 % : todas as colunas

Manipulando vetores, matrizes

B = A(3:-1:1, : )

B = [78 9; 45 6; 12 3]

C = [A B( : , [1 3])]

C = [1 2 3 7 9; 4 5 6 4 6; 7 8 9 1 3]

B(:,2) = [ ]

B = [7 9; 4 6; 1 3]

B = A(:,[2 2 2 2])

B = [2 2 2 2; 5 5 5 5; 8 8 8]

Operações Especiais

>>eye(linhas,colunas) Cria matriz identidade

>> det(m) Determinante de m

>> zeros(n1,n2,n3,...) Matriz de zeros

>> inv(m) Inversa de m

>> ones(n1,n2,...) Matriz de uns

>> m’

Transposta de m

>> rand (n1,n2,...)

Matriz de rand entre 0 e 1.0

Matrizes

1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

matriz(10) ou matriz(2,3)

Busca de Sub-Matrizes

>> x = -3:3 x =

-3 -2 -1 0 1 2 3

>> k = find(abs(x) > 1) k =

1 2 6 7

>> y = x(k) -3 -2 2 3

>> A= [1 2 3; 4 5 6; 7 8 9]

A = 1 2 3 4 5 6 7 8 9

>> [ i , j ] = find(A > 5) i = 3 j = 1

3 2 2 3 3 3

Dimensões de Vetores e Matrizes

whos lista as variáveis e suas dimensões s = size(A) retorna o número de linhas e colunas de

A

[x,y] = size(A) x contém o núm de linhas e y o de colunas

x = size(A,1) retorna o número de linhas de A y = size(A,2) retorna o número de colunas de A n = length(A) retorna max(size(A))

(7)

Operações com Vetores e Matrizes

a = [a1 a2... an], b = [b1 b2... bn], c = <um escalar>

adição a escalar a + c = [a1 + c ... an+ c]

multiplicação por escalar a * c = [a1* c ... an* c]

soma de vetores a + b = [a1 + b1... an+ bn] multiplicação de vetores a .* b = [a1 *b1... an*bn]

Operações com Vetores e Matrizes

a = [a1 a2... an], b = [b1 b2... bn], c = <um escalar>

Divisão vetores (a/b) a ./ b = [a1 /b1 ... an/bn] Divisão vetores (b/a) a .\ b = [a1\b1 ... an\bn] Potenciação vetorial c.^a = [c^a1 ... c^an]

Alguns exemplos

x = [ 1 2 3 4], y = [ 1 1/2 1/3 1/4];

x .* y % dot product 1 1 1 1

x * y' % scalar product 4

sqrt( x * x') %Comprimento vetor 5.4722

Mais exemplos: resolução de sistemas de equações

2x

1 - x

2 = 1

X

1 - 2x

2 + x

3 = 0

- x

2 + 2x

3 = 1

Ax = b; x = A-1b; x = A \ b

Mais exemplos: resolução de sistemas de equações

A = [ 2 -1 0; 1 -2 1; 0 -1 2];

b = [1; 0; 1]

Em notação matricial Ax = b

x = A-1b;

X = inv(A) * b;

x = A \ b;

Gráficos

(8)

Gráficos Bidimensionais

>> x = linspace(0, 2 * pi, 30);

>> y = sin(x);

>> z = cos(x);

>> plot(x,y,x,z)

Títulos, Rótulos e Grids

>> x = linspace(0, 2 * pi, 30);

>> y = sin(x);

>> plot(x,y,x,z);

>> title('Grafico de y = sen(x)');

>> xlabel('Eixo x');

>> ylabel('Seno(x)');

Legendas

>> x = linspace(0, 2 * pi, 30);

>> y = sin(x);

>> z = cos(x);

>> plot(x,y,x,z);

>> legend('curva sen', 'curva cos');

Linhas: Estilos e Cores

>> x = linspace(0, 2 * pi, 30);

>> y = sin(x);

>> z = cos(x);

>> subplot(2,1,1)

>> plot(x,y,’go’)

>> subplot(2,1,2)

>> plot(x,z,’r*’)

Hold

Comando plot limpa a janela do gráfico antes de desenhar o novo gráfico

Isto não é conveniente se desejarmos adicionar outros gráficos no futuro

Usar hold para evitar limpeza da janela

plot(x,y,'w-'), hold on

plot(x,y,'gx'), hold off

hold off não limpa a janela (usar clf)

Subplots

A janela do gráfico é dividida em uma matriz m x n de pequenas janelas.

As janelas são contadas entre 1 e m x n

Cada subfigura é tratada como uma figura podendo ter mais de uma curva, estilos, legendas, cores etc

(9)

Subplots

x = linspace(0,2*pi,30);

y1 = sin(x);

y2 = sin(2*x);

y3 = sin(3*x);

y4 = sin(4*x);

subplot(221), plot(x,y1), legend('y = sen(x)');

subplot(222), plot(x,y2), legend('y = sen(2*x)');

subplot(223), plot(x,y2), legend('y = sen(3*x)');

subplot(224), plot(x,y4), legend('y = sen(4*x)');

Subplots

Gráficos Bidimensionais

>> x = -2.9 : 0.2 : 2.9;

>> y = randn(5000,1);

>> hist(y,x)

Textos Formatados

Possível aumentar ou diminuir fontes

Alguns comandos latex podem ser usados

É possível obter os valores de qualquer propriedade através do “handle” da figura

handle = plot(x,y);

get (handle, 'markersize');

Controlando os eixos

Uma vez que um gráfico foi criado é possível mudar a excursão dos valores x e y mostrados na figura.

clf, N=100; h=1/N; x = 0:h:1;

y = sin(3*pi*x), plot(x,y);

axis([-0.5 1.5 -1.2 1.2]), grid;

Controlando os eixos

(10)

Gráficos Tridimensionais

>> t = 0 : pi / 50 : 10 * pi;

>> plot3(sin(t),cos(t),t);

>> title(‘hélice’)

>> xlabel(‘sen(t)’)

>> ylabel(‘cos(t)’)

>> zlabel(‘t’)

>> grid

Gráficos Tridimensionais

%z = f(x,y)

x = -0.5*pi:0.1:0.5*pi;

y = x; % minusculas [X Y] = meshgrid(x,y);

Z = sin(2*X)+sin(3*Y); % maiusculas mesh(X,Y,Z);

title('Ex de graf 3D');

Gráficos Tridimensionais O mesmo com surf

O mesmo com surfl Gráficos Tridimensionais

>> surf(peaks)

(11)

Scripts

Arquivos M (Scripts)

Armazenam uma sequência de comandos em um arquivo texto que é executado a partir do prompt

Úteis quando o número de comandos a serem executados é grande, ou caso seja necessário alterar os valores das variáveis e re-executar alguns comandos

Devem ter a extensão .m

Scripts em Matlab

Scripts não aceitam e não retornam argumentos.

Scripts podem alterar as variáveis do espaço de trabalho (workspace) atual.

Scripts podem conter comandos que interagem com o usuário e/ou arquivos.

Use scripts para:

Automatizar a execução de uma seqüência de comandos frequentemente utilizados Documentar os passos de um processo

Scripts em Matlab

%Exemplo de script

%

clear all;

x = 0:0.01:2*pi;

eixos = [0 2*pi -2 +2];

y1 = sin(x);

y2 = cos(x);

y3 = tan(x);

y4 = zeros(size(x));

plot (x,y1,x,y2,x,y3,x,y4,'k');

axis (eixos);

legend('Seno', 'Coseno','Tangente');

title('Graficos de seno, coseno e tangente.');

xlabel('Angulos');

ylabel('Seno, coseno e tangente');

Scripts em Matlab Scripts

Para executar um script armazenado em um arquivo digite o nome do arquivo sem o .m

O que aparece na tela são os resultados da execução dos comandos.

echo on faz com que os comandos apareçam antes da execução.

echo off faz com que os comandos

(12)

Alguns Comandos e Funções

Estrutura Condicional – if

>> if expressão_1 comandos_1;

elseif expressão_2 comandos_2;

else

comandos_3;

end

Operadores Relacionais e Lógicos

< menor que

<= menor ou igual

> maior que

>= maior ou igual

= igual

~= diferente

& e

| ou

~ não

Funções Relacionais e Lógicas

xor(x,y) ou exclusivo

ischar(x) 1 se x é um vetor de caracteres

isequal(x,y) 1 se x e y são iguais isempty(x) 1 se x é vazio ismember(x,y

)

1 se os elementos de x pertencem a y

isstruct(x) 1 se x é uma estrutura

Estrutura Condicional – switch - case

>> switch expressão

case teste_expressão_1 comandos_1 case teste_expressão_2

comandos_2 otherwise

comandos_3 end

Laços de Repetição – for / while

>> for x = vetor comandos;

end

>> while expressão comandos;

end

(13)

Laços de Repetição clf;

x = -2:0.1:2;

hold on;

for n = 1:8

plot(x,n*x .*x );

end

hold off;

Laços de Repetição

Otimização de Código

o laço de repetição for i = 0:999

x(i+1) = sin(2*pi*i/100);

end

pode ser substituído por

x = sin(2*pi*[0:999]/100);

Funções dos Arquivos M

disp(x) Mostra resultado sem identificar variável

echo controla a exibição dos comandos input solicita ao usuário a entrada keyboard transfere o controle para o teclado pause(n) suspende execução por n segundos pause suspende até que tecla seja

pressionada

Análise de Dados

cov(x) matriz de covariância min(x) componente mínima max(x) componente máxima mean(x) média

rand(x) núm. aleatórios uniformemente distrib var(x) variância

std(x) desvio padrão

sum(x) soma dos elementos da coluna

Funções criadas pelos

usuários

(14)

Funções em Matlab

Uma função em Matlab é um arquivo de texto.

Arquivos de funções devem ter um nome igual ao nome da função.

Um conjunto de funções e scripts pode ser agrupado em um único diretório. O conjunto é chamado de toolbox.

Toolboxes extendem as capacidades do Matlab

Funções criadas pelo usuário

a partir da segunda vez a execução de uma função é mais rápida que da primeira

as linhas de comentário que antecedem a primeira linha sem comentário aparecem quando se pede ajuda

Arquivos M de funções

variáveis criadas dentro de uma função permanecem apenas no espaço de trabalho da função

funções podem compartilhar variáveis com outras funções desde que sejam declaradas como globais

arquivos M de funções podem conter mais de uma função, a função primária e as sub-funções

Funções em Matlab

function [d] = distPontos(p1,p2)

%

% Calcula a distancia entre dois pontos

% p1 = [x1 y1] e p2 = [x2 y2]

% em um espaco bi-dimensional

% Entradas:

% p1, p2: dois pontos

% Saída:

% d: distancia entre p1 e p2

% Uso:

% d = distPontos(p1, p2)

% Autor:

% Adriano Cruz

% Data:

% 2010/03/02

d = sqrt((p1(1) - p2(2))^2 + (p1(2) - p2(2))^2);

Funções em Matlab

p1 = [ 1 1 ];

p2 = [ 0 0 ];

d = distPontos(p1, p2)

Arquivos

(15)

Arquivos Formatados

Parecido com C

Lembrar que matlab anda no sentido da coluna.

Ao ler dados para uma matriz irá preencher no sentido da coluna

Ao escrever dados de uma matriz irá ler no sentido da coluna

Arquivos Formatados

(1,1) = (1) (1,2) = (5) (1,3) = (9) (1,4)=(13) (2,1) = (2) (2,2) = (6) (2,3)=(10) (2,4)=(14) (3,1) = (3) (3,2) = (7) (3,3)=(11) (3,4)=(15) (4,1) = (4) (4,2) = (8) (4,3)=(12) (4,4)=(16

Arquivos Formatados

Considere o arquivo 1 1

2 4 3 9 4 16 5 25

Arquivos Formatados

Será armazenado em um vetor como 1 1 2 4 3 9 4 16 5 25

Arquivos Formatados

Novamente Considere o arquivo 1 1

2 4 3 9 4 16 5 25

Arquivos Formatados Leitura

fid=fopen('dadosin.txt', 'r');

a = fscanf(fid, '%d');

fclose(fid);

a=reshape(a,2,size(a,1)/2)';

(16)

Arquivos Formatados Escrita

x = -3:1:3;

y = x.^2;

fid = fopen('dados.txt', 'w');

temp = [ x; y ]

fprintf(fid,'%f %f\n', temp);

fclose(fid);

Arquivos Formatados Escrita

-3.000000 9.000000 -2.000000 4.000000 -1.000000 1.000000 0.000000 0.000000 1.000000 1.000000 2.000000 4.000000 3.000000 9.000000

Extras

Temporização

tic: começa a contar o tempo.

toc: termina de contar o tempo.

Temporização

tic: começa a contar o tempo.

toc: termina de contar o tempo.

Matrizes Celulares

são matrizes cujos elementos são células

qualquer célula da matriz pode conter qualquer tipo de dado (matrizes numéricas, texto, matrizes celulares, etc.)

(17)

Matrizes Celulares

>> A(1,1) = { [1 2 3; 4 5 6; 7 8 9] };

>> A(1,2) = { 2 + 3i };

>> A(2,1) = { ‘um texto’ }

>> A(2,2) = {12 : -2 : 0};

>>A =

[3x3 double] [2.0000+ 3.0000i]

'um texto' [1x7 double]

Matrizes Celulares

>> A{1,1} = [1 2 3; 4 5 6; 7 8 9];

>> A{1,2} = 2 + 3i;

>> A{2,1} = ‘um texto’

>> A{2,2} = 12 : -2 : 0;

>>A =

[3x3 double] [2.0000+ 3.0000i]

'um texto' [1x7 double]

Matrizes Celulares

>> cellplot(A);

Estruturas

são objetos que contêm “recipientes de dados” com nomes diferentes

esses recipientes são chamados de campos

os campos podem conter qualquer tipo de dado

ao se referir aos campos de uma estrutura usa-se seus nomes em vez de usar índices

estruturas podem conter outras estruturas

Estruturas

>> cliente.nome = ‘João da Silva’;

>> cliente.custo = 86.50;

>> cliente.teste.A1C = [6.3 6.8 7.1 7.0 6.7];

>> cliente.teste.CHC = [2.8 3.4 3.6 4.1 3.5];

Ajuda On-Line

help

helpwin

helpdesk

lookfor

demo

arquivos de ajuda

(18)

Para Saber Mais

Hanselman, Duane; Littlefield, Bruce; Matlab 5 Guia do Usuário (versão do estudante), Makron Books, 1997.

Matsumoto, Élia Yathie; Matlab 6 - Fundamentos de Programação, Editora Érica, 2001.

Demonstrações

matrices/graphs and matrices matrices/matrix manipulation visualization/vibration movie visualization/visualizing sound gallery/knot

gallery/slosh gallery/logo

games/sliding puzzle

Temporização

tic: começa a contar o tempo.

toc: termina de contar o tempo.

Referências

Documentos relacionados

Se você está em dúvida sobre como executar certo comando poderá obter ajuda do Matlab digitando na comando poderá obter ajuda do Matlab digitando na janela de comando: help

esses pacientes têm obesidade severa e má aceitação da restrição dietética, a qual, junto com a necessidade de redução rápida de peso para alívio da dis-.. função

Para n˜ao ter que digitar nova- mente comandos executados anteriormente clique para cima na com- mand window;... 10 criando

Neste mesmo dia, iniciamos as atividades com uma Contação de Histórias: A Galinha Ruiva, realizamos um momento de conversação: sobre a importância da cooperação de todos para que

O ultra-som teve um efeito positivo no processo de secagem mais curto, mas um efeito negativo significativo como o aumento no tempo de processamento, levando a

A coordenação das atividades de extensão a serem desenvolvidas pelos alunos será realizada por docente da Fundação Santo André – Coordenação de Inglês, com as

Esta função mostra na tela a mensagem de texto e aguarda que o usuário digite um texto (string) que será armazenado (mas não alvaliado) na variável R.. Isto permite uma

Através deste comando, pode-se exibir um arranjo de gráficos em uma mesma janela gráfica, como ilustra a Figura 7.. Figura 7 – Arranjo gráfico obtido usando o comando