Baixe o app para aproveitar ainda mais
Prévia do material em texto
Uma Rápida Introdução ao MATLAB Dr. Oclide José Dotto Vetores – Matrizes – Polinômios – Formatos numéricos – Gráficos – M-Files – Help MATLAB é um software iterativo para computação numérica, computação simbólica e visualização de dados; é de uso obrigatório para a formação do engenheiro e do matemático em inúmeras universidades no mundo, e sua utilização abrange todos os setores que precisam da Matemática ou Física. Acompanham o software muitas diferentes toolboxes, que estendem as funções básicas do MATLAB em diferentes áreas de aplicação. Aconselhamos ler essas notas diante do MATLAB em funcionamento e fazer experimentos. Vetores Comecemos criando algo simples, como um vetor. Para criar um vetor v, escrevemos (e acionamos a tecla enter) na janela de comando do MATLAB, por exemplo: v = [1 2 3 4 5 6 9 6 6] v = 1 2 3 4 5 6 9 6 6 O itálico é a resposta do MATLAB. As componentes de v devem estar separadas por um espaço ou por vírgula. Um fato geral que você deve conhecer: quando um comando termina com ponto e vírgula ( ; ), o MATLAB memoriza o resultado, mas não o representa na tela. Digamos que você precise de um vetor com as componentes 0, 2, 4, . . ., 200, espaçadas por duas unidades, mas não quer o resultado representado na tela, por ser muito grande; você escreve na janela de comandos: x = 0:2:200; Esse vetor x fica na memória do MATLAB e você pode fazer com ele tudo o que precisa. Por exemplo, para saber qual é a décima componente de x: x(10) ans = 18 para saber quantas componentes x tem: length(x) ans = 101 para calcular a soma das componentes de x: sum(x) ans = 10100 2 para calcular o vetor cujas componentes são os quadrados das componentes de v: v.^2 ans = 1 4 9 16 25 36 81 36 36 para calcular o logaritmo na base natural das componentes de v: log(v) ans = 0 0.6931 1.0986 1.3863 1.6094 1.7918 2.1972 1.7918 1.7918 Note que, quando você não atribui um nome ao resultado esperado, o MATLAB atribui o nome temporário ans (resposta). Somemos 2 a todas as componentes de v e denotemos com u o resultado: u = v+2 u = 3 4 5 6 7 8 11 8 8 Somemos os vetores u e v (podem ser somados porque têm o mesmo número de componentes): z = u + v z = 4 6 8 10 12 14 20 14 14 Acima está apenas uma amostra do que podemos fazer com vetores no MATLAB. Matrizes Toda a construção do MATLAB é estruturada sobre matrizes. Por outro lado, note que um vetor é uma ma- triz de ordem 1 por n e um número é uma matriz de ordem 1 por 1. O que você aprendeu acima sobre veto- res se transfere para matrizes. Basta saber como fornecer uma matriz ao MATLAB. Exemplifiquemos com uma matriz de ordem 3 por 4: A = [1 2 3 4;5 6 7 8;-1 0 -2 0] A = 1 2 3 4 5 6 7 8 -1 0 -2 0 Os elementos são semparados por um espaço ou vírgula. Outra maneira de fornecer ao MATLAB a matriz A é: A = [1 2 3 4 5 6 7 8 -1 0 -2 0]; A transposta da matriz A o MATLAB a calcula mediante: B = A' B = 1 5 -1 2 6 0 3 7 -2 4 8 0 3 Se A tivesse elementos complexos, A' seria a transposta conjugada de A. Para obter a transposta de uma matriz complexa A, digitamos A.' (os dois comando têm o mesmo efeito se A é real). A multiplicação específica de matrizes, digamos de B por A, é feita assim: C=A*B C = 30 70 -7 70 174 -19 -7 -19 5 O iniciante no MATLAB se sente muitas vezes frustrado com a multiplicação de matrizes. Veja: A*A ??? Error using ==> * Inner matrix dimensions must agree. Tradução: ??? Erro no uso de Î * As dimensões matriciais internas devem concordar.Sabemos que uma multiplicação matricial AB somente é possível quando o número de colu- nas de A é igual ao número de linhas de B. A matriz A acima tem 3 linhas e B, 3 colunas. Então D = A*B D = 30 70 -7 70 174 -19 -7 -19 5 Como com vetores, podemos operar com os elementos das matrizes, desde que tenham a mesma ordem: .* multiplicação elemento a elemento .^ potenciação ou exponenciação elemento a elemento ./, .\ divisão elemento a elemento (Qual seria a diferença de ./ e .\ ?). Exemplos: seja X = [1 2;3 4;2 4]; Y = [2 3; 4 5; 1 0]; X.*Y ans = 2 6 12 20 2 0 X.^Y ans = 1 8 81 1024 2 1 X./Y Warning: Divide by zero. (Type "warning off MATLAB:divideByZero" to suppress this warning.) ans = 0.5000 0.6667 0.7500 0.8000 2.0000 Inf X.\Y ans = 4 2.0000 1.5000 1.3333 1.2500 0.5000 0 Tomemos agora a matriz quadrada Z = [1 2; -2 1]; Notemos a diferença: Z1 = Z^3, Z2 = Z.^3 Z1 = -11 -2 2 -11 Z2 = 1 8 -8 1 Temos que Z1 = ZZZ, e Z2 é obtida elevando ao cubo seus elementos. As funções trigonométricas, logarítmicas, exponenciais, volor-absoluto, sqrt (raiz quadrada), etc., ope- ram elemento a elemento. Exemplos: S = sin(Z), E = exp(Z), Ab = abs(Z) S = 0.8415 0.9093 -0.9093 0.8415 E = 2.7183 7.3891 0.1353 2.7183 Ab = 1 2 2 1 Ao invés de sen, devemos usar sin; exp(x) significa ex (função exponencial natural). A raiz nésima de to- dos os elemento de uma matriz é obtida com .1/n, e, se n = 2, também com sqrt, mas X^(1/n) é o inverso de X^n. Exemplos: R =[1000 1; -1 8]; R1 = R.^(1/3), R2 = sqrt(R), R3 = R^(1/2) R1 = 10 1 0.5000 + 0.8660i 2 R2 = 31.6228 1 i 2.8284 R3 = 31.6228 0.0290 -0.0290 2.8286 Observemos as operações inversas: A = R2.^2, B = R3^2 A = 1000 1 -1 8 B = 5 1000 1 -1 8 O MATLAB memoriza cada elemento de uma matriz mediante o nome da matriz, a linha e a coluna a que ele pertence; assim, o elemento da segunda linha e primeira coluna da matriz B acima é obtido com A(2,1): B(2,1) ans = -1 Já vimos que os dois pontos ( : ) são úteis no uso dos vetores. Eles são extremamente importantes no manejo das matrizes. Por exemplo, servem para extrair de uma matriz A de ordem m por n qualquer subma- triz. Consideremos a matriz A = vandr([1 2 3 4 5 6],4) A = 1 1 1 1 8 4 2 1 27 9 3 1 64 16 4 1 125 25 5 1 216 36 6 1 A segunda linha de A é obtida com A(2,1:6), ou A(2,:) ans = 8 4 2 1 A segunda coluna, com A(1:4,2), ou A(:,2) ans = 1 4 9 16 25 36 A submatriz de A em negrito, com A(2:3,2:4) ans = 4 2 1 9 3 1 Os comandos A(:,:) e A(1:6,1:4) produzem a matriz A completa. Há alguns comandos que geram matrizes especiais, como zeros(m,n), ones(m,n) e eye(n). As duas pri- meiras produzem as matrizes de ordem m por n com todos os elementos iguais a zero e a 1, respectivamen- te, e a terceira é a matriz identidade de ordem n. Exemplifiquemos: ones(2,3) ans = 1 1 1 1 1 1 6 Polinômios Um polinômio, adotada a ordem de suas potências, fica determinado pelos seus coeficientes. O MATLAB adota a ordem decrescente das potências. Exemplos:o polinômio x4 + 1 é representado no MATLAB com o vetor [1 0 0 0 1]; o polinômio, cujo vetor dos coeficientes é p = [1 2 -3 0 0 6], é o polinõmiox5 + 2x4 – 3x3 + 6; fornecido ao MATLAB o polinômio p = [1 2 -3 0 0 6] p = 1 2 -3 0 0 6 podemos usar a função polyval para calcular os valores de p. Para ilustrar, calculemos o valor do poli- nômio p no ponto x = 1: y = polyval(p,1) y = 6 o valor de p nos pontos 0, 2, 3, -1, 6: x = [0 2 3 -1 6]; polyval(p,x) ans = 6 46 330 10 9726 Podemos extrair as cinco raízes de um polinômio facilmente; exemplifiquemos com nosso polinômio p: roots(p) ans = -3.0521 1.1166 + 0.6540i 1.1166 - 0.6540i -0.5905 + 0.9085i -0.5905 - 0.9085i Testemos essas raízes: polyval(p,ans) ans = 1.0e-013 * -0.7017 -0.1243 + 0.0844i -0.1243 - 0.0844i 0 + 0.0044i 0 - 0.0044i A rigor deveríamos ter um vetor ans com 5 componentes iguais a zero. Ocorre que as raízes numéricas fornecidas são aproximadas. Observemos a constante quase nula 1.0e-013 = 10-13 = 0,000 000 000 000 1, que multiplica todas as componentes de ans; essas são, portanto, praticamente nulas. Se quisermos as raí- zes exatas, devemos usar computação simbólica, que será objeto de outra introdução. Por exemplo, para achar as três raízes exatas do polinômio x3 – 1, procedemos assim x = solve('x^3-1=0') x = [ 1] [ -1/2+1/2*i*3^(1/2)] [ -1/2-1/2*i*3^(1/2)] 7 Isso mostras que tais raízes são: 1 e 1 3 2 2 .i− ± Formatos numéricos O MATLAB sempre memoriza um número com 15 ou 16 casas (precisão dupla), mas pode mostrar esse número com 10 formatos numéricos diferentes: short, short e, short g, long, long e, long g, +, rational, bank e hexa. Há também os dispositivos compact e loose. O format short é o default, e consiste em uma casa antes e quatro depois da vírgula; o format long consiste em uma casa antes e 14 depois da vírgula; o format rational (ou rat) apresenta os números na forma de fração ordinária (em geral aproximativa). E- xemplifiquemos com o número π: x = pi x = 3.1416 format long x x = 3.14159265358979 format bank x x = 3.14 format rat x x = 355/113 format long e 105*pi ans = 3.298672286269283e+002 A expressão e+002 significa que o número 3.298672286269283 é multiplicado por 102. Quando en- tramos com um formato, digamos format long, todos os números mostrados daí em diante serão exibidos nesse formato, até que resolvamos entrar com outro formato. Gráficos O MATLAB tem uma variedade riquíssima de formas de visualizar geometricamente dados – gráficos 2D e 3D. Aqui mostraremos apenas o funcionamento de plot. É importante compreender como o MATLAB pro- cede: tomemos o vetor (abscissas) x = [1 -2 3 5 6]; e o vetor (correspondentes ordenadas) y = [0 1 3 5 2]; Entrando agora com plot(x,y) obtemos a Figura 1. Que é que o MATLAB fez? – Marcou os pontos (1,0), (-2,1), (3,3), (5,5), (6, 2) e os uniu com segmentos, nessa ordem, produzindo uma poligonal (azul). Se entramos com plot(x,y,'o'), 8 o MATLAB produz a Figura 2, isto é, não liga os pontos. -2 -1 0 1 2 3 4 5 6 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Figura 1 -2 -1 0 1 2 3 4 5 6 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Figura 2 Se forem muitos os pontos represenados, não percebemos que se trata de uma poligonal e nos parecerá uma curva lisa. Exemplificamos com o gráfico da função sen no intervalo [0 ;2π], na Figura 3: x = 0:.01:2*pi; y = sin(x); plot(x,y), grid 9 O comando grid manda fazer a grade, que permite localizar melhor visualmente o gráfico. 0 1 2 3 4 5 6 -1 -0.5 0 0.5 1 Figura 3 Para imprimir uma figura, clique no ícone com a forma de impressora na janela da figura, etc. Para guardar (salvar) uma figura, escolha, na opção file da janela da figura, save ou save as ..., etc. Para trans- portar uma figura, por exemplo para o Word, escolha, na janela da figura, com o mouse, Edit – Copy Figu- re, e depois cole-a no Word. M-files Um m-file é um arquivo, que consiste numa seqüência de comandos na linguagem do MATLAB. Quando o arquivo é executado, o MATLAB lê os comandos e os executa exatamente como se fossem digitados se- qüencialmente no prompt do MATLAB. Os nomes dos m-files devem ter a extensão .m. Por exemplo, um m-file com o nome somapol deve ser guardado com a identificação somapol.m. Mas, se usarmos o editor do MATLAB, tal extensão é colocada automaticamente por esse editor. Há dois tipos de m-files: o function-file, cuja primeira linha deve ser function [argumentos de saída] = nomedoarquivo(argumentos de entrada), e o script-file, próprio para fornecer os argumentos de entrada à medida que nos são solicitados durante a execução. Como criar um m-file? – Na janela de comandos, escolha: File – New – m-file; agora escreva o m-file. Digamos que você queira construir um m-file que some automaticamente polinômios; chame seu m-file de somapol (poderia ser qualquer nome); o m-file pode ser: function p = somapol(p1,p2) % SOMAPOL soma dois polinômios de quaisquer graus. % % Entrada: % p1, p2: polinômios na forma de vetores dos coeficientes; % % Saída: 10 % p: resultado da soma dos polinômios p1 e p2, como vetor dos coeficientes. % % Usa-se [p] = somapol(p1,p2). % % Em 01/01/2003 – Dr. Oclide José Dotto. if length(p1) < length(p2), q1 = pl; q2 = p2; else q1 = p2; q2 = pl; end m = length(p2)-length(p1); if m > 0, p = [zeros(1,m),p1] + p2; else p = p2 + p1; end As linhas precedidas por % são comentários que informam o que o m-file faz, como é usado e quem o construiu; o MATLAB não toma conhecimento dessas linhas. Guarde (salve) o arquivo, por exemplo, na pasta work (C:\matlab\work\somapol). Testemos agora o somapol com os polinômios p1 = [2 -3 4 1]; e p2 = [-1 0 0 5 2 3]; p = somapol(p1,p2) p = -1 0 2 2 6 4 Funciona! De fato, a soma dos polinômios 2x3-3x2+4x+1 e -x5+5x2+2x +3 é -x5+2x3+2x2+6x+4. Uma das grandes maravilhas do MATLAB é a facilidade de programar (construir m-files). Há muito a aprender em torno disso. Help O help (ajuda) 'on line' do MATLAB é reconhecidamente muito bem feito e completo. Para obter informa- ção sobre o comando de que precisamos, é necessário saber o nome desse comando (e saber um pouco de inglês!). Por exemplo, para obter informações sobre o comando plot: help plot PLOT Linear plot. PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, length(Y) disconnected points are plotted. PLOT(Y) plots the columns of Y versus their index. If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y)). In all other uses of PLOT, the imaginary part is ignored. Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S) where S is a character string made from one element from any or all the following 3 columns: b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star y yellow s square k black d diamond11 v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram For example, PLOT(X,Y,'c+:') plots a cyan dotted line with a plus at each data point; PLOT(X,Y,'bd') plots blue diamond at each data point but does not draw any line. PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) combines the plots defined by the (X,Y,S) triples, where the X's and Y's are vectors or matrices and the S's are strings. For example, PLOT(X,Y,'y-',X,Y,'go') plots the data twice, with a solid yellow line interpolating green circles at the data points. The PLOT command, if no color is specified, makes automatic use of the colors specified by the axes ColorOrder property. The default ColorOrder is listed in the table above for color systems where the default is blue for one line, and for multiple lines, to cycle through the first six colors in the table. For monochrome systems, PLOT cycles over the axes LineStyleOrder property. PLOT returns a column vector of handles to LINE objects, one handle per line. The X,Y pairs, or X,Y,S triples, can be followed by parameter/value pairs to specify additional properties of the lines. See also SEMILOGX, SEMILOGY, LOGLOG, PLOTYY, GRID, CLF, CLC, TITLE, XLABEL, YLABEL, AXIS, AXES, HOLD, COLORDEF, LEGEND, SUBPLOT, STEM. Digamos que você tenha esquecido como funciona o somapol; então, entra com help somapol SOMAPOL soma dois polinômios de quaisquer graus. Entrada: p1, p1: polinômios na forma de vetores dos coeficientes; Saída: p: resultado da soma dos polinômios p1 e p2, como vetor dos coeficients. Usa-se [p] = somapol(p1,p2). Em 01/01/2003 – Dr. Oclide José Dotto. O MATLAB apresentou tudo o que foi escrito antes do programa somapol propriamente dito. Se você assimilou bem o exposto acima, prosseguirá aprendendo fácil e paulatinamente com o uso, grande parte da poderosa máquina que é o MATLAB.
Compartilhar