INTRODUÇÃO AO MATLAB O que é o MATLAB? MATrix LABoratory Software de alto desempenho que realiza cálculos utilizando matrizes. Seus comandos são mais próximos da forma como escrevemos expressões algébricas, tornando mais simples o seu uso. MATLAB é definido como um sistema interativo e uma linguagem de programação para computação técnica e científica em geral, integrando a capacidade de fazer cálculos, visualização gráfica e programação. Para que usamos então o MATLAB? • cálculos matemáticos; • desenvolvimento de algoritmos; • modelagem, simulação e confecção de protótipos; • análise, simulação e confecção de dados; • gráficos científicos e de engenharia; • desenvolvimento de aplicações, incluindo a elaboração de interfaces gráficas com o usuário. Conhecendo o Ambiente do MATLAB Conhecendo o Ambiente do MATLAB Área de Trabalho Histórico de comandos Janela de Comando Formas de Utilizar o MATLAB • Para utilizar o MATLAB, você pode inserir diretamente na janela de comando as instruções desejadas. • Você pode também criar um arquivo denominado Mfile, para posteriormente executar suas instruções. • Para essa segunda opção será aberto um editor de códigos. Funcionamento do MATLAB • Diretamente na janela de comandos • Uma vez inicializado o Matlab, aparecerá na janela de comandos um prompt >> • O prompt significa que o Matlab está esperando um comando. Todo comando deve ser finalizado teclando-se Enter. Funcionamento do MATLAB • No Matlab, pode-se obter ajuda sobre qualquer comando ou função. >> help • Ajuda sobre um pacote específico ou sobre um comando ou função é obtida com o comando: >> help nome Cálculos Científicos • O Matlab faz cálculos simples e cientícos como uma calculadora. • Suponha que você vai a uma loja e compra 3 objetos que custam 25 reais cada e 5 objetos que custam 12 reais cada. Quanto custou a sua compra? • No Matlab você pode resolver este problema de pelo menos duas maneiras. A mais simples é >> 3*25 + 5*12 ans = 135 Cálculos Científicos • Observe que no Matlab a multiplicação tem precedência sobre a adição. Note também que ele chamou o resultado de ans. • Alternativamente, você pode usar variáveis para armazenar informação. >> q1=3, p1=25, q2=5, p2=12 q1 = 3 p1 = 25 q2 = 5 p2 = 12 Cálculos Científicos >> total=q1*p1+q2*p2 total = 135 • O Matlabr aritméticas: • • • • oferece as seguintes operações a+b soma a e b. Por exemplo, 5+6. a-b subtrai a de b. Por exemplo, 15-12. a*b multiplica a por b. Por exemplo, 3.14*0.15. a^b calcula a elevado a b. Por exemplo, 5^(1/2) Cálculos Científicos • Observe que no Matlab o sinal de igual tem um sentido diferente daquele da Matemática. Aqui, igual significa atribuição. O que estiver à direita do sinal de igual é “colocado" na variável que estiver à esquerda. • Usamos a vírgula para separar os comandos que são dados em uma mesma linha. • Esta separação poderia ser feita com ponto e vírgula. Mas, neste caso o Matlab não mostra os resultados dos comandos. Cálculos Científicos >> q1=3; p1=25; q2=5; p2=12; >> total=q1*p1+q2*p2 • Em qualquer momento, podemos ver o valor que está contido em uma variável, simplesmente digitando no prompt o seu nome. >> total total = 135 Variáveis • O Matlab tem certas regras para nomear as variáveis. • Os nomes de variáveis devem ser nomes iniciados por letras não podem conter espaços nem caracteres de pontuação. • O Matlab faz diferença entre letras maiúsculas e minúsculas. • Alguns nomes são usados para variáveis predefinidas. Variáveis Pré Definidas • • • • • • • • • ans - usada para os resultados. pi - número 𝜋. inf - significa infinito. NaN ou nan - significa não é um número, por exemplo, 0/0. i e j - unidade imaginária −1. nargin - número de argumentos de entrada de uma função. nargout - número de argumentos de saída de uma função. realmin - menor número que o computador pode armazenar. realmax - maior número que o computador pode armazenar. Funções Científicas • O Matlab tem uma série de funções científicas pré definidas. • A maioria pode ser usada da mesma forma que seria escrita matematicamente. Por exemplo >> x=sqrt(2)/2 x = 0.7071 >> y=acos(x) y = 0.7854 >>y_graus=y*180/pi y_graus = 45.0000 Funções Científicas • • • • • • • • • • • • • • • • • • abs(x) - valor absoluto de x. acos(x) - arco cujo cosseno é x. asin(x) - arco cujo seno é x. atan(x) - arco cuja tangente é x. ceil(x) - maior inteiro mais próximo de x. cos(x) - cosseno de x. exp(x) - exponencial de x. fix(x) - parte inteira de x real. floor(x) - menor inteiro mais próximo de x. gcd(x,y) - máximo divisor comum de x e y. lcm(x,y) - mínimo múltiplo comum de x e y. log(x) - logaritmo de x na base e. log10(x) - logaritmo de x na base 10. rem(x,y) - resto da divisão de x por y. round(x) - inteiro mais próximo de x. sin(x) - seno de x. sqrt(x) - raiz quadrada de x. tan(x) - tangente de x. Variáveis e Expressões Simbólicas • Agora, vamos ver como podemos manipular com expressões que além de números e variáveis numéricas, contém também variáveis simbólicas. Por exemplo: >> syms x >> simplify((sin(x))^2+(cos(x))^2) ans = 1 • Estes comandos mandam o Matlab simplificar a expressão sen2x + cos2x. Primeiro precisamos dizer ao Matlab que x é uma variável simbólica, depois simplificar a expressão que envolve x. • Neste caso usamos uma função chamada simplify. Aqui função é um comando, que pode ter alguns argumentos de entrada e alguns de saída. Neste caso, a função simplify tem como argumento de entrada uma expressão simbólica e de saída também. Variáveis e Expressões Simbólicas • Uma vez definido que a variável x é uma variável simbólica, podemos definir expressões que envolvem esta variável. Por exemplo, dadas duas funções: f(x) = 2x2+ 3x - 5 e g(x) = x2 - x + 7; podemos fazer uma série de operações algébricas envolvendo estas funções. Variáveis e Expressões Simbólicas >> f=2*x^2+3*x-5; g=x^2-x+7; >> f+g ans = 3*x^2+2*x+2 >> f-g >> f*g >> expand(ans) >> f/g >> expand(ans) >> pretty(ans) >> f^3 >>expand(ans) Variáveis e Expressões Simbólicas • O Matlab pode realizar operações mais avançadas sobre expressões simbólicas. A função compose calcula a composição das funções f(x) e g(x) em f(g(x)), a função finverse encontra a inversa funcional de uma expressão e a função subs substitui uma variável por um número (ou por outra variável) em uma expressão. >> f=1/(1-x^2); g=sin(x); >> compose(f,g) ans = 1/(1-sin(x)^2) >> compose(g,f) ans = sin(1/(1-x^2)) >> finverse(g) ans = asin(x) >> subs(f,x,2) ans = -1/3 Variáveis e Expressões Simbólicas • O Matlab pode resolver equações. Por exemplo, para resolver a equação ax2+ bx + c = 0; algebricamente, podemos usar os comandos: >>syms a b c x >> solve(a*x^2+b*x+c) ans = [1/2/a*(-b+(b^2-4*a*c)^(1/2))] [1/2/a*(-b-(b^2-4*a*c)^(1/2))] >>pretty(ans) Variáveis e Expressões Simbólicas • • • • • • • • • • diff(f) - calcula a derivada de f. compose(f,g) - determina a composta f(g(x)). expand(expr) - expande uma expressão expr. finverse(expr) - determina a inversa funcional da expressão expr. pretty(expr) - exibe a expressão expr numa forma mais bonita. simple - procura encontrar uma forma mais simples de escrever uma expressão expr. simplify(expr) - simplifica a expressão expr. solve(expr) - acha a(s) solução(es) da equação expr= 0. subs(expr,x,a) - substitui na expressão expr a variável x por a. syms x y z a - define as variáveis simbólicas x, y, z e a Variáveis e Expressões Simbólicas • Existem várias outras funções para manipulação de expressões algébricas. Você pode obter informações sobre elas digitando help symbolic. • Uma função interessante que mostra as capacidades do Matlab em tratar com funções matemáticas é funtool que é uma calculadora para funções. Variáveis e Expressões Simbólicas • As categorias gerais de funções matemáticas disponíveis no MATLAB incluem: • Matemática elementar; • Funções especiais; • Matrizes elementares e especiais; • Decomposição e fatorização de matrizes; • Análise de dados; • Polinômios; • Solução de equações diferenciais; • Equações não-lineares e otimização; • Integração numérica; • Processamento de sinais. Vetores e Matrizes • O MATLAB permite a manipulação de linhas, colunas, elementos individuais e partes de matrizes. Vetores e Matrizes X=primero : último Cria um vetor x começando com o valor primeiro, incrementando-se de 1(um) em 1(um) até atingir o valor último ou o valor mais próximo possível de último X=primeiro:incremento: Cria um vetor x começando com o valor primeiro, último incrementando-se do valor incremento até atingir o valor último ou o valor mais próximo possível de último X=linspace(primeiro, último, n) Cria um vetor x começando com o valor primeiro e terminado no valor último, contendo n elementos linearmente espaçados. X=logspace(primeiro, último, n) Cria um vetor x começando com o valor 10primeiro e terminando no valor 10último, contendo n elementos logaritmicamente espaçados X=[2 2*pi sqrt(2) 2-3j] Cria um vetor x contendo os elementos especificados Vetores e Matrizes • Exemplo 1: >> x = 1 : 5 gera um vetor linha contendo os números de 1 a 5 com incremento unitário. Produzindo • Exemplo 2: >> z = 6 : -l : l • Exemplo 3: Pode-se, também, gerar vetores usando a função linspace. Por exemplo, >> k = linspace(0, l, 6) >> x = linspace(1,10.5,5) Vetores e Matrizes • Exemplo 4: >> x=logspace(0,2,5) • Exemplo 5: >> x=[8 6 8.10 5*pi] Vetores e Matrizes • Nos exemplos apresentados os vetores possuem uma linha e várias colunas (vetores linha). • Da mesma forma podem existir vetores coluna (uma coluna e várias linhas). Para se criar um vetor coluna elemento por elemento estes devem estar separados por ( ; ). Por exemplo: >>v=[1.5;-3.2;9] Vetores e Matrizes • Esses vetores coluna podem também ser criados a partir dos comandos utilizados anteriormente para criar os vetores linha, acompanhados do símbolo (' ), que é o operador de transposição. Exemplo: >> y=(1:0.5:3)‘ >> z=[0 -2.3 4 sqrt(33)]' Endereçamento de Vetores • No Matlab, cada um dos elementos de um vetor podem ser acessados através de seu índice que identifica cada uma das colunas. Por exemplo : >> x=1:10 x= 12345678910 >> x(3) % Acessa ans = 3 >> x(5) % Acessa ans = 5 o terceiro elemento de x o quinto elemento de x Endereçamento de Vetores • Esses elementos de um vetor também podem ser acessados em blocos. Por exemplo: >> c=linspace(10,40,7) c =10 15 20 25 30 35 40 >> c(3:5) % terceiro a quinto elemento ans = 20 25 30 >>c(5:-2:1) % quinto, terceiro elementos de c ans = 30 20 10 de c e primeiro Endereçamento de Vetores • O endereçamento indireto também é possível, permitindo referenciar os elementos em qualquer ordem: >> c([4 1]) ans = 25 10 %quarto e primeiro elementos • No caso de vetores coluna, os comandos acima funcionam de maneira similar. Por exemplo: >> d=c' Endereçamento de Vetores >> d([4 1]) ans = 25 10 >> d(5:-2:1) ans = 30 20 10 %quarto e primeiro elementos Operações entre Vetores • As operações básicas entre vetores só são definidas quando estes tiverem o mesmo tamanho e orientação (linha ou coluna). Estas operações são: Matrizes • O MATLAB trabalha essencialmente com um tipo de objeto, uma matriz numérica retangular ( 1x1; 2x2; 3x3; i ( linha) x j (coluna); etc). • Para criar uma variável onde é armazenada uma matriz, basta escrever os elementos da matriz entre colchetes [ ... ], sendo os elementos de uma mesma linha da matriz separados por vírgula e as linhas separadas por ponto e vírgula. Matrizes • Por exemplo, para armazenar a matriz: 1 4 2 3 5 6 • numa variável de nome A usamos o comando >> A=[1,2,3;4,5,6] Matrizes • O operador ‘:’ indica da onde ate aonde • Podemos acessar os elementos de uma matriz usando os comandos >> A(2,3) 6 >> A(2,:) 4 5 6 >> A(:,1) 1 4 >> A(:,1:2) 1 2 4 5 Matrizes • As matrizes podem ser concatenadas >> B=[A,[7;8]] B = 1 2 3 7 4 5 6 8 >> [A;[7,8,9]] ans = 1 2 3 4 5 6 7 8 9 Matrizes • Existem algumas funções para geração de algumas matrizes elementares: • zeros: Cria uma matriz preenchida com zeros >>Z= zeros(2,5) Z= 0 0 0 0 0 0 0 0 0 0 • ones: Cria uma matriz preenchida com uns >>A= ones(3,4) A= 1 1 1 1 1 1 1 1 1 1 1 1 Matrizes • eye: Cria a matriz >> eye(3) ans = 1 0 0 identidade 0 1 0 0 0 1 • rand: Cria uma matriz de números aleatórios entre 0e1 >>round(10* rand(2,3)) ans = 0 2 7 9 3 3 Matrizes • randn: Cria uma matriz de números aleatórios. >>randn(3,5) ans = 0.5287 0.2193 -0.9219 -2.1707 -0.0592 -1.0106 0.6145 0.5077 1.6924 0.5913 -0.6436 0.3803 -1.0091 -0.0195 -0.0482 • magic(N) – gera matriz quadrada de ordem N de números inteiros que têm a soma de cada linha, coluna ou diagonal principal iguais. >> magic(3) ans = 8 3 4 1 5 9 6 7 2 Operações com Matrizes • As operações com matrizes no MATLAB são as seguintes: • • • • • • Transposta, Inversa, Determinante; Adição; Subtração; Multiplicação; Divisão à direita; Divisão à esquerda; Operações com Matrizes • Transposta - O caracter apóstrofo, " ' " , indica a transposta de uma matriz. Considere os exemplos a seguir: >>A=[1 A =1 2 4 5 7 8 >> B = B =1 4 2 5 3 6 >> x = X = -1 0 2 2 3; 4 5 6; 7 8 0] 3 6 0 A‘ 7 8 0 [-1 0 2]' Operações com Matrizes • • • • • • • • det(A) – determinante de A. inv(A) – inversa de A. reshape(A) – reformata A. size(A) – vetor contendo o tamanho de cada dimensão de A. lenght(A) – comprimento do vetor ou dimensão máxima de A diag(A) – retorna a diagonal de A em um vetor tril(A) – matriz triangular inferior de A triu(A) – matriz triangular superior de A Operações com Matrizes • Adção/Subtração - A adição e subtração de matrizes são indicadas, respectivamente, por "+" e "-". As operações são definidas somente se as matrizes tiverem as mesmas dimensões. Por exemplo, a soma com as matrizes mostradas acima, A + x, não é correta porque A é 3x3 e x é 3x1. Porém, >> C = A + B é aceitável, e o resultado da soma é C = 2 6 10 6 10 14 10 14 0 Operações com Matrizes • A adição e subtração também são definidas se um dos operadores é um escalar, ou seja, uma matriz l x l. Neste caso, o escalar é adicionado ou subtraído de todos os elementos do outro operador. Por exemplo: >> y = x - 1 • resulta em Y = -2 -1 1 Operações com Matrizes • Existem também algumas funções que auxiliam em operações, como: • S=sum(A(:)) – soma todos os elementos da matriz A. • S=sum(A(x:y)) – soma todos os elementos da matriz A indo de x ate y. • S=sum(A) – soma todos os elementos de cada coluna separadamente e os coloca numa matriz linha. Operações com Matrizes • Existem também algumas funções que auxiliam em operações, como: • S=sum(A(:)) – soma todos os elementos da matriz A. • S=sum(A(x:y)) – soma todos os elementos da matriz A indo de x ate y. • S=sum(A) – soma todos os elementos de cada coluna separadamente e os coloca numa matriz linha. Operações com Matrizes • Multiplicação - A multiplicação de matrizes é indicada por "*". A multiplicação A*B é definida somente se a segunda dimensão de A for igual à primeira dimensão de B. A multiplicação: • A(3,2) e B(2,5) A = 0 0 1 1 0 1 B = 0 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 2 0 0 1 1 0 1 >> A*B Operações com Matrizes • O produto de uma matriz por um vetor é um caso especial do produto entre matrizes. • Por exemplo A e 3, >> B = A*3 • que resulta em B = 0 0 3 3 0 3 Operações com Matrizes • O produto de uma matriz por um vetor é um caso especial do produto entre matrizes. • Por exemplo A e 3, >> B = A*3 • que resulta em B = 0 0 3 3 0 3 Operações com Matrizes • Além da multiplicação matricial e escalar, podemos ter a multiplicação por elemento de matrizes de mesma dimensão. Esse tipo de operação é feita utilizando-se um ponto ( . ) antes do operador de multiplicação ( * ). • A = [1,2;3,4] e B = [5,6;7,8] • A.*B = [1*5,2*6;3*7,4*8] • Ou >>A.*B 5 12 21 32 Operações com Matrizes • A divisão segue os padrões da divisão das matrizes onde: • Divisão à esquerda: X = A\B é a solução de A*X = B, pois X = inv(A)*B • Divisão à direita: X = B/A é a solução de X*A = B, pois X = B*inv(A) • A divisão por escalar segue o mesmo padrão da multiplicação por escalar, utilizando o operador “./”. GRÁFICOS NO MATLAB GRÁFICOS NO MATLAB • MATLAB possui ferramentas poderosas e amigáveis para a visualização de dados em módulo gráfico. • Um recurso interessante para Gráficos em linha é o comando plot. • É o comando mais simples e, talvez o mais útil para produzir gráficos 2-D. PLOT NO MATLAB • FOMMA plot(Abcissas,Ordenadas,’estilo’) • Onde Abcissas e Ordenadas são vectores (com a mesma dimensão) que contêm as abcissas e ordenadas de pontos do gráfico e estilo é um argumento opcional que especifíca o estilo da linha ou ponto a desenhar. PLOT NO MATLAB • Estilos PLOT NO MATLAB • Estilos PLOT NO MATLAB • Títulos, designação dos eixos, legendas e outras características, podem ser acrescentadas a um dado gráfico, usando as funções title, xlabel, ylabel, grid, text, legend, etc. Estas funções têm a forma seguinte. • • • • • • • • title(’título’) produz um título na parte superior do gráfico xlabel(’nome x’) o eixo dos xx ´e designado por nome x ylabel(’nome y’) o eixo dos yy ´e designado por nome y grid coloca uma quadrícula no gráfico text(x,y,’texto em x y’) escreve o texto texto em x y na posição (x, y) gtext(’texto’) permite colocar texto numa posição a indicar com o mouse legend(’texto1’,’texto2’) produz uma legenda com texto1 e texto2 legend off retira legenda PLOT NO MATLAB • Também possível controlar os limites dos eixos através do comando axis. A função axis tem várias opções que permitem personalizar os limites, a escala, a orientação, etc, de um gráfico. axis([xmin xmax ymin ymax]) • os limites passam a ser xmin e xmax para o eixo dos xx e ymin e ymax para o eixo dos yy. Este comando deve aparecer depois do comando plot. • A função axis também aceita palavras chave para controlar os eixos. Por exemplo, axis square, axis equal, axis auto, axis on, etc. (Detalhes em help axis). PLOT NO MATLAB • Numa mesma figura gráficos, recorrendo instruções hold on plot(x1, plot(x2, plot(x3, hold off podem sobrepor-se vários ao comando hold. As y1) y2) y3) • originam a sobreposição de três gráficos. Este objetivo também pode ser atingido, usando plot(x1, y1, x2, y2, x3, y3) PLOT NO MATLAB • Exemplo: >> t=linspace(0,2*pi); y1=sin(t); y2=t; y3=t-(t.^3)/6+(t.^5)/120; plot(t,y1,'r',t,y2,'b',t,y3,'go') axis equal axis([0 6 -1 5]) grid xlabel('t') ylabel('Aproximações para sen(t)') title('Exemplo 1') text(3.5,0,'sen(t)') gtext('Aproximação linear') gtext('Primeiros 3 termos') gtext('da série de Taylor') PLOT NO MATLAB PLOT NO MATLAB • Exemplo: >>x=0:0.1:2*pi; % define pontos no eixo x y=sin(x); % seno de x z=cos(x) % cosseno de x plot(x,y,x,z) % dois gráficos title('Exemplo de 2 graficos: seno(x) cosseno(x)') % define título e PLOT NO MATLAB • Subplotting - A mesma figura pode ter mais do que um gráfico. Para que tal seja possível é necessário utilizar a função subplot, tal como é apresentado de seguida: >>subplot(m,n,p) • Este comando divide a figura numa matriz de m linhas e n colunas, podendo deste modo criar m*n gráficos em cada figura. Veja-se o seguinte exemplo: x y z w = = = = PLOT NO MATLAB linspace(0,2*pi,50); sin(x); cos(x); tan(x); subplot(2,2,1) plot(x,y) subplot(2,2,2) plot(x,z) subplot(2,2,3) plot(x,w) PIE NO MATLAB • Gráficos em Pizza >> A=[4.3 3.2 2.25 1]; pie(A,A==max(A)); % destaca a fatia maior title('Grafico Pie com max destaque') legend('SP','MG','RN','MS') em PIE NO MATLAB • Gráficos em Pizza >> A=[4.3 3.2 2.25 1]; pie(A,[0 1 1 0]) % destaca as fatias com 1 na posicao correspondente title('Grafico Pie') legend('SP','MG','RN','MS') PIE NO MATLAB • Gráficos em Pizza >>A= [1.1 2.2 3.3 4.4]; pie3(A) title('Grafico Pie 3D') BAR NO MATLAB • Gráficos em Barras • Exemplo 2D >>x=-1.9:0.2:1.9; % cria x y=exp(-x.*x); % cria y bar(x,y) title('Grafico de barras') Exemplo 3D >>x=-1.9:0.2:1.9; % cria x y=exp(-x.*x); % cria y bar3(x,y,'y') title('Grafico de barras 3D') BARh NO MATLAB • Gráficos em Linhas • Exemplo 2D >>x=-1.9:0.2:1.9; % cria x y=exp(-x.*x); % cria y barh(x,y) title('Grafico de barras horizontal') Exemplo 3D x=-1.9:0.2:1.9; % cria x y=exp(-x.*x); % cria y bar3h(x,y,'r') title('Grafico de barras horiz. 3D') POLAR NO MATLAB • Gráficos Polar >>angulo=0:0.05:2*pi; raio=1+sin(3*angulo).*cos(2.5*angulo); polar(angulo,raio,'r-') % mostra ang e raio title('Grafico polar: ang e raio') PLOT3 NO MATLAB • Gráficos em 3D >>t=0:0.01:6*pi; % intervalo para eixo t plot3(sin(t), cos(t), t) % eixos x,y,z • Exemplo 2 >>t=0:0.01:6*pi; %define eixo z plot3(sin(t),cos(t),t) % eixos x, y, z xlabel('Eixo x') ylabel('Eixo y') zlabel('Eixo z') title('Grafico 3D de linha') MESH NO MATLAB • Gráficos em 3D • definir uma "grade" de pontos X Y no plano x-y • aplicando meshgrid() [X,Y]=meshgrid(2*pi:0.5:2*pi,3*pi:0.5:3*pi) • a seguir grafico 3D reticulado • 3º argumento é o valor no eixo Z mesh(X,Y,sin(sqrt(X.*X+Y.*Y))) title('Grafico 3D reticulado') colorbar % a cor indica o valor no eixo • Olha o gráfico tipo surf() Z MESH NO MATLAB MESH NO MATLAB • Gráficos em 3D >>mesh(peaks) colorbar % função peaks() pré-definida >> mesh(peaks) [x,y,z]=peaks; contour(x,y,z,20) >> mesh(peaks) [x,y,z]=peaks; contour3(x,y,z,20) %20 curvas de nivel colorbar % 20 curvas de nivel 3D colorbar MESH NO MATLAB • Gráficos em 3D >>mesh(peaks) colorbar rotate3d on - ligar a opção de arrastar o gráfico com o mouse e mudar o ponto de vista 3D >>colormap(hot) % escolhe mapa de cores surfl(peaks) % surfl p/ iluminar com constrate shading interp; % tira reticulado title('Surf com iluminacao') colorbar