Baixe o app para aproveitar ainda mais
Prévia do material em texto
1. Acessando o Matlab 2. Utilizando o MATLAB. 3. Operações com matrizes e vetores 4. Declarações, expressões e variáveis; Salvando uma sessão. 5. Funções de Construção de Matrizes 6. Loops for, while e blocos if 7. Funções Escalares. 8. Funções Vetoriais. 9. Funções Matriciais. 10. Edição de Linha de Comando e Chamada 11. Sub matrizes e notação em dois pontos (:) 12 – Arquivos M 13. Strings, Mensagens de Erro, Entrada. 14. Manipulação de Arquivos M 15. Formato de Saída 16. Cópia 17. Gráficos Bibliografia 1. Acessando o Matlab Para acessar o Matlab: c:\ > matlab Para sair: >> quit Em sistemas operacionais pode-se ter o MATLAB em uma janela e o editor em outra. Índice 2. Utilizando o MATLAB. Entrando com matrizes O MATLAB trabalha essencialmente com um tipo de objeto - matriz numérica retangular, que pode aceitar inclusive valores complexos. Todas as variáveis no MATLAB representam matrizes. Algumas vezes matrizes de 1 x 1 são interpretadas como escalares e matrizes com uma linha ou uma coluna são interpretadas como vetores. Introduzindo uma matriz no MATLAB. Lista explícita de elementos A = [ 1 2 3; 3 4 5; 6 7 8] que é a mesma coisa que entrar como a seguir: A = [ 1 2 3 3 4 5 6 7 8] Os elementos de uma linha podem ser separados por vírgula (,) ou espaço ( ). Números na forma exponencial, deve-se evitar espaços em branco (exemplo, 3.19e-3). Matrizes grandes – usar um arquivo M onde é possível editar os erros facilmente Geração por declarações embutidas ou funções (ou seja, comandos do MATLAB ) Exemplos de funções utilizadas para gerar matrizes: rand, magic, hilb. rand(n) gera matriz quadrática de dimensões n x n, aleatória com distribuição uniforme, no intervalo [0,1]. Ex.: x=rand(3) rand(m,n) gera uma matriz de dimensões m x n. Ex: x=rand(3,4) magic(n) cria uma matriz integral de dimensões n x n que é matriz quadrada (linhas e colunas têm a mesma soma). Ex: x=magic(4) Em todos os exemplos, m e n são inteiros positivos. Outra forma de gerar matrizes é através de "loops" "for". Para especificar um único elemento da matriz é usa-se índices entre parênteses. Ex: x(2,3) Esta notação denota um valor na segunda linha e terceira coluna. Tente: x(3,5) Indexadores de matrizes no MATLAB têm que ser inteiros positivos (não nulos). Índice 3. Operações com matrizes e vetores Operações disponíveis no Matlab: + Adição - Subtração * Multiplicação ^ Potência ' Transposição (por exemplo, se A é uma matriz, então A' é sua transposta) \ Divisão à esquerda / Divisão à direita Tais operações aplicam-se também a escalares (considerados matrizes de 1 x 1). Se os tamanhos das matrizes são incompatíveis, para a operação matricial, será gerada uma mensagem de erro, com exceção do caso de operações entre escalares e matrizes (para adição, subtração, divisão e multiplicação), quando cada entrada da matriz é operado pelo escalar. A "divisão de matrizes" necessita de atenção especial. Se A é uma matriz inversível quadrada e b é um vetor coluna (ou linha) compatível, então x = A\b é a solução de A * x = b e, respectivamente, x = b/A é a solução de x * A = b. Na "divisão à esquerda", se A é quadrada, então ela é fatorada usando-se eliminação Guassiana e estes fatores são usados para resolver A * x = b. Se A não é quadrada, ela é fatorada usando ortogonalização de Householder com pivoteamente por coluna e os fatores são usados para resolver o sistema sub ou sobre determinado no sentido dos mínimos quadráticos. A divisão à direita é definida em termos da divisão à esquerda por b/A = (A'\b'). Operações com Vetores. As operações de adição e subtração operam sobre os elementos da matriz, ou seja, elemento por elemento. As outras operações são operações matriciais. As operações (*,^,\,/ ) podem operar por elemento da matriz se forem precedidos por ponto Ex.: [1,2,3,4] .*[1,2,3,4] como [1,2,3,4].^2 Índice 4. Declarações, expressões e variáveis; Salvando uma sessão. Matlab - linguagem de expressões; as expressões que se entra pelo teclado são interpretadas e avaliadas. Sintaxe das declarações no Matlab: variável = expressão, ou simplesmente expressão Expressões - compostas por operadores, funções e variáveis. A avaliação da expressão produz uma matriz, que é então exibida na tela e atribuída à variável para uso posterior. Se a variável e o sinal de igual ( = ) são omitidos, o Matlab cria uma variável ( ans de answer ) e atribui o resultado a ela. Declaração termina com <carriage return> (enter). Uma declaração pode ser continuada na próxima linha com três ou mais pontos seguidos por um <carriage return>. Várias declarações podem ser colocadas em uma única linha se separadas por vírgulas ou ponto e vírgula. Se o último caractere de uma declaração é ponto e vírgula, a impressão é suprimida, mas a atribuição é feita. (Útil para suprimir a impressão de resultados intermediários). Matlab distingue entre letras maiúsculas e minúsculas. Ex.: initFF é diferente de initff. Variáveis podem ter até 19 caracteres. Não é permitido usar caracteres de pontuação. O comando who lista as variáveis disponíveis no espaço de trabalho (workspace). Para remover uma variável do espaço de trabalho : clear nome da variável . Para remover mais de uma variável especifica-se as lista de variáveis: clear var1 var2 var3 O comando clear sozinho remove todas as variáveis não permanentes. A variável permanente eps (epsilon): precisão de cerca de 10-16 (maioria das máquinas) Ela é útil para determinar tolerâncias para a convergência em processo iterativos. Outras variáveis permanentes são: pi razão entre o perímetro da circunferência e seu diâmetro. inf infinito, por exemplo, 1/0 NaN Não-numérico, por exemplo, 0/0 i e j i=j=sqrt(-1) (raiz quadrada de –1) realmin menor número real positivo utilizável realmax maior número real positivo utilizável Exibição ou execução pode ser parada em na maioria das máquinas sem ser necessário sair do Matlab digitando apenas CTRL-C (CTRL-BREAK no PC). Salvando uma sessão. Saindo-se do Matlab perde-se todas as variáveis. O comando save permite salvar as variáveis em disco chamado matlab.mat. Ex.: a=rand(3); b=rand(5); c=rand(20); who save clear O comando load restaura o espaço de trabalho ao seu estado anterior. Ex.: who load who Para salvar apenas algumas variáveis presentes no ambiente atual, especifica-se o comando acompanhado dos argumentos. >> save dados a b dados é o nome do arquivo e as variáveis são : a e b . Apenas elas estarão no arquivo dados, as demais variáveis noambiente serão perdidas se a sessão for interrompida. Índice 5. Funções de Construção de Matrizes Funções de construção de matrizes são: eye matriz identidade Ex.: eye(2) zeros matriz de zeros Ex: zeros(2,2) ones matriz de 1's Ex: ones(2,2) diag matriz diagonal Se x é um vetor, diag(x) é a matriz diagonal com x na diagonal; x=[1 2 3 1 -1 4]; diag(x) Se A é uma matriz quadrada, então diag(A) é um vetor cujos componentes são os elementos da diagonal de A. A=[3 11 5; 4 1 -3; 6 2 1] diag(A) Tente diag(diag(A)) É possível construir uma matriz a partir de blocos. Exemplo, se A é uma matriz 3 x 3, então B = [A, zeros(3,2); zeros(2,3), eye(2)] Matriz 5 x 5. triu parte triangular superior de uma matriz triu(A) tril parte triangular inferior de uma matriz tril(A) rand matriz gerada aleatoriamente rand(5,4) hilb matriz de Hilbert hilb(3) magic quadrado mágico magic(3) toeplitz digite help toeplitz Para ver toeplitz, digite help toeplitz no Matlab. Índice 6. Loops for, while e blocos if Comandos de fluxos do Matlab funcionam como nas linguagens de programação. Sintaxe para um for é: x=[];n=5; for i=1:n, x=[x,i^2], end ou x=[];n=5; for i=1:n x=[x,i^2] end Observe que as duas declarações anteriores produziram o mesmo resultado. Veja que é possível definir uma matriz vazia e que o índice varia de 1 até n. Outro exemplo: m=3; n=4; for i=1:m for j=1:n H(i,j)=1/(i+j-1); end end H O resultado é uma matriz de Hilbert de tamanho m=3 x n=4. Colocando-se ponto e vírgula depois de um comando, evita-se a impressão durante o processamento. Para exibir o resultado da matriz H utilizou-se o comando H sem ponto vírgula. Sintaxe para um loop com while : while relações declarações end Declarações (grupo de comando) são executadas repetidamente enquanto as relações forem satisfeitas. Ex.: Tomando-se um certo a, o seguinte código computa e exibe o menor inteiro não negativo n tal que 2^n >= a: n=0;a=3; while(2^n<a) n=n+1; end n Sintaxe de uma relação if é: if relações declarações elseif relações declarações else declarações end Declarações são executadas se a relação for verdadeira. if n<0 parity=0; elseif rem(n,2)==0 parity=2; else parity=1; end parity Operadores relacionais no Matlab são: < menor > maior <= menor ou igual >= maior ou igual == igual ~= diferente Observe que '=' é usado para atribuição a variáveis, enquanto '==' é usado em uma relação. As relações podem ser conectadas ou quantificadas através de operadores lógicos: & and | or ~ not Quando aplicada a um escalar, uma relação é na realidade 1 ou 0 dependendo se a relação é verdadeira ou falsa. Ex.: 3>5 ans = 0 3<5 ans = 1 3==5 ans = 0 3==3 ans = 1 Quando aplicada a matrizes do mesmo tamanho, a relação é uma matriz de 0's ou 1's que dá o valor da relação entre entradas correspondentes. Por exemplo: a=rand(5) a = 0.9103 0.3282 0.2470 0.0727 0.7665 0.7622 0.6326 0.9826 0.6316 0.4777 0.2625 0.7564 0.7227 0.8847 0.2378 0.0475 0.9910 0.7534 0.2727 0.2749 0.7361 0.3653 0.6515 0.4364 0.3593 b=triu(a) b = 0.9103 0.3282 0.2470 0.0727 0.7665 0 0.6326 0.9826 0.6316 0.4777 0 0 0.7227 0.8847 0.2378 0 0 0 0.2727 0.2749 0 0 0 0 0.3593 a==b ans = 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 Relação entre matrizes é interpretada como verdadeiro por um while ou por um if se cada entrada da matriz de relação é não nula. Assim, se você deseja executar o comando quando as matrizes A e B são iguais, poderias digitar: if A==B comandos end Para executar o comando quando A e B não são iguais, você poderia digitar: if any(any(A~=B)) comandos end any – retorna "1" se um elemento da matriz for igual a 1. ou de forma mais simples, if A~=B else comandos end Observe que if A~=B, comandos, end não fará o que se deseja uma vez que o comando executaria apenas se cada umas das entradas correspondentes em A e B diferem. As funções any e all podem ser usadas de forma criativa para reduzir as relações matriciais para vetores ou escalares. No código acima, a função any foi chamada duas vezes, pois ela é um operador vetorial (seção 8). all – retorna 1 se todos os elementos da matriz forem diferente de zero. Índice 7. Funções Escalares. Algumas funções no Matlab operam essencialmente sobre escalares, mas operam sobre cada elemento se forem aplicadas a uma matriz. As funções escalares mais comuns são: sin seno asin arcoseno exp exponencial abs valor absoluto round arredonda cos cosseno acos arco cosseno log (log natural) sqrt raíz quadrada floor arredonda na direção de menos infinito tan tangente atan arco tangente rem resto da divisão sign função sinal ceil arredonda na direção de mais infinito Índice 8. Funções Vetoriais. Outras funções do Matlab operam essencialmente sobre vetores (linha e coluna), mas em uma matriz m x n, agem sobre coluna por coluna para produzir um vetor linha com o resultado de sua aplicação para a cada coluna. É possível operar sobre linha por linha transpondo-se a matriz, por exemplo: mean(a')'. a =[ 0.9103 0.3282 0.2470 0.0727 0.7665 0.7622 0.6326 0.9826 0.6316 0.4777 0.2625 0.7564 0.7227 0.8847 0.2378 0.0475 0.9910 0.7534 0.2727 0.2749 0.7361 0.3653 0.6515 0.4364 0.3593] a = 0.9103 0.3282 0.2470 0.0727 0.7665 0.7622 0.6326 0.9826 0.6316 0.4777 0.2625 0.7564 0.7227 0.8847 0.2378 0.0475 0.9910 0.7534 0.2727 0.2749 0.7361 0.3653 0.6515 0.4364 0.3593 mean(a) ans = 0.5437 0.6147 0.6714 0.4596 0.4232 mean(a')' ans = 0.4649 0.6973 0.5728 0.4679 0.5097 Outros exemplos de funções vetoriais são: max(a) sum(a) median(a) any(a) min(a) prod(a) all(a) sort(a) std(a) prod – produto dos elementos sort – ordena em ordem crescente median – mediana Tentar: max(max(A)) e max(A) Índice 9. Funções Matriciais. Grande parte da versatilidadedo MATLAB vem de suas funções matriciais. As mais usadas são: eig autovalores e autovetores chol fatorização de Cholesky svd decomposição em valor singular inv inversa lu fatorização LU qr fatorização QR hess forma de Hessenberg schur decomposição de Schur expm matriz exponencial sqrtm matriz de raiz quadrada poly característica polinomial det determinante size tamanho norm norma 1, norma 2, norma F, norma infinita cond número de condição na norma 2 rank ranque As funções no MATLAB podem ter argumentos simples ou múltiplos. Por exemplo, y = eig(a) ou eig(a) produzem um vetor coluna contendo os autovalores da matriz "a". y = eig(a) y = 2.7594 0.9232 -0.3618 + 0.1449i -0.3618 - 0.1449i -0.0613 Já [U,D] = eig (a) produz uma matriz U cujas colunas são os autovetores de "a" e a matriz diagonal D com os autovalores de "a" na sua diagonal. [U,D] = eig (a) U = Columns 1 through 4 -0.3454 -0.7798 0.1164 - 0.1629i 0.1164 + 0.1629i -0.5604 0.0010 0.0766 + 0.2393i 0.0766 - 0.2393i -0.4815 0.4525 -0.5920 - 0.0723i -0.5920 + 0.0723i -0.4198 0.3858 0.6555 - 0.2277i 0.6555 + 0.2277i -0.3983 -0.1960 -0.0666 + 0.2348i -0.0666 - 0.2348i Column 5 -0.4895 -0.4205 0.3115 0.0416 0.6963 D = Columns 1 through 4 2.7594 0 0 0 0 0.9232 0 0 0 0 -0.3618 + 0.1449i 0 0 0 0 -0.3618 - 0.1449i 0 0 0 0 Column 5 0 0 0 0 -0.0613 Índice 10. Edição de Linha de Comando e Chamada A linha de comando do MATLAB pode ser facilmente editada. O cursor pode ser posicionado com as setas letf/right (esquerda/direita) e a tecla Backspace (retorno) ou Delete (Excluir) usada para apagar o caracter à esquerda do cursor. Outras características de edição também estão disponíveis. Em um computador PC tente as teclas Home, End e Delete; em outros sistemas veja help cedit ou digite cedit. Uma característica conveniente é usar as setas Up/Down para rolar sobre a pilha com comandos anteriores. É possível, portanto, relembrar uma linha de comando anterior, editá-la e executá-la. Para pequenas rotinas, é mais conveniente usar isto do que usar um arquivo M que implica em sair do Matlab para um editor de texto (seções 12 e 14). Por exemplos, o comando flopcounts (seção 15) para computar o inverso de matrizes de tamanhos diferentes pode ser comparado chamando-se, editando-se e executando repetidamente as seguintes linhas: a=rand(8); flops(0), inv(a); flops ans = 1320 Se você queria comparar desenhos (plots) das funções y=sin(mx) e y=sin(nx) no intervalo [0,2*pi] para vários m e n, é possível fazer os mesmo com a linha de comando: m=2; n=3; x=0:0.01:2*pi; y=sin(m*x); z=sin(n*x); plot(x,y,x,z) Índice 11. Sub matrizes e notação em dois pontos (:) Os vetores e matrizes são frequentemente usados no Matlab para atingir efeitos de manipulação sobre dados complexos. A notação "dois pontos" (que é usada para gerar vetores e submatrizes) e de subscrito em vetores são chaves para uma manipulação eficiente destes objetos. O uso criativo destas características permite a minimização do uso de loops (que deixa o Matlab lento) e torna o código simples e mais compreensível. A expressão 1:5 (já vista nas declarações de loops for) é na realidade o vetor linha [1 2 3 4 5]. Os números não precisam ser inteiros nem incrementados de 1. Por exemplo, 0.2:0.2:1.2 5:-1:1 Exemplo: Uma tabela de senos. x=[0.0:0.1:2.0]'; y=sin(x); [x y] Note que a função sin opera para cada valor de x, assim o seno (coluna da direita) é função do valor de x (coluna da esquerda). A notação em dois pontos (:) pode ser usada para acessar submatrizes de uma matriz. Ex.: a=[10 20 30 40; 50 60 70 80; 90 100 110 120; 130 140 150 160] a(1:4,3) corresponde aos 4 valores da coluna 3 da matriz a . Os dois pontos (:) denotam uma linha inteira ou uma coluna inteira, por exemplo: a(:,3) a(1:4,:) Vetores arbitrários integrais podem ser usados com subscrito: a(:,[2 4]) que resulta na submatriz com as colunas 2 e 4 da matriz a . Este uso de subscritos pode ser usado em ambos os lados de uma declaração de atribuição: b=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16] a(:,[2 4 5])=b(:,1:3) As colunas 2, 4 e 5 da matriz a foram substituídas pelas colunas 1, 2 e 3 da matriz b . Note que com este comando a matriz a é apresentada por completo com as modificações ocorridas. É possível multiplicar as colunas 2 e 4 da matriz a pela matriz 2 x 2 [1 2; 3 4]: a(:,[2 4])= a(:,[2 4]) * [1 2; 3 4] Novamente a matriz é apresentada por completo junto com as modificações. Se x é um vetor de dimensão n , veja o efeito da declaração x = x(n:-1:1). x= [ 1 2 3 4 5 6] x=x(6:-1:1) Observação: Pense nas linhas de comandos em Matlab para executar as funções apresentadas até agora, comparadas com algoritmos equivalentes em qualquer linguagem de programação. Índice 12 – Arquivos M Matlab pode executar um sequência de declarações armazenada em arquivos chamados "Arquivos M" (devido à extensão ".m"). Muito do trabalho com Matlab está na criação e refinamento de arquivos M. Os arquivos M podem ser scripts (roteiros) ou funções. Arquivos Scripts. Um script consiste em uma sequência de comandos do Matlab. Se o arquivo tem um nome, por exemplo, sequence.m, então o comando sequence fará o Matlab executar os comandos declarados no arquivosequence.m. Todas as variáveis em um script são globais e mudam os valores das variáveis de mesmo nome no ambiente da sessão de Matlab atual. Arquivos scripts são frequentemente usados para entrar dados em uma matriz grande. Neles os erros de entrada podem ser facilmente editados e eliminados. Exemplo: Arquivo M chamado dados.m com as linhas abaixo: a= [ 1 2 3 4 5 6 7 8 ] Executar o arquivo dados. Um arquivo M pode referenciar outros arquivos M, incluindo referência a si próprio (recursividade). Arquivos funções Arquivos funções fornecem flexibilidade ao Matlab. Pode-se criar novas funções específicas para o problema. Tais funções têm o mesmo status de qualquer outra função do Matlab. Em uma função as variáveis são locais. (Entretanto, a versão 4 do Matlab permite se declarar uma variável global dentro de uma função. Veja help global) Exemplo de uma função simples: function a = randint1(m,n) % RANDINT1 gera uma matriz de números aleatórios % randint1(m,n) retorna uma matriz m x n com valores entre 0 e 9. a = floor(10*rand(m,n)); Uma versão mais generalizada: function a = randint2(m,n,a,b) % RANDINT2 gera uma matriz de números aleatórios % randint2(m,n) retorna uma matriz m x n com valores entre 0 e 9. % randint(m,n,a,b) retorna entradas entreos inteiros a e b if nargin < 3, a=0; b=9; end a = floor((b-a+1)*rand(m,n))+a; (Digite no editor do Matlab e experimente). As funções devem ser gravadas com os mesmos nomes das funções: randint1.m e randint2.m. Explicação da função: Primeira linha - nome da função, os argumentos de entrada e de saída; sem esta linha o arquivo é um script e não uma função. Chamando a partir do ambiente Matlab z = randint2(3,4), os números 3 e 4 são atribuídos às variáveis m e n na no arquivo da função. A saída é atribuída à variável z. (Como as variáveis em uma função são locais, seus nomes são independentes daqueles que estão no ambiente do Matlab atual.) O uso de nargin (número de argumentos de entrada) permite o ajuste de um valor padrão de um variável de entrada omitida – tais como a e b na função exemplo randint2.m. Uma função também pode ter argumentos de saída múltiplos. Por exemplo: function [mean, stdev]= stat(x) % STAT Média e Desvio Padrão % Para um vetor x, stat(x) retorna a média e o desvio padrão de x. % Para uma matriz x, stat(x) retorna dois vetores linha contendo % respectivamente, a média e o desvio padrão de cada coluna. [m,n]=size(x); if m == 1 m=n; % caso de um vetor linha end mean = sum(x)/m; stdev= sqrt(sum(x.^2)/m - mean.^2); (Crie um arquivo M e tente este comando para um vetor qualquer.) Um comando no Matlab [xm, xd]=stat(x), atribui a média e o desvio padrão de x, às variáveis xm e xd. Atribuições isoladas também podem ser feitas com uma função que tem argumentos de saída múltiplos. Por exemplo, xm = stat(x) (sem colchetes em torno de xm) atribui a média de x à xm. % indica que o resto da linha é um comentário; O Matlab ignora o resto de linha. As primeiras linha de comentários documentam o arquivo M. Servem para a ajuda on-line e são apresentadas quando se digita o comando: help stat. Esta documentação deve sempre estar presente em um arquivo de função. Observação: Esta função ilustra algumas das características do Matlab que podem ser usadas para produzir código eficiente. Exemplo, x.^2 é a matriz de quadrados dos componentes de x; sum é uma função vetorial (seção 8); sqrt é uma função escalar (seção 7); e sum(x)/m é uma operação entre uma matriz e um escalar. A função abaixo, que dá o máximo divisor comum de 2 inteiros através do algoritmo Euclidiano, ilustra o uso de uma mensagem de erro. function a = mdc(a,b) % MDC Máximo Divisor Comum % mdc(a,b) é o máximo divisor comum dos inteiros a e b, % com a e b diferentes de zero. a=round(abs(a)); b=round(abs(b)) if a==0 & b==0 error('O mdc não é definido quando ambos os número são zero') else while( b~=0) r = rem(a,b); a = b; b = r; end end Outras características avançadas são ilustradas no exemplo de função que se segue. Como notado anteriormente, alguns dos argumentos de entrada de uma função como tol no exemplo, podem ser opcionais através do uso de nargin (número de argumentos de entrada). A variável nargout pode ser usada de forma similar. Note que o fato da relação ser um número (1 quando verdadeiro; 0 quando falso) é usado e que, quando os comandos while ou if são avaliados, nonzero significa verdadeiro e 0 significa falso. A função do Matlabfeval permite que se tenha uma string (sequência de caracteres) como uma variável de entrada, como nome de uma outra função. function [b, steps] = bisect(fun, x, tol) % BISECT Calcula a raiz de uma função de uma variável pelo método da bisseção. % bisect(fun, x) retorna uma raiz da função. fun é uma string contendo o nome % nome de uma função de valor real, de uma variável real; funções ordinárias % são definidas em arquivos M. % x é um valor inicial (chute). O valor retornado está perto de um ponto % onde a fun muda de sinal. Por exemplo, % bisect('sin', 3) é PI. Note as aspas em torno de sin. % % Um terceiro argumento opcional especifica uma tolerância para a precisão % relativa do resultado. O padrão é eps (valor padrão do Matlab para precisão % em ponto flutuante). % Um segundo argumento de saída opcional dá um matriz contendo a observação % dos passos de execução; as linhas são da forma [c f(c)]. % Inicialização if nargin < 3 , tol = eps; end trace = (nargout == 2) if x ~=0, dx = x/20; else, dx = 1/20; end a = x – dx; fa = feval(fun,a); b = x + dx; fb= feval(fun,b); % Ache a mudança de sinal while (fa > 0) == (fb > 0) dx = 2.0*dx; a = x – dx; fa = feval(fun,a); if (fa > 0) ~= (fb > 0), break; end b=x+dx; fb=feval(fun,b); end if trace, stpes=[a fa; b fb]; end % Loop Principal while abs(b –a) > 2.0 * tol * max(abs(b),1.0) c = a + 0.5*(b-a); fc = feval(fun,c); if trace, steps = [steps; [c fc]]; end if (fb > 0) == (fc > 0) b =c; fb = fc; else a =c; fa =fc; end end Algumas das funções do Matlab são embutidas enquanto outras são distribuídas em arquivos M. A lista atual de arquivo M – do Matlab ou do usuário – pode ser vista com o comando type nome_da_função. Por exemplo: type eig eig is a built-in function. type randint1 function a = randint1(m,n) % RANDINT gera uma matriz de números aleatórios % randint(m,n) retorna uma matriz m x n com valores entre 0 e 9. a = floor(10*rand(m,n)); Índice 13. Strings, Mensagens de Erro, Entrada. Strings são fornecidas para o Matlab limitadas por aspas simples. Exemplo: s = 'Este e um teste.' Strings podem ser apresentadas com a função disp. Por exemplo: disp('Esta mensagem esta sendo apresentada') Mensagens de erro podem ser apresentadas pela função error. error('A matriz deve ser simetrica') Observação: Dentro de um arquivo M esta mensagem pára a execução e sai do arquivo M. Em um arquivo M o usuário pode ser requisitado a entrar com dados de forma interativa. Exemplo: iter = input("Entre o numero de interacoes : ') Observação: O comando input não funciona com o Notebook (ambiente vinculado ao Microsoft Word). Índice 14. Manipulação de Arquivos M Para-se criar ou editar um arquivo M enquanto mantem-se o Matlab ativo sem perder as variáveis globais no ambiente atualmente. Pode-se usar a característica de ! para chamar um editor de textos. O comando ! permite a execução de comandos do sistema sem sair do Matlab. Ex.: !dir, !rename, etc. Na edição de textos pode-se usar qualquer editor de texto ascii disponível no sistema. No windows, quando da instalação o ambiente Matlab especifica como padrão o notepad. Entretanto, é possível especificar qualquer outro editor escolhendo-se a opção Options da barra de menu do Matlab, depois escolhendo a opção Editor Preference e digitar o caminho e o nome do editor escolhido. Para versões mais antigas do Matlab o procedimento pode ser diferente. No windows, assim como no Unix e nos sistemas que permitem multiprocessamento, é possível manter tanto a janela do ambiente Matlab, quanto o editor de texto ativos. Observação: De dentro do Matlab, o comando dir lista o conteúdo do diretório atual, enquanto o comando what lista apenas os arquivos M do diretório. Os comandos do Matlab delete e type podem ser usados para apagar um arquivo e imprimir um arquivo na tela, respectivamente, e chdir pode ser usado para mudar o diretório de trabalho. Enquanto estes comandos podem duplicar os comandos do sistema operacional,eles não precisam de um ! antes. Os arquivos M devem estar acessíveis ao Matlab. Nas instalações em mainframe e em rede de workstations, os arquivos M pessoais que são armazenados em um subdiretório da área do usuário nomeado <matlab>, por exemplo, serão acessíveis ao Matlab a partir de um diretório no qual o usuário está. Índice 15. Formato de Saída Os cálculos no Matlab são feito com precisão dupla, mas o formato de apresentação da saída pode ser controlado pelos comandos abaixo: format short ponto fixo com 4 casas decimais (o padrão) 35.8333 format long ponto fixo com 14 casas decimais 35.83333333333334 format short e notação científica com 4 casas decimais 3.5833e+01 format long e notação científica com 15 casas decimais 35.83333333333334e+01 format hex hexadecimal 4041eaaaaaaaaaab format bank duas casa decimais 35.83 format rat aproximação racional 215/6 format + positivo, negativo ou zero + Uma vez acionado, o comando escolhido permanece até ser mudado. Os comandos de formatação também podem ser acionados a partir do menu de barra do Matlab. Selecione a opção Options, dentro dele selecione Numerical Format e mova o cursor sobre o formato desejado. format compact suprime a maioria das linhas em branco; permite que mais informação seja colocada na tela ou na página. Ele independe de outros comandos de formatação. Índice 16. Cópia Para se obter uma cópia em arquivo do que aparece na tela, durante a execução de um comando do Matlab, usa- se o comando diary. diary <nome do arquivo> Após esse comando tudo que aparecer na tela, será copiado para o arquivo (exceto gráficos) especificado. Se o nome do arquivo é omitido, o comando cria um arquivo padrão diary. O comando continua escrevendo no arquivo até se digitar: diary off - que desabilita a opção de cópia. Para continuar com a cópia, é suficiente digitar: diary on - que o Matlab volta a escrever no arquivo. Arquivo resultante pode ser editado ou impresso, usando-se qualquer editor de textos. Índice 17. Gráficos O Matlab pode produzir gráficos em planos (2D e 3D) e em malhas 3D para superfícies. Gráficos em Planos: O comando plot cria gráficos de x-y no plano; se x e y são vetores de mesmo tamanho, o comando plot(x,y) abre uma janela gráfica e desenha um gráfico x-y dos elementos de x versos os elementos de y. Exemplo: x=-4:.01:4; y=sin(x); plot(x,y) x é uma partição do domínio com tamanho de grade de 0.01; y é um vetor que dá os valores do seno nos nós da partição (relembre que o seno opera em função do ponto). Quando na tela gráfica, pressionando qualquer tecla retorna-se para a tela de comando enquanto o comando shg (mostra gráfico) e depois retorna-se para tela gráfica atual (função mais atual: figure(gcf)). Ex.: Desenhar o gráfico de y=exp(-x.^2) no intervalo –1.5 a 1.5. x = -1.5:0.01:1.5; y= exp(-x.^2); plot(x,y) Note o comando .^ significando operação ponto do vetor x. Também é possível fazer um gráfico de curvas paramétricas. Ex.: t=0:0.001:2*pi; x=cos(3*t); y=sin(2*t); plot(x,y) O comando grid colocauma grade de linhas sobre o gráfico atual. Experimente refazer o comando anterior e depois digite grid. Gráficos podem ter títulos, eixos rotulados e textos dentro do gráfico. Para isso usa-se os seguintes comandos que tem strings como argumentos. title título do gráfico xlabel rótulo do eixo x ylabel rótulo do eixo y gtext texto posicionado interativamente text posiciona texto na posição especificada Exemplos: title ('Funcao y = sin(2*x)') gera o título do gráfico. gtext('A Funcao') permite o posicionamento do texto pelo o mouse ou as teclas de seta. (Pressionando qualquer tecla posiciona-se o texto no local escolhido.) Os eixos são autoescalonados. Podem ser modificados utilizando-se o comando axis. Se c=[ xmin, xmax, ymin, ymax ] então o comando axis(c) ajusta o escalonamento dos eixos para os limites definidos no vetor c. Por padrão o comando axis congela o escalonamento atual para os gráficos subsequentes; axis('auto') - retorna-se ao auto escalonamento. axis('square') - garante que a mesma escala é usada para ambos os eixos. axis(image) - apresenta imagem com a mesma relação de aspecto da imagem. axis off - desativa os eixos axis on - ativa os eixos. Para outras características do comando axis veja help axis. Há duas formas de se fazer gráficos múltiplos em uma única janela. Considere: Ex.: x=0:0.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,x,y2,x,y3) Ex: É possível também formar um vetor Y contendo os valores funcionais como colunas: x=0:0.01:2*pi; Y=[sin(x)', sin(2*x)', sin(4*x)']; plot(x,Y) Outra forma é utilizando o comando hold. hold - congela a tela do gráfico atual de forma que gráficos subsequentes são superimpostos sobre o atual hold novamente desabilita-se a opção. hold on – habilita superposição de gráficos hold off – desabilita superposição de gráficos É possível alterar os caracteres de tipo de linha e de ponto usados como padrão. O código abaixo ilustra. Digite e execute-o no Matlab. x=0:0.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,'--',x,y2,'*',x,y3,'+') Observe que uma linha tracejada e uma linha pontilhada, são usadas para as duas primeiras curvas. A terceira usa o símbolo + em cada ponto. Os tipos de linhas e marcas são: Tipos de linha: sólido (-), tracejado (--), pontilhado (:), traço e ponto (-.) Tipos de Marcas: ponto (.), sinal de adição (+), asterisco (*), circulo (o), letra x (x) O comando subplot pode ser usado para particionar a tela e permite a apresentação simultânea de vários gráficos não superpostos. Por exemplo, tente as linhas abaixo no Matlab. x=0:0.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(3*x); y4=sin(4*x)+cos(x); y5=cos(2*x)+sin(3*x); subplot(2,2,1), plot(y1) subplot(2,2,2), plot(y2) subplot(2,2,3), plot(y3) subplot(2,2,4), plot(y4) Observe que o exemplo permite a apresentação da funções y1, y2, y3 e y4. Modifique o código para apresentar também a função y5. Impressão de Gráficos. O comando print permite que se faça uma impressão de uma figura na impressora ou para um arquivo, em algum formato. Digite help print para maiores detalhes do comando print. Gráficos em Malhas 3D É possível desenhar superfícies em malhas 3D com a função mesh. O comando mesh(z) cria um desenho 3D em perspectiva dos elementos da matriz z. A superfície da grade é definida pelas coordenadas z dos pontos, acima de uma grade retangular no plano x-y. Por exemplo, digite e execute o comando mesh(eye(10)). Para desenhar o gráfico de uma função z=f(x,y) sobre um retângulo, deve-se primeiro definir os vetores xx e yy que dão as partições dos lados do retângulo. Com a função meshgrid (domínio da grade) é possível criar uma matriz x, cujas linhas igualam-se a xx e cujas colunas têm comprimentos de yy e, similarmente, uma matriz y, cujas linhas igualam-se à matriz yy usando-se o comando: [x,y]=meshgrid(xx,yy); Depois, computa-se uma matriz z, obtida pela avaliação da função f sobre as matrizes x e y, com a qual ocomando mesh pode ser utilizada. Por exemplo, digite e execute o código abaixo, com avaliação da função z=exp(-x.^2-y.^2) sobre o quadrado definido por [-2,2] x [-2,2]. xx=-2:.1:2; yy=xx; [x,y]=meshgrid(xx,yy); z=exp(-x.^2-y.^2); mesh(z) As primeiras linhas podem ser omitidas, se modificarmos a linha de meshgrid para: [x,y]=meshgrid(-2:.1:2, -2:.1:2); Outras formas de desenhos estão disponíveis. Por exemplo, veja o help da função plot3. Ex. x=rand(3,20); plot3(x(1,:),x(2,:),x(3,:)) Índice Bibliografia Sigmon, K. Matlab Primer. University of Florida. 1992 Hanselman, D.; Littlefield, B. Matlab Versão do Estudante: Guia do Usuário. Makron Books, São Paulo, 1997. Leonard, N.E.; Levine, W.S. Using Matlab to Analyze and Design Control Systems. The Mathworks, Addison Wesley, 1995. Site na internet. http://www.mathworks.com http://www.mathworks.com/education/
Compartilhar