Computação Científica com MATLAB Melissa Weber Mendonça melissa.mendonca@ufsc.br
Aula passada... Algoritmos: conceito; tipos de dados; scripts; Modo interativo do MATLAB: familiarização com o software; comandos de entrada e saída; comandos de atribuição; manipulação de variáveis; funções básicas; Variáveis indexadas: vetores; matrizes. Processos de repetição: o comando for, o comando while
Hoje Mais matrizes; Condicionais: o comando if no MATLAB; Células e estruturas; Leitura e escrita em arquivos; Importação de dados (wizard)
Slicing A(i,j) A(i,:) A(:,j) A(:,:) A(:) A(1:2,:) A(1,2:3)
Apagando elementos Podemos apagar elementos de matrizes (ou linhas/colunas inteiras) usando a seguinte sintaxe: >> A(i,:) = [] >> A(:,j) = []
Append Em uma lista, podemos acrescentar elementos a qualquer momento: >> lista = [1,3,4,5] >> lista = [lista 2] >> lista
Dica As operações acima também se aplicam a texto! >> frase = Oi, como vai? >> frase = [frase(1:length(frase)-1) voc^e? ] >> frase = strcat( Oi,, como, vai, voc^e? ) Atenção: strcat não preserva os espaços em branco.
Reshape Podemos facilmente mudar o tamanho e o formato de uma matriz ou vetor usando o comando reshape: >> reshape(a,m,n)
if - else - end O if ( se ) representa uma sentença lógica condicional: Se (sentença lógica) ent~ao faça (1) Sen~ao faça (2) Fim Se
if - else - end O if ( se ) representa uma sentença lógica condicional: if (sentença lógica) faça (1) else faça (2) end Em Matlab, uma sentença lógica pode ter dois valores: 0 (Falso) ou 1 (Verdadeiro)
Comparação Para comparar dois números a e b, usamos os seguintes sinais em MATLAB: a é igual a b? a é maior que b? a é menor que b? a é maior ou igual a b? a é menor ou igual a b? a é diferente de b? a == b a > b a < b a >= b a <= b a = b
Importante Atenção: ao compararmos números reais, devemos tomar cuidado com erro de arredondamento e a representação por ponto flutuante. Exemplo: >> 3-1.1-0.9 ans = 1.0000 >> 1 == (3-1.1-0.9) ans = 0 (falso!)
ElseIf Nos casos em que precisamos de mais de 2 alternativas, podemos usar um atalho: elseif. if (sentença lógica) faça (1) elseif faça (2) else faça (3) end
e - && Muitas vezes, precisamos agrupar valores lógicos. Exemplo: Se uma pessoa for homem e tiver mais de 18 anos, deve se inscrever no serviço militar. Se g^enero == homem ent~ao Se idade >= 18 ent~ao Inscreva-se no serviço militar. Sen~ao Voc^e está liberado! Fim Se Sen~ao Voc^e está liberada! Fim Se
e - && Muitas vezes, precisamos agrupar valores lógicos. Exemplo: Se uma pessoa for homem e tiver mais de 18 anos, deve se inscrever no serviço militar. Se (g^enero == homem) e (idade >= 18) ent~ao Inscreva-se no serviço militar. Sen~ao Voc^e está liberado(a)! Fim Se
e - && No Matlab: representamos o e por &&: if (numero > 0) && (numero < 1) disp( Numero esta entre 0 e 1. ) end
ou - Exemplo: Como decidir se um carro precisa de uma primeira revisão? Se (idade do carro >= 1 ano) Faça a revis~ao. Fim Se Se (km >= 10.000) Faça a revis~ao. Fim Se Se qualquer uma das duas condições for satisfeita, tomaremos a mesma decisão.
ou - Exemplo: Como decidir se um carro precisa de uma primeira revisão? Se (idade do carro >= 1 ano) ou (km >= 10.000) Faça a revis~ao. Fim Se
ou - No Matlab: representamos o ou por : if (numero > 0) ou (numero < 0) disp( Numero é diferente de zero. ) end
Comparando texto Se quisermos comparar os conteúdos das variáveis texto1 e texto2, usamos a função strcmp(texto1,texto2) Cuidados: Um texto deve sempre ser informado entre aspas simples. sim sim sim Sim Se a diferença entra maiúsculas e minúsculas não for importante, podemos usar a função strcmpi(texto1,texto2).
Transformando dados str2num: transforma texto em número num2str: transforma um número em texto disp([ O vetor tem, num2str(length(v)), entradas. ]) num2str(10) = 10 serve para imprimir um número no meio de um texto. str2num( 25 ) = 25 str2num( texto ) =?
Estruturas de dados Heterogêneas Muitas vezes, gostaríamos de armazenar dados da seguinte forma: Título Núm. Páginas Datas de Empréstimo e Devolução Álgebra Linear 205 12/08, 15/08 Cálculo 346 10/09, 12/09 Geometria 123 04/08, 05/09 Topologia 253 01/08, 04/09 Porém, estes dados são de natureza heterogênea: misturamos texto (string), números e intervalos. Como armazenar isso em uma só tabela no MATLAB?
Estrutura Cell No MATLAB, podemos fazer o seguinte: >> tabela = { Algebra Linear, 205, [1208, 1508]; >> Calculo, 346, [1009,1209]; >> Geometria, 123, [0408,0509]; >> Topologia, 253, [0108,0409] } A célula funciona como uma matriz, mas aqui os índices são dados sempre entre chaves: {}.
Comandos Para ver o que está armazenado na variável tabela, basta usarmos o comando >> celldisp(tabela) Para verificar o tamanho de uma célula, usamos o comando >> size(tabela) Para criar uma célula vazia com m por n elementos, usamos o comando >> tabela = cell(m,n) Para apagar um elemento da célula, podemos usar a notação de matriz vazia: >> tabela{1,2} = []
Outras possibilidades... Célula de células: >> v = { {1, teste, [1;2]}; {[0,3], 12, nome, rand(4,4)} } Neste caso, os elementos devem ser referenciados da seguinte forma: >> v{2}{1}
Outras possibilidades... Vetor de células: >> v = [ {1, teste, [1;2]}; {[0,3], 12, nome } ] Cuidado! Aqui, as células devem ter a mesma dimensão para ficarem em um vetor: se cada célula é 3 2, e temos 10 células, o tamanho do vetor de células será 30 2. Neste caso, os elementos devem ser referenciados da seguinte forma: >> v(2){1}
Mais comandos Podemos, analogamente ao que fizemos com vetores, concatenar células: >> C1 = { Joao, 16} >> C2 = { Maria, 18; Ricardo, 13} >> cola = {C1 C2} cuidado! >> uniao = [C1; C2]
Estruturas Outra maneira de armazenar dados heterogêneos é usar estruturas: cada estrutura é composta de campos que podem conter quaisquer tipos de dados (assim como as células), e que são referenciados por nome. Para criarmos uma estrutura chamada dados com o campo chamado Nome, podemos usar diretamente a sintaxe >> dados.nome = Melissa ou >> dados = struct( Nome, Melissa )
Importar dados Para importarmos dados, o método mais fácil é utilizar a interface gráfica do MATLAB, selecionando File Import Data Para verificar os tipos de arquivo suportados e as funções disponíveis, consulte o Help.
xlsread Para ler arquivos de planilha gerados pelo Microsoft Excel, usamos >> [dados,texto,resto] = xlsread(arquivo) Para ler os dados de uma planilha específica do arquivo, usamos >> [dados,texto,resto] = xlsread(arquivo,planilha) Em sistemas com o Microsoft Excel instalado, pode-se usar >> [dados,texto,resto] = xlsread(arquivo,-1) para abrir uma janela do Excel e selecionar os dados a serem importados interativamente.