Andr éRi car doBackes backes@f acom. uf u. br Uni ver si dadeFeder aldeUber l ândi a-Facul dadedecomput ação 1. Comandos Iniciais .......................................................................................................... 3 1.1. Definição de Variáveis ........................................................................................... 3 1.2. Separadores de Comandos...................................................................................... 3 2. Retorno de Funções ........................................................................................................ 3 3. Números Complexos ...................................................................................................... 3 4. Criando Matrizes ............................................................................................................ 4 4.1. Definindo uma Matriz ............................................................................................ 4 4.2. Rotinas para criação de uma Matriz ....................................................................... 4 4.3. Acessando elementos de Matrizes.......................................................................... 5 4.4. Concatenação de Matrizes ...................................................................................... 5 5. Operador : ....................................................................................................................... 6 5.1. Operador : e Matrizes ............................................................................................. 7 5.2. Exclusão de Linhas ou Colunas.............................................................................. 7 6. Operações com Matrizes ................................................................................................ 7 7. Criando Funções............................................................................................................. 9 8. Operadores Aritméticos.................................................................................................. 9 9. Operadores Lógicos...................................................................................................... 12 10. Estruturas Condicionais................................................................................................ 12 10.1. Laço for ............................................................................................................ 12 10.2. Laço while ........................................................................................................ 13 10.3. Comandos if e if-else........................................................................................ 13 10.4. Comando switch case ....................................................................................... 14 10.5. Comando continue e break ............................................................................... 14 11. Rotinas Utéis ................................................................................................................ 14 11.1. A função Find ................................................................................................... 14 11.2. O comando disp ................................................................................................ 14 11.3. O comando Input .............................................................................................. 15 11.4. Funções Básicas................................................................................................ 15 12. Comandos Gráficos ...................................................................................................... 16 12.1. Desenhando Curvas .......................................................................................... 16 12.2. Estilos de Linhas e Cores do Comando plot e plot3......................................... 17 12.3. Desenhando Superfícies ................................................................................... 18 12.4. Comando colorbar ............................................................................................ 20 12.5. Inserindo Anotações num Gráfico.................................................................... 21 12.6. O comando figure ............................................................................................. 21 12.7. Particionando a Tela ......................................................................................... 22 13. Manipulando Strings .................................................................................................... 22 14. Acessando Arquivos ..................................................................................................... 24 14.1. Comando dlmread ............................................................................................ 25 14.2. Comando dlmwrite ........................................................................................... 25 14.3. Comando textread............................................................................................. 25 14.4. Comando fopen ................................................................................................ 25 14.5. Comando feof ................................................................................................... 26 14.6. Comando fclose ................................................................................................ 26 14.7. Comando fgetl .................................................................................................. 26 14.8. Comando fprintf ............................................................................................... 26 1. Comandos Iniciais 1.1. Definição de Variáveis Para atribuir um valor a uma variável, basta digitar o nome da variável, seguida pelo sinal de atribuição ( = ), seguido pelo valor. O Matlab é CaseSensitive, ou seja X e x são diferentes. Ex: X=7 x=2.3 nome = ‘teste’ 1.2. Separadores de Comandos Podem ser utilizados para separar comandos a virgula ( , ) ou o ponto e virgula ( ; ). Virgula ( , ): executa o comando e se tiver um resultado, exibe na tela; Ponto e Virgula ( ; ): executa o comando, não exibindo nenhum resultado; 2. Retorno de Funções Deve-se tomar um certo cuidado com as funções do MatLab Diferente das funções existentes em outras linguagens, o MatLab possui funções que retornam mais de um valor de uma única vez. Ex: [a,b] = size(m); A função size retorna as dimensões de uma matriz. Nesse caso, a recebe o valor da quantidade de linha e b o valor da quantidade de colunas. 3. Números Complexos Um número complexo possui a seguinte forma: a + bi O MatLab entende as letras i e j como √-1, por isso é aconselhado não utilizar tais letras como nomes de variáveis. Abaixo seguem algumas rotinas para manipulação de números complexos: real(C): Retorna a parte real de um número complexo C; imag(C): Retorna a parte imaginária de um número complexo C; conj(C): Retorna o conjugado de um número complexo C; angle(C): Retorna a fase de um número complexo C; abs(C): Retorna o módulo de um número complexo C; 4. Criando Matrizes 4.1. Definindo uma Matriz Elementos de uma linha são separados por espaços ou vírgulas. O final de cada linha é indicado por um ponto-e-vírgula. A lista de elementos é delimitada por colchetes [ ]. Ex: Matriz Bidimensional A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] A= 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 Vetor (Matriz Linha ou Coluna) B = [16 3 2 13] B= 16 3 2 13 C = [16; 5; 9; 4] C= 16 5 9 4 4.2. Rotinas para criação de uma Matriz O Matlab possui algumas rotinas que permitem a criação e manipulação de matrizes. Ex: zeros: matriz de zeros Z = zeros(3,5) Z= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ones: matriz de uns Q = ones(5,5) Q= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 rand: matriz de números aleatórios com distribuição uniforme N = rand(2,4) N= 0.95013 0.60684 0.8913 0.45647 0.23114 0.48598 0.7621 0.018504 randn: matriz de números aleatórios com distribuição normal (Gaussiana) N = randn(3,3) N= -0.4326 0.2877 1.1892 -1.6656 -1.1465 -0.0376 0.1253 1.1909 0.3273 eye: matriz identidade N=eye(3) N= 1 0 0 0 1 0 0 0 1 4.3. Acessando elementos de Matrizes Numa matriz bidimensional, A(i,j) é o elemento da i-ésima linha, j-ésima coluna Num vetor, B(i) é o i-ésimo elemento. Ex: A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 A(2,3) = 11 B = 16 3 2 13 B(2) = 3 4.4. Concatenação de Matrizes A concatenação de matrizes é feita da mesma maneira como é feita a definição de uma matriz. A = [B C; D E]; As matrizes B e C serão organizadas em uma linha, enquanto as matrizes D e E serão organizadas em outra. O Total de linhas de A será a soma do número de linhas de B e D; O Total de colunas de A será a soma do número de colunas de B e C; Ex: B = [1 30 7 ; 5 1 18; 1 4 10]; C = [16 2 13; 5 10 8; 9 6 7 ]; D = [16 3 13; 6 7 12; 4 14 1]; E = [5 11 8; 6 7 12; 4 15 1]; A = [B C; D E] A= 1 30 7 16 2 13 5 1 18 5 10 8 1 4 10 9 6 7 16 3 13 5 11 8 6 7 12 6 7 12 4 14 1 4 15 1 5. Operador : Trata-se de um poderoso operador do MatLab. Por meio dele é possível fazer a enumeração intervalada de dados. Ele permite que selecionemos um intervalo de valores com um determinado espaçamento. Ele pode ser utilizado de 2 maneiras: I : k : j:Lista os elementos de i a j, espaçados de k. Se k for positivo, j > i. Se k for negativo, j < i. I:j :Lista os elementos de i a j, espaçados de 1, onde j > i Ex: 1:10 ans = 1 2 3 4 5 6 7 8 9 10 1:3:27 ans = 1 4 7 10 13 16 19 22 25 60:-7:0 ans = 60 53 46 39 32 25 18 11 4 0:pi/4:pi ans = 0 0.7854 1.5708 2.3562 3.1416 5.1. Operador : e Matrizes O operador : é muito útil quando se deseja selecionar apenas uma parte da matriz para trabalhar. Ex: A(1:m, n): primeiros m elementos da n-ésima coluna A(:, n): todos os elementos da n-ésima coluna A(:, end): todos os elementos da última coluna A(m, 1:n): primeiros n elementos da m-ésima linha A(m, :): todos os elementos da m-ésima linha A(end,:): todos os elementos da última linha A(:,[1 2 4]): retorna as colunas 1, 2 e 4 5.2. Exclusão de Linhas ou Colunas A exclusão de linhas ou colunas é feita definindo a linha ou coluna a ser excluída como vazia. Ex: X = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; X(:,2) = [ ] X= 16 2 13 5 11 8 9 7 12 4 14 1 6. Operações com Matrizes sum: soma dos elementos de cada coluna Ex: sum(A) ans = 34 34 34 34 ’ (aspa simples): transposição de uma matriz Ex: A’ ans = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1 diag: elementos da diagonal da matriz Ex: diag(A) ans = 16 10 7 1 inv : inversa de uma matriz Ex: inv(A) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 9.796086e-018. ans = 1.0e+015 * 0.1251 0.3753 -0.3753 -1.1259 0.3753 1.1259 -0.1251 -0.3753 -0.3753 -0.1251 1.1259 0.3753 -1.1259 -0.3753 0.3753 0.1251 size: Retorna a dimensão da matriz M Ex: size(A); ans = 4 4 dot(V1,V2): Produto escalar de V1 por V2 Ex: dot(A,A) ans = 378 370 370 378 cross(V1,V2): Produto vetorial de V1 por V2 Ex: B=[1 2 3; 4 5 6;7 8 9] cross(B,B) ans = 0 0 0 0 0 0 0 0 0 trace(M): Traço da matriz M (soma dos elementos na diagonal principal) Ex: trace(A) ans = 34 det(M): Determinante da matriz M Ex: Det(A) ans = 0 [a b] = eig(M): Retorna em A os auto-vetores e em B os autovalores de M Ex: [a,b] = eig(A) a= -0.5000 -0.8236 0.3764 -0.2236 -0.5000 0.4236 0.0236 -0.6708 -0.5000 0.0236 0.4236 0.6708 -0.5000 0.3764 -0.8236 0.2236 b= 34.0000 0 0 0 0 8.9443 0 0 0 0 -8.9443 0 0 0 0 0.0000 7. Criando Funções De um modo geral, as funções no MatLab são definidas da seguinte forma: function [var1,var2,..,varN] = nome_rotina(param1,param2,..,paramN); Pode se definir para um função quantos parâmetros de entrada se desejar. O mesmo vale para os parâmetros de saída. É aconselhado criar um novo arquivo para cada função criada. Também é aconselhado utilizar o mesmo nome da função para o arquivo dela. Ex: function m = soma(a,b); m = a + b; 8. Operadores Aritméticos + : Soma Realiza a soma de 2 ou mais números. No caso de matrizes, realiza a soma termo a termo. Ex: B=A+A B= 32 4 6 26 10 22 20 16 18 14 12 24 8 28 30 2 : Subtração Calcula a diferença entre 2 ou mais números. No caso de matrizes, calcula a diferença termo a termo. Ex: C=A-A C= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / : Divisão Realiza a divisão entre dois números. No caso de matrizes a divisão atua de maneira diferente. A Expressão C = A / B; É equivalente a C = A * inv(B); ./ : Divisão Termo a Termo Realiza a divisão entre dois números. No caso de matrizes, realiza a divisão termo a termo da matriz. Para isso, as matrizes devem ter o mesmo tamanho. Ex: B = A ./ A B= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 * : Multiplicação Realiza a multiplicação entre dois números. No caso de matrizes, é calculado o produto matricial. Ex: C = A*A C= 345 257 257 313 281 305 273 281 281 305 313 257 273 281 257 345 .* : Multiplicação Termo a Termo Realiza a multiplicação entre dois números. No caso de matrizes, realiza a multiplicação termo a termo da matriz. Para isso, as matrizes devem ter o mesmo tamanho. Ex: B = A .* A B= 256 4 9 169 25 121 100 64 81 49 36 144 16 196 225 1 ^ : Potência Realiza a operação de potenciação entre dois números. No caso de matrizes, é calculado o produto matricial n vezes. Ex: C=A^2 C= 345 257 257 313 281 305 273 281 281 305 313 257 273 281 257 345 .^ : Potência Termo a Termo Realiza a operação de potenciação entre dois números. No caso de matrizes, realiza a potenciação termo a termo da matriz. Ex: B = A .^ A B= 256 4 9 169 25 121 100 64 81 49 36 144 16 196 225 1 mod : Resto da divisão inteira Retorna o resto da divisão inteira x/y, onde x e y são números inteiros. Ex: mod(3,2) ans = 1; mod(13,5) Ans = 3; 9. Operadores Lógicos São operadores que servem para comparar dois elementos no MatLab. Podem ser aplicados à números escalares ou à matrizes. Se o resultado da comparação for verdadeiros, o operador retorna 1. Se o resultado da comparação for falso, retorna 0. Alguns operadores lógicos podem ser aplicados apenas sobre números escalares ou matrizes. Esses operadores são: A == B A<B A <= B A>B A >= B A ~= B :Igualdade :Menor :Menor ou igual :Maior :Maior ou igual :Diferente Se o resultado do operador for verdadeiro, 1 é retornado. Se o resultado do operador for falso, 0 é retornado. Alguns operadores lógicos podem ser aplicados apenas sobre valores lógicos. Esses operadores são: A&B A|B ~A xor(A,B) :AND lógico entre A e B. :OR lógico entre A e B. :NOT lógico, ou complementar de A. :XOR lógico entre A e B. Se o resultado do operador for verdadeiro, 1 é retornado. Se o resultado do operador for falso, 0 é retornado. 10. Estruturas Condicionais São comandos que controlam o fluxo e especificam a ordem em que a computação é feita. No MATLAB estes comandos são semelhantes aos usados na linguagem C, mas com uma estrutura diferente. 10.1. Laço for O laço for é o controlador de fluxo mais simples e usado na programação MATLAB. for variável = valor_inicial :passo: valor_final comandos end; Se o passo não foi definido, ele assume o valor de 1. Ex: for i=1:5, X(i)=i^2; end 10.2. Laço while O laço while testa uma condição e executa uma série de comandos enquanto a condição for verdadeira. while condição comandos end; Ex: a = l; b = 15; while a<b a = a+l b = b-l end; 10.3. Comandos if e if-else O comando if testa uma condição e executa uma ação se tal condição for verdadeira. if condição comandos end; Já o comando if-else, testa uma condição. Se a condição é verdadeira, executa os comandos do if; se a condição é falsa, executa os comandos do else. if condição comandos do if else comandos do else end; Ex: x=1; y=5; if x<y x=x+1; else y=y+1; end; 10.4. Comando switch case Parecido com o comando if-else, este comando permite que se escolha uma opção entre várias dependendo do resultado de uma variável ou expressão. Ex: switch A(2,2) case 0 A(2,2) = A(2,2) +1; case 1 A(2,2) = A(2,2) +3; case 2 A(2,2) = A(2,2) +5; otherwise A(2,2) = 0; end; 10.5. Comando continue e break Esses dois comandos servem para quebrar a continuidade de laços de repetição, como o for e o while. No entanto, existe uma grande diferença entre esses dois comandos. O comando continue interrompe a execução do laço e faz com que ele avance para a sua próxima iteração, pulando a que estava. O comando break interrompe a execução do laço e o termina, fazendo com que o MatLab pule para a primeira instrução fora do laço. 11. Rotinas Utéis 11.1. A função Find A função find retorna os índices de uma matriz ou vetor que satisfazem uma determinada condição, sendo, portanto muito útil para selecionar elementos de uma matriz / vetor. Ex: Retornar todos elementos de A que são maiores que 10. X = find(A>10); Retornar todos elementos de A que são maiores que 10 e menores que 50. X = find(A>10 & A<50); 11.2. O comando disp Quando quisermos exibir o conteúdo de uma matriz sem imprimir seu nome ou imprimir um pequeno texto, usamos o comando disp. Assim, se a variável temp contiver um valor de temperatura em graus Celsius, podemos imprimir o valor em uma linha de comando e a unidade na linha posterior: Ex: disp(temp); disp (‘graus Celsius’) Se o valor de temp for 78, então a saída será: 78 graus Celsius 11.3. O comando Input Esse comando serve para fazer uma requisição de dados ao usuário. Pode ser utilizado de 2 maneiras: user_entry = input('prompt') user_entry = input('prompt','s') prompt é a mensagem que será exibida para o usuário. user_entry é o valor que o usuário digitou. ‘s’ especifica que a entrada do usuário deve ser um texto. Ex: x= input(‘Digite o número de iterações: ’) 11.4. Funções Básicas log(x): Logaritmo natural de x; log10(x): Logaritmo base 10 de x; exp(x): Exponencial de x; sqrt(x): Raiz quadrada de x; log2(x): Logaritmo base 2 de x; pow2(x): 2 elevado a potência x; sin(x): Seno de x (x em radianos); asin(x) : inverso seno; cos(x): Coseno de x (x em radianos); acos(x): inverso do cosseno; tan(x): Tangente de x (x em radianos); atan(x): inverso tangente; sec(x): Secante de x (x em radianos); asec(x): inverso secante; csc(x): Cosecante de x (x em radianos); ceil(x): Arredonda x na direção +∞; round(x): Arredonda x para o inteiro mais próximo; floor(x): Arredonda x na direção -∞; fix(x): Arredonda x na direção de 0; norm(X): Norma de X; fft(X): Transformada rápida de Fourier do vetor X; ifft(X): Inversa da transformada rápida de Fourier do vetor X; min(X): Menor elemento da matriz X; max(X): Maior elemento da matriz X; sort(X): Organiza os elementos do vetor ou matriz X em ordem crescente; mean(X): média de um vetor; std(X): Desvio Padrão de um vetor; size(X): Retorna as dimensões da matriz. i: número imaginário, igual a √-1; j: número imaginário, igual a √-1; real(C): Retorna a parte real de um número complexo C; imag(C): Retorna a parte imaginária de um número complexo C; conj(C): Retorna o conjugado de um número complexo C; angle(C): Retorna a fase de um número complexo C; abs(C): Retorna o módulo de um número; zeros(m,n): Cria uma matriz com zeros; ones(m,n): Cria uma matriz com 1’s. rand(m,n): Cria uma matriz com números aleatórios; randn(m,n): Cria uma matriz com números aleatórios, com distribuição normal; eye(n): Cria uma matriz identidade de ordem n; diag(X): Retorna os elementos da diagonal da matriz; inv(X): Retorna a inversa de uma matriz; dot(V1,V2): Produto escalar de V1 por V2; cross(V1,V2): Produto vetorial de V1 por V2; trace(M): Traço da matriz M (soma dos elementos na diagonal principal); det(M): Determinante da matriz M; [a b] = eig(M): Retorna em a os auto-vetores e em b os autovalores de M; mod(x,y): Retorna o resto da divisão inteira x/y; find(condição da matriz): retorna os índices de uma matriz que concordem com uma determinada condição; disp(texto): exibe um texto na Command Window; input(texto): Faz uma requisição de dados ao usuário na Command Window; plot(x,y): Desenha um gráfico bidimensional; plot3(x,y,z): Desenha um gráfico tridimensional; 12. Comandos Gráficos 12.1. Desenhando Curvas O comando plot serve para desenhar um gráfico bidimensional. Para desenhar um gráfico tridimensional, utiliza-se o comando plot3 Várias são as formas de uso e opções adicionais para traçado de gráficos. Plotando Vetores: plot(Y): plota o vetor Y contra os índices de seus elementos. plot(X,Y): plota o vetor X contra o vetor Y, onde ambos possuem o mesmo número de elementos. plot(X1,Y1, X2,Y2,... Xn,Yn): plota X1 versus Y1, X2 versus Y2,…, Xn versus Yn num mesmo gráfico. Plotando Matrizes: plot(Y): Se Y é uma matriz, plota as colunas de Y versus o índice da linha. plot(X,Y): Se Y é uma matriz e X um vetor, plota as linhas ou colunas de Y versus o vetor X. O mesmo vale no caso de X ser a matriz e Y o vetor. plot(X,Y): Se X e Y são matrizes de mesma dimensão, plota as colunas de X versus as colunas de Y. Obs: O comando plot3 funciona de forma semelhante ao comando plot. A diferença é que ele utiliza 3 parâmetros de dados Ex: plot3(X,Y,Z) 12.2. Estilos de Linhas e Cores do Comando plot e plot3 Além do parâmetro referente aos dados a serem exibidos, esses comandos possuem um outro parâmetro referente à cor e tipo de traço. plot(X,Y,config) config é na verdade um conjunto de símbolos escolhidos pelo usuário de forma a alterar o estilo do gráfico. Se esse parâmetro não foi utilizado, ele assumira a configuração padrão (linha azul e continua). Simbolo Cor Símbolo Marcador y amarelo . Ponto m c Lilás * Estrela azul claro ° Círculo r vermelho + + g verde x x b azul escuro s Quadrado w k branco preto d v Losango Triângulo p/ baixo Triângulo p/ cima Triângulo p/ esquerda ^ < > p Triângulo p/ direita Pentagrama Símbolo Tipo de Linha --. : Linha contínua Linha tracejada Traços e pontos Linha pontilhada h hexagrama Ex: X = 0:0.05:1; plot(X,X.^2,’k*’) plot(X,X.^2,’k --‘) 12.3. Desenhando Superfícies O MatLab possui vários comandos para o desenho de superfícies. Entre esses comandos podemos destacar os seguintes: mesh, surf, contour e contour3. Esses comandos desenham uma superfície que esteja contida numa matriz. Podem ser usados de 2 formas básicas: comando(Z): a superfície será desenhada sem nenhuma informação referente aos eixos X e Y comando(X,Y,Z): a superficie será desenhada levando em consideração o dominio de X e Y. Obs: a palavra comando pode ser substituída por mesh, surf, contour ou contour3. Para exemplificar o uso desses comandos, utilizaremos do seguinte conjunto de dados: [X,Y] = meshgrid(-2:.2:2, -2:.2:2); Z = X.* exp(-X.^2 - Y.^2); A função meshgrid define um espaço de coordenadas para ser trabalhado. Ex: O comando mesh desenha uma malha 3D não preenchida. O comando surf desenha uma superfície 3D preenchida. O comando contour desenha um conjunto de curvas de nível em um plano. O comando contour3 desenha um conjunto de curvas de nível em um espaço tridimensional. 12.4. Comando colorbar Esse comando permite desenhar uma barra de cores nos gráficos. Essa barra representa a variação dos valores do gráfico. Ex: mesh(z), colorbar; 12.5. Inserindo Anotações num Gráfico O Matlab possui várias funções para escrever em gráficos. Entre elas: title(‘titulo’): Coloca o título “titulo” na posição acima do gráfico. grid on <off>: grid on mostra uma “grade” na janela do gráfico, grid off apaga a grade. xlabel(‘nome do eixo X’): Coloca um nome para o eixo X do gráfico. ylabel(‘nome do eixo Y’): Coloca um nome para o eixo Y do gráfico. zlabel(‘nome do eixo Z’): Coloca um nome para o eixo Z do gráfico. axis on <off>: axis on desenha os eixos coordenados, axis off apaga os eixos. axis([xmin xmax ymin ymax zmin zmax]): ajusta os limites das coordenadas da janela onde está o gráfico. X variando de xmin à xmax, o mesmo para Y e Z. text(X,Y,’texto’): Coloca um texto na posição (X,Y) do gráfico. (caso o gráfico seja tridimensional use text(X,Y,Z,’texto’); Obs: Esses comandos podem ser utilizados tanto para desenho de gráficos como de superfícies. 12.6. O comando figure O comando figure serve para criarmos uma nova janela para a exibição de gráficos. Sem o uso dele, todos os gráficos serão desenhados na mesma janela, sendo que um novo gráfico sobrepõe o ultimo que foi desenhado. Ex: Esse exemplo desenha os gráficos dos vetores x e y em duas janelas diferentes. figure(1); plot(x); figure(2); plot(y); 12.7. Particionando a Tela As vezes é necessário mostrar vários gráficos numa mesma janela. Para isso faz se uso do comando subplot(r,c,p) Esse comando divide a tela em r x c janelas, sendo p é um número entre 1 e r x c que representa a posição selecionada. Ex: subplot(2,1,2),plot(x,y); Divide a tela em duas linhas e uma coluna, e desenha o gráfico na segunda linha. Ex: x= 1:pi/16:8*pi; subplot(2,1,1),plot(cos(x)); subplot(2,1,2),plot(sin(x)); 13. Manipulando Strings Para o MatLab, uma string é com um vetor linha de caracteres. A maioria dos comandos vistos até agora, como acesso a elemento e seleção de elementos de uma matriz / vetor, são aplicáveis no caso das strings. Ex: texto= ‘Isso é um teste’ Visualizando um elemento texto(3)= ‘s’; Selecionando um trecho da string texto(3:8) = ‘so é u’; Apesar de o MatLab ser um software voltado para cálculos matemáticos, possui ainda diversas rotinas para manipulação de strings. Tais rotinas nos ajudam em tarefas de comparação de strings entre outras tarefas. Abaixo segue algumas dessas rotinas. findstr Procura a string menor na maior e retorna a posição inicial dela. É Case-Sensitive. Exemplo: x=findstr(str1,str2); strcmp Compara duas strings. Retorna 1 se iguais, 0 se diferentes. CaseSensitive. Exemplo: x=strcmp(str1,str2); strcmpi Compara duas strings. Retorna 1 se iguais, 0 se diferentes. Não é CaseSensitive. Exemplo: x=strcmpi(str1,str2); strtok Separa uma string em duas partes, usando como separador um token. Exemplo: [str1,str2] = strtok(string,separador); strcat Faz a concatenação de 2 ou mais strings. Exemplo: x= strcat(str1,str2); deblank Remove espaços do final da string Exemplo: x = deblank(string); sprintf Escreve dados formatado numa string Exemplo: X = sprintf(formato,variavel); sscanf Le dados formatados de uma string x = sscanf(variavel, formato); OBS: As rotinas sprintf e sscanf necessitam de um parâmetro formato para trabalharem direito. Esse parâmetro informa como o dado deve ser transformado durante a leitura ou escrita. Entre os possíveis formatos estão: %s : texto (string) %d : decimal %e : exponencial %f : ponto fixo (quando usado com sprintf, pode-se definir número de casas. Ex: %12.5f ) int2str Converte um número inteiro para string; Ex: int2str(5) ans = ‘5’; num2str Converte um número qualquer para string; Ex: num2str(5.234) ans = ‘5.234’; str2num Converte uma string para um número qualquer. Ex: strtonum(‘5.235’); ans = 5.235; strtoint Converte uma string para um número inteiro. Ex: str2int(‘52’); ans = 52; str2double Converte uma string para um valor de dupla precisão. Ex: strtonum(‘5.235’); ans = 5.235; 14. Acessando Arquivos O MatLab possui diversas rotinas para leitura e escrita em arquivos texto e arquivos binários. Aqui serão expostas as mais relevantes rotinas de leitura e escrita, de modo a abranger uma classe maior de tipos de arquivos. 14.1. Comando dlmread dlmread(‘nome do arquivo’,’separador’) Carrega uma matriz que esteja contida dentro de um arquivo texto. Cada linha do arquivo corresponde a uma linha da matriz, e as colunas deve estar separadas pelo caractere separador. Ex: M = dlmread(‘matriz.txt’,’ ‘); 14.2. Comando dlmwrite dlmwrite(‘nome do arquivo’,matriz,’separador’) Faz exatamente o inverso de dlmread. Grava uma matriz dentro de um arquivo texto. Cada linha do arquivo corresponde a uma linha da matriz, e as colunas deve estar separadas pelo caractere separador. Ex: dlmwrite(‘matriz.txt’,M,’ ‘); 14.3. Comando textread textread(‘arquivo’,’formato’) Lê um arquivo texto em colunas. Pode-se definir um formato de leitura (tipo de dados) para cada coluna. Ex: [x,y,z]=textread(nome_arquivo,'%d %d %f'); 14.4. Comando fopen fopen(‘nome_arquivo’, ‘permissão’) Abre um arquivo, com um determinado tipo de permissão, e retorna um valor de identificação do arquivo para posterior manipulação. Os modos de permissão podem ser: Para arquivos binários: 'r' (leitura), 'w' (escrita), 'a' (continuar escrevendo). Para arquivos binários: 'rt' (leitura), 'wt' (escrita), 'at' (continuar escrevendo). Ex: fid = fopen(‘matriz.txt’, ‘rt’); 14.5. Comando feof feof(id) Função que verifica se um arquivo que foi aberto com fopen já chegou ao seu final. A função retorna 1 se esta no fim do arquivo e 0 no caso contrário. Ex: X = feof(fid); 14.6. Comando fclose fclose(id) Fecha um arquivo aberto com fopen, com base no seu numero de identifcação Ex: fclose(fid); 14.7. Comando fgetl fgetl(id) Lê a linha atual de um arquivo, e pula para a próxima linha. A linha é retornada da mesma maneira que se encontra escrita no arquivo, nenhuma conversão de dados é realizada. Ex: fid=fopen('teste.txt','rt'); while ~feof(fid) tline = fgetl(fid); disp(tline); end; fclose(fid); 14.8. Comando fprintf fprintf(fid, formato, variavel) Escreve dados formatados no arquivo. Entre os possíveis formatos estão: %s : texto (string) %d : decimal %e : exponencial %f : ponto fixo (quando usado com sprintf, pode-se definir número de casas. Ex: %12.5f ) Para finalizar uma linha usa \n, no final da definição do formato. Ex: x = 0:0.1:1; y = [x; exp(x)]; fid = fopen('novo.txt','wt'); fprintf(fid,'%6.2f %12.8f \n',y); fclose(fid);