MATLAB - Matrix Laboratory Adaptado de Profa. Carla Salso Freitas e profa. Luciana Nedel Por Profa. Patrícia Jaques Programação • Diversos níveis: – – – – – linguagem de máquina linguagem assembler linguagem C planilhas eletrônicas (Excel) pacotes científicos (MATLAB, Scilab, Mathematica) • Qual escolher? – É preciso analisar as necessidades MATLAB - INF01040 - Profa. Patrícia Jaques 2 MATLAB • Software voltado ao cálculo numérico • Integra: – – – – análise numérica; cálculo com matrizes; processamento de sinais; construções com gráficos. • Elemento básico de informação: MATRIZ. • Ótima performance. • Alto nível. • (www.mathworks.com) MATLAB - INF01040 - Profa. Patrícia Jaques 3 Pacotes científicos • MATLAB (www.mathworks.com) – – – – – linguagem de programação ambiente para desenvolvimento sistema gráfico funções matemáticas interface com linguagens de programação (C, FORTRAN) MATLAB - INF01040 - Profa. Patrícia Jaques 4 Pacotes científicos • SCILAB – sistema aberto (freeware) desenvolvido pelo INRIA (instituto francês) – implementa um subconjunto das funções do MATLAB – Disponível em: http://scilabsoft.inria.fr/ MATLAB - INF01040 - Profa. Patrícia Jaques 5 Apresentação • • • • • Software para análise numérica Cálculo com matrizes Processamento de sinais Construção de gráficos Problemas expressos numa forma mais próxima da notação matemática • Interpreta comandos do usuário dados na janela de comando. Experimente: >>sqrt(64) MATLAB - INF01040 - Profa. Patrícia Jaques 6 Introdução • Trabalha apenas com um tipo de objeto: Matrizes • Os elementos das matrizes podem ser números complexos • Escalares são matrizes 1x1 ex: >> a= 6 • Vetores são matrizes 1xN ou Nx1 • Entrando com uma matriz (3 maneiras): >>A = [1 2 3;4 5 6;6 7 8] >>A = [1 2 3 através de um arquivo 456 (ex: gera.m) 7 8 9] >>gera MATLAB - INF01040 - Profa. Patrícia Jaques 7 Matriz • A = [1 2 3;4 5 6;7 8 9] 1 2 3 4 5 6 7 8 9 Diferencia maiúsculas de minúsculas! MATLAB - INF01040 - Profa. Patrícia Jaques 8 Introdução • Se no final da linha for colocado um “;”, o Matlab executa o comando mas não mostra o resultado >>A = [1 2 3;4 5 6;7 8 9] >>B = [1 2 3;4 5 6;7 8 9]; • Elementos das matrizes podem ser uma expressão >>x = [-1.3 sqrt(2) ((1+2+3)*4/5)^2] resulta em: x = -1.3000 1.4142 23.0400 • Elementos são referenciados por índices entre parênteses: x(6) = 5 resulta em: x = -1.3000 1.4142 23.0400 MATLAB - INF01040 - Profa. Patrícia Jaques 0 0 5 9 Acessando um elemento da Matriz • A = [1 2 3;4 5 6;7 8 9] 1 1 2 3 2 3 1 1 2 4 3 7 4 10 7 2 5 5 6 8 3 8 6 9 9 A(2,1)=10 A(2)=10 MATLAB - INF01040 - Profa. Patrícia Jaques 10 Introdução • Grandes matrizes podem ser geradas a partir de pequenas: >>r=[10 11 12]; O comando abaixo anexa à matriz A o vetor r >>A=[A;r] A= 1 4 7 10 2 5 8 11 3 6 9 12 MATLAB - INF01040 - Profa. Patrícia Jaques 11 Introdução • Pequenas matrizes podem ser extraídas de grandes matrizes usando “:” >>A=A(1:3,:); seleciona as 3 primeiras linhas e todas as colunas da matriz A atual, modificando-a para sua forma original. A= 1 4 7 10 2 5 8 11 MATLAB - INF01040 - Profa. Patrícia Jaques 3 6 9 12 12 Variáveis e informações da área de trabalho • Variáveis são declaradas na forma: – variável = expressão – “ans” (answer) variável default caso um nome seja omitido. • Se a expressão é tão grande que não cabe em uma linha, pode-se continuar a expressão na próxima linha usando um espaço em branco e 3 pontos: >> s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 … -1/8 + 1/9 - 1/10 + 1/11 - 1/12 + 1/13; MATLAB - INF01040 - Profa. Patrícia Jaques 13 Variáveis e informações da área de trabalho • O comando “who” lista as variáveis da área de trabalho • “whos” mostra detalhes sobre as variáveis • clear; • clear var; • Teclas para retomar comandos digitados anteriormente MATLAB - INF01040 - Profa. Patrícia Jaques 14 Números e expressões aritméticas • Notação decimal convencional • Ex: 3 9.6374586 -99 1.602E-20 0.00001 6.06375e23 • Operadores: ^ / \ * + - exponenciação divisão à direita divisão à esquerda multiplicação adição subtração MATLAB - INF01040 - Profa. Patrícia Jaques 15 Números complexos • Número complexo z= a + b*i – onde i= √-1 • Funções “i” >> z= 3 + 4 * i • Matrizes complexas permitem também a forma: >> A= [1 2; 3 4]+i*[5 6; 7 8] • Caso “i” seja usado como variável e tenha seu valor modificado, pode-se criar uma nova unidade complexa: >> ii = sqrt(-1) >> z = 3 + 4 * ii MATLAB - INF01040 - Profa. Patrícia Jaques 16 Formatos de saída • O comando format modifica o modo como as matrizes são mostradas • format short (default) short e long long e hex rat bank + • • • • 1.3333 1.3333e+000 1.33333333333333 1.33333333333333e+000 40040000000000000 4/3 1.33 + Exemplo: >>a=2/3 >>format bank >>a MATLAB - INF01040 - Profa. Patrícia Jaques 17 Help • O comando de ajuda “help” fornece informações sobre os tópicos • help <tópico> -> mostra comandos relacionados ao tópico • help <comando> -> mostra detalhes sobre o comando • Exemplo: • >> help format MATLAB - INF01040 - Profa. Patrícia Jaques 18 Funções • Conjunto extenso de funções: • • • • • • • • • • • matemática elementar funções especiais matrizes elementares matrizes 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 MATLAB - INF01040 - Profa. Patrícia Jaques 19 Operacões com matrizes • Transposta indicada pelo caracter apóstrofo '. A=[1 2 3;4 5 6;7 8 9]; B=A' B= 1 4 7 258 369 A A’ 1 2 3 1 4 7 2 5 8 3 6 9 4 5 6 7 8 9 • det(A) – Determinante da matriz A. • inv(A) – Inversa da matriz A. MATLAB - INF01040 - Profa. Patrícia Jaques 20 Operações com matrizes • Adição e subtração indicada pelos sinais “+” e “-” respectivamente. C=A+B; • Essas operações só são definidas para matrizes com a mesma dimensão. • B=A+A’ A A’ 1 2 3 4 5 6 7 8 9 1 4 7 2 5 8 3 6 9 + B = MATLAB - INF01040 - Profa. Patrícia Jaques 2 6 10 6 10 14 10 14 18 21 Operações com matrizes • Multiplicação indicada por “*”. • Só é válida quando a 2a. dimensão da 1a. matriz for igual a 1a. dimensão da 2a. matriz. • mxn e nxp • Ex: >> A*B MATLAB - INF01040 - Profa. Patrícia Jaques 22 Operações com matrizes • A multiplicação de escalar por matriz e vice-versa também é válida. • Ex: >> B=2*A A B 1 2 3 2* 4 5 6 7 8 9 = 2 4 6 8 10 12 14 16 18 MATLAB - INF01040 - Profa. Patrícia Jaques 23 Operações com matrizes • Divisão indicada por “/” ou “\”. • Se A for quadrada, A\B e B/A correspondem a inv(A)*B e B*inv(A) respectivamente – A\B = inv(A)*B – B/A = B*inv(A) • Em geral: – X = A\B A*X = B – X = B/A X*A = B MATLAB - INF01040 - Profa. Patrícia Jaques 24 Operações com matrizes • Exponenciação -> indicada por “^”. • A^p eleva A à p-ésima potência se A for quadrada e p for um escalar. • Se p é inteiro maior do que 1, isso é feito através de múltiplas multiplicações. MATLAB - INF01040 - Profa. Patrícia Jaques 25 Operações com conjuntos • São operações aritméticas realizadas elemento por elemento da matriz. • Usa-se os mesmos caracteres das operações usuais precedidos por um ponto (“.*”, “./”, “.\”, “.^”, “.'”) • • • • • Exemplo: Crie duas matrizes quadradas a e b Faça: >>a*b >>a.*b MATLAB - INF01040 - Profa. Patrícia Jaques 26 Operações com conjuntos • Operações comparativas (<, <=, >, >, ==, ~=) podem ser realizadas entre matrizes de mesma dimensão • 1 para verdadeiro • 0 para falso – O resultado é uma matriz de 0s e 1s correspondendo a Falso e Verdadeiro – & (e) e | (ou) também podem ser usados MATLAB - INF01040 - Profa. Patrícia Jaques 27 Manipulação de vetores e matrizes • • • • • Gerando vetores: a declaração >>x = 1:5 gera o vetor linha x = 1 2 3 4 5 . (incremento de 1) Pode-se usar outros incrementos: >> y = 0:pi/4:pi y = 0.0000 0.7854 1.5708 2.3562 3.1416 • A função k=linspace(0,1,6) gera um vetor linearmente espaçado de 0 a 1, contendo 6 elementos k=0 0.2000 0.4000 0.6000 0.8000 1.0000 MATLAB - INF01040 - Profa. Patrícia Jaques 28 Manipulação de vetores e matrizes • Elementos das matrizes: utiliza-se índices entre parênteses. – >>A=[1 2 3;4 5 6;7 8 9]; – >>A(3,3) = A(1,3) + A(3,1) A=1 2 3 4 5 6 7 8 10 – A(2,1) = 4 – A(1:2, 2:3) = 0 elementos A(1,2), A(1,3), A(2,2), A(2,3) são zerados. – A(:,3) = 0 elementos da terceira coluna são zerados. – >>A(1:2,3) especifica uma submatriz 2x1 com os 2 primeiros elementos da terceira coluna de A ans = 3 6 MATLAB - INF01040 - Profa. Patrícia Jaques 29 Manipulação de vetores e matrizes • exclusão de linhas ou colunas – atribuir [ ] à linha ou coluna exclui terceira coluna da matriz exclui duas primeiras linhas da matriz • A(:,3) = [] • A(1:2,:) = [] • troca entre linhas ou colunas – B = A (:, [1 3 2]) troca ordem das colunas 2 e 3. – A = A ([3 2 1], :) inverte ordem das linhas. • concatenação – formar matriz usando outras (inteiras ou partes) como elementos • Ex.: sendo A = [1 2 3; 4 5 6; 7 8 9] uma matriz 3 x 3, – A(1,:) = 1 2 3 e A(3,:) = 7 8 9 – Então, B = [A(1,:); A(3,:)] é uma matriz 2 x 3 contendo a primeira e a terceira linhas de A. MATLAB - INF01040 - Profa. Patrícia Jaques 30 Funções de Construção de Matrizes • É 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. Concatena na próxima linha B= A 3 4 6 0 0 11 5 1 -3 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 Concatena na próxima coluna zeros(3,2) eye(2) zeros(2,3) MATLAB - INF01040 - Profa. Patrícia Jaques 31 Funções de Construção de Matrizes • eye - matriz identidade – eye(2) ans = 1 0 0 1 • zeros - matriz de zeros – zeros(2,3) ou zeros(2) ans = 0 0 0 0 MATLAB - INF01040 - Profa. Patrícia Jaques 32 Funções de Construção de Matrizes • ones - matriz de 1's – ones(2,3) ou ones (2) ans = 1 1 1 1 • rand - matriz gerada aleatoriamente – rand(5,4) ou rand(2) ans = 0.2026 0.6721 0.8381 0.0196 MATLAB - INF01040 - Profa. Patrícia Jaques 33 Funções de Construção de Matrizes • diag - matriz diagonal – Se x é um vetor, diag(x) é a matriz diagonal com x na diagonal; ans = – x=[1 2 3]; 1 0 0 – diag(x) 0 0 2 0 0 3 • 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 também: diag(diag(A)) ans = 3 1 1 MATLAB - INF01040 - Profa. Patrícia Jaques 34 • triu - parte triangular superior de uma matriz – triu(A) ans = 3 11 5 0 1 -3 0 0 1 • tril - parte triangular inferior de uma matriz – tril(A) ans = 3 0 4 1 6 2 0 0 1 MATLAB - INF01040 - Profa. Patrícia Jaques 35 Exemplo a= 1 5 1 5 2 6 2 6 3 7 3 7 4 8 4 8 » b = [a(1:2,1:1), a(1:2,3:4) ; a(4:4,1:1), a(4:4,3:4)] b= 1 5 5 3 7 7 4 8 8 MATLAB - INF01040 - Profa. Patrícia Jaques 36 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 MATLAB - INF01040 - Profa. Patrícia Jaques 37 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 cada coluna. • É possível operar sobre linha por linha transpondo-se a matriz, por exemplo: – a = rand(5) – mean(a) média de cada coluna – mean(a’) média de cada linha MATLAB - INF01040 - Profa. Patrícia Jaques 38 Funções Vetoriais • Outros exemplos de funções vetoriais são: – max(a) encontra o valor máximo – – – – – – – • [Y,I] = MAX(X) sum(a) soma os elementos median(a) mediana any(a) true se existe um elemento diferente de zero min(a) menor valor prod(a) produto dos elementos all(a) true se todos os elementos são diferentes de zero sort(a) ordena em ordem crescente • Exemplo: – max(max(a)) – max(a) MATLAB - INF01040 - Profa. Patrícia Jaques 39 Exercícios • digitar • criar matrizes – A = [1 2 3 4 5 6 7 8 9] – B = [1;2;3;4;5;6;7;8;9] – C = [1 2 3;4 5 6;7 8 9] • calcular – A` – B` – C` – – – – – – – – b B who whos clear B clc who A,C • calcular – – – – – – – MATLAB - INF01040 - Profa. Patrícia Jaques sum(A) sum(C) sum(C`) sum(C`)` diag(C) sum(diag(C)) sum(diag(fliplr(C))) 40 Exercícios • calcular • calcular – – – – – – – – C s = C(1,3) + C(2,3) + C(3,3) C(1,3) + C(2,3) + C(3,3) + C(4,3) CC = C CC(4,3) = 1 CC clear CC clc – – – – – – – – C(2,3) C(6) 1:10 c = 1:10 100:-7:50 pi c = 0:pi/4:pi c MATLAB - INF01040 - Profa. Patrícia Jaques • calcular – – – – – – – – C(1:3,3) s s = sum(C(1:3,3)) s = sum(C(:,3)) s = sum(C(:,end)) D = C(:,[1 3 2]) A+C C+2 41 Exercícios • calcular – – – – – – – – C+D C-D clear who a = [8 1 6;3 5 7; 4 9 2] b = 2 * ones(3,3) a*b a .* b MATLAB - INF01040 - Profa. Patrícia Jaques 42 Exercício • 9) Considere a seguinte matriz: • 7.5 8.0 9.0 6.7 7.7 5.4 8.0 9.2 7.4 6.6 6.6 6.6 5.0 8.0 7.0 5.2 6.1 9.5 8.3 7.2 10.0 9.0 9.0 9.0 3.5 4.5 5.5 6.7 5.0 4.6 • que corresponde a notas de provas de alunos (10 alunos). a) Calcule a nota final de cada aluno, como a média das 3 notas, sendo que a última nota tem peso 2. b) Calcule a média aritmética das notas da turma: média de cada prova e média das notas finais c) Use as funções adequadas para listar a menor nota final e a maior nota final. MATLAB - INF01040 - Profa. Patrícia Jaques 43 MATLAB - continuação Anotando comandos usados • diary nome do arquivo - cria arquivo texto no qual ficarão registrados os comandos e as variáveis subseqüentes. • diary off - fecha arquivo e salva-o como texto. • type nome do arquivo - apresenta na janela de comando todo o conteúdo do arquivo. • é possível também abri-lo em editores de texto ASCII. MATLAB - INF01040 - Profa. Patrícia Jaques 45 Paginando saída na janela de comando • more on - quando uma saída for muito extensa, mostra somente uma tela de cada vez. – Enter avança uma linha. – Barra de Espaço avança uma tela. – q pára de mostrar saída. • more off - retorna ao modo normal (padrão). MATLAB - INF01040 - Profa. Patrícia Jaques 46 Salvando o Workspace • File Save Workspace As • save nome do arquivo (salva no diretório corrente) • File Load Workspace • load nome do arquivo (busca no diretório corrente) • File Set Path permite alterar diretório corrente MATLAB - INF01040 - Profa. Patrícia Jaques 47 Controle de fluxo Laço for >> for i=1:5 x(i)=i^2; end x= 1 4 9 16 25 >> for i=1:5 for j=1:5 a(i,j)=i+j; b(i,j)=i-j; end end c=a+b; a= 2 b= 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 - Profa. 7 Patrícia 8 9 MATLAB - INF01040 Jaques 0 -1 -2 -3 -4 1 0 -1 -2 -3 2 1 0 -1 -2 3 2 1 0 -1 4 3 2 1 0 48 Controle de fluxo • Laço while • a = 1; b = 15; while a<b clc a = a+1 b = b-1 pause(1) end disp(‘fim do loop’) if for i = 1:5 for j = 1:5 if i == j A(i,j) = 2; else if abs(i-j) == 1 A(i,j) = -1; else A(i,j) = 0; end end end end MATLAB - INF01040 - Profa. Patrícia Jaques 49 Arquivos m • são arquivos que contém comandos do MATLAB – scripts • não recebem argumentos de entrada nem retornam argumentos de saída. • operam em dados do workspace. • úteis para automatizar séries de passos que precisam ser executados várias vezes. – funções • podem receber e/ou retornar argumentos. • variáveis internas são locais à função. • úteis para estender a linguagem MATLAB. MATLAB - INF01040 - Profa. Patrícia Jaques 50 Arquivos m • 2 passos: – criar arquivo .m usando um editor de texto. – chamar o arquivo m da linha de comando, ou de outro arquivo m. MATLAB - INF01040 - Profa. Patrícia Jaques 51 Arquivos m • criando um arquivo m – edit nome do arquivo ou File New M-File – digitar código do script ou da função. – File Save As - escolher diretório corrente ou que esteja presente no search path do MATLAB. • Search Path referência para o MATLAB procurar os arquivos m. – File Set Path • usando um arquivo m – nome do arquivo MATLAB - INF01040 - Profa. Patrícia Jaques 52 Arquivos m • Exemplo 1 script – criar arquivo – digitar código • • • • Exemplos: - procbasico clear clc A = [1 2 3; 4 5 6; 7 8 9] B = A’ - linhatri - circulo - malha – salvar como inicio.m – executar na janela do MatLab • >> inicio • Comentários: – % comentário de linha – texto apos o % na mesma linha não será executado MATLAB - INF01040 - Profa. Patrícia Jaques 53 Outros comandos • Entrada de dados: Receber um dado numérico do usuário – <variável> = input('<mensagem>'); – Exemplo: • n1 = input('Digite um numero: '); • Entrada de dados: Receber um dado texto do usuário – <variável> = input('<mensagem>', 's'); – Exemplo: • n1 = input('Digite seu nome: ', 's'); • Mostrar um texto ou conteúdo de uma variável: – disp('<mensagem>'); – Exemplo: • disp('Total calculado: '); • disp(soma); • Limpar a tela – Exemplo: • clc; MATLAB - INF01040 - Profa. Patrícia Jaques 54 Rotinas de Entrada/Saída • TEXTREAD » [N,F,S]=textread(’dados.txt',’%d %f %s') N= 6 5 dados.txt 6 0.5 dd1 5 0.3 dd3 3 1.334 dd5 3 F= 0.5000 0.3000 1.3340 S= ‘dd1’ ‘dd3’ ‘dd5’ Exercício • Escreva um programa (arquivo-m) para: – Ler um arquivo contendo os dados de temperaturas mínimas e máximas de 15 dias, no formato (%d %f %f) 1 15.9 31.9 – Calcular a média, menor e maior temperatura (das temperaturas mínima e máxima) – Listar os resultados MATLAB - INF01040 - Profa. Patrícia Jaques 56 Solução – exerciciotemp.m [dia,minima,maxima] = textread('dadostemp.txt','%d %f %f'); mediamin = mean(minima); mediamax = mean(maxima); minmin = min(minima); minmax = min(maxima); maxmin = max(minima); maxmax = max(maxima); disp (['Media das Minimas', mean(minima)]); disp (['Media das Maximas', mean(maxima)]); disp (['Menor Minima', min(minima)]); disp (['Menor Maxima', min(maxima)]); disp (['Maior Minima', max(minima)]); disp (['Maior Maxima', max(maxima)]); MATLAB - INF01040 - Profa. Patrícia Jaques 57 Resolvendo Equações Polinomiais • Achar raízes de um polinômio: • x4 - 12x3 + 0x2 + 25x + 116=0 >>p=[1 -12 0 25 116] r=roots (p) r= 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i • Construir polinômio a partir de suas raízes: >> pp = poly(r) pp = 1.0000 -12.0000 -0.0000 25.0000 116.0000 MATLAB - INF01040 - Profa. Patrícia Jaques 58 Atividade • Exemplo: – f(x) = 3*x^4-0.5.*x^3+x-5.2 (x assume valores escalares) • p = [3 -0.5 1 -5.2]; • f = polyval(p,x); • Digitar estes comandos e observar a saída: p=[1 4 -7 -10]; x = linspace(-1,3); v=polyval(p,x) - >gera f(x) para cada x contido no vetor x plot(x,v) title(‘Figure 19.1:x{^3} + 4x{^2} - 7x - 10´) xlabel(´x´) MATLAB - INF01040 - Profa. Patrícia Jaques 59 Expressões Simbólicas • Defina as variáveis com o comando syms syms x • Crie as expressões utilizando estas variáveis f(x) = 2x2+3x-5 x2-x+7 g(x) = f(x) + g(x) f(x) - g(x) f(x) * g(x) f(x) / g(x) >> >> >> >> >> >> >> >> >> f=2*x^2+3*x-5 g=x^2-x+7; f + g f-g -> (2*x^2+3*x-5)*(x^2-x+7) f*g expand(ans) -> 2*x^4+x^3+6*x^2+26*x-35 f / g expand(ans) pretty (ans) MATLAB - INF01040 - Profa. Patrícia Jaques 60 Expressões Simbólicas • Composição e substituição em funções: >> 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 • compose: calcula a composição das funções f(x) e g(x) em f(g(x)), • finverse: encontra a inversa funcional de uma expressão • subs: substitui uma variável por um número (ou por outra variável) em uma expressão MATLAB - INF01040 - Profa. Patrícia Jaques 61 Expressões Simbólicas • Solução de Equações ax2+bx+c = 0 >> syms a b c x % manipula como variável simbólica >> 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) %mostra formato de fração [ 2 1/2] [ -b + (b - 4 a c) ] [1/2 --------------------] [ a ] [ ] [ 2 1/2] [ -b - (b - 4 a c) ] [1/2 --------------------] [ a ] MATLAB - INF01040 - Profa. Patrícia Jaques 62 Resolvendo Sistema de Equações Lineares usando “Divisão Esquerda” • Se [A] é uma matriz quadrada (m = n): [A]{x} = {b} {x} = [A]-1{b} {x} = ? [A] = mxn {x} = nx1 {b} = mx1 » x = inv(A)*b; » x = A\b; Erro se singular Aviso se quase singular Exemplo: Resolvendo Equações • Resolver este conjunto de equações simultâneas: » A = [-1 1 2; 3 -1 1;-1 3 4]; » b = [2;6;4]; » x = inv(A)*b x = 1.0000 -1.0000 2.0000 » x = A\b x = 1.0000 -1.0000 2.0000 -x1 + x2 + 2x3 = 2 3x1 - x2 + x3 = 6 -x1 + 3x2 + 4x3 = 4 Gráficos planos 2D • 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) Peaks – conjunto de dados Para mostrar a capacidade Gráfica (plot, mesh, surf, contour3, contour, surfc, meshz) MATLAB - INF01040 - Profa. Patrícia Jaques 65 Gráficos • Comandos de plotar – Plot(x, y) – gera gráficos lineares – Semilogx(x, y) – gráfico com escala linear para y e escala logarítmica para x – semilogy(x, y) – a escala logarítmica é para y – Loglog(x, y) – escala logarítmica para ambos (x e y) – Bar(x, y) – gera um gráfico em barras com elementos do vetor y localizados no vetor x – Stairs(x, y) – gera um gráfico de degraus com elementos do vetor y – Hist(x,y) – plota histograma – Rose(x,y) – plota histograma em ângulo MATLAB - INF01040 - Profa. Patrícia Jaques 66 Gráficos planos 2D • Outro exemplo: 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) • O comando grid coloca uma grade de linhas sobre o gráfico atual. – Experimente refazer o comando anterior e depois digite grid. MATLAB - INF01040 - Profa. Patrícia Jaques 67 + gráficos • Gráficos podem ter títulos, eixos rotulados e textos. 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 (mouse ou setas) text posiciona texto na posição especificada » title 'Título' » xlabel 'x' » ylabel 'y' MATLAB - INF01040 - Profa. Patrícia Jaques 68 + gráficos Exemplo: x = 0:pi/100:2*pi; y = sin(x); plot(x,y); %o caracter \pi cria o símbolo xlabel('x = 0:2\pi'); ylabel('Seno de x'); title('Função Seno','FontSize',12); gtext ('y = sin(x)’); MATLAB - INF01040 - Profa. Patrícia Jaques 69 + gráficos • Os eixos são auto escalonados. 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. MATLAB - INF01040 - Profa. Patrícia Jaques 70 + gráficos – 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 MATLAB - INF01040 - Profa. Patrícia Jaques 71 Gráficos planos 2D múltiplos • Há duas formas de se fazer gráficos múltiplos em uma única janela. • Exemplo 1: – – – – – x=0:0.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,x,y2,x,y3) MATLAB - INF01040 - Profa. Patrícia Jaques 72 + gráficos • É possível alterar os caracteres de tipo de linha e de ponto usados como padrão. • Exemplo: – – – – – x=0:0.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); plot(x,y1,'--',x,y2,'*',x,y3,'+') MATLAB - INF01040 - Profa. Patrícia Jaques 73 + gráficos • • Tipos de linha: – – – – – – – – – – – – – sólido (-), tracejado (--), pontilhado (:), traço e ponto (-.) • • Exemplo: x1 = 0:pi/100:2*pi; x2 = 0:pi/10:2*pi; plot(x1,sin(x1),'r:',x2,sin(x2),‘c+') Tipos de Marcadores: ponto (.), sinal de adição (+), asterisco (*), círculo (o), letra x (x) Quadrado (s) Triangulo (v) Losango (d) Hexágono (h) Cores: – – – – – – – Amarelo (y) Magenta (m) Verde (g) Azul (b) Preto (k) Vermelho (r) Ciano (c) MATLAB - INF01040 - Profa. Patrícia Jaques 74 Gráficos planos 2D • 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. • Exemplo: – ... MATLAB - INF01040 - Profa. Patrícia Jaques 75 Gráficos planos 2D – – – – – – – – – – 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) • Exercício: – modifique o código ao lado para apresentar também a função y5. MATLAB - INF01040 - Profa. Patrícia Jaques 76 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. MATLAB - INF01040 - Profa. Patrícia Jaques 77 Gráficos em malhas 3D • Exemplo: – 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. MATLAB - INF01040 - Profa. Patrícia Jaques 78 Gráficos em malhas 3D • 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 o comando mesh pode ser utilizado. MATLAB - INF01040 - Profa. Patrícia Jaques 79 Gráficos em malhas 3D • Exemplo: – – – – – 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); MATLAB - INF01040 - Profa. Patrícia Jaques 80 Gráficos em malhas 3D • Exemplo: – – – – – [X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z = sin(R)./R; mesh(X,Y,Z,'EdgeColor','black') eps é o menor número em ponto flutuante do sistema. Sua funçao no exemplo é evitar divisão por zero. – surf(X,Y,Z) MATLAB - INF01040 - Profa. Patrícia Jaques 81 Gráficos em malhas 3D • Comandos para plotar gráficos tridimensionais e contornos; – – – – – – – – plot3 – plota um gráfico 3D Comet3 – plota em 3D com trajetória de cometa contour3 – plota contorno 3D clabel – plota contorno com valores mesh – plota malha 3D meshc – combina mesh e contour surf – plota superfície 3D surfc – combina surf e contour MATLAB - INF01040 - Profa. Patrícia Jaques 82 Gráficos em malhas 3D • Anotações no gráfico; – – – – – – – Title – título do gráfico Xlabel – título do eixo x Ylabel – título do eixo y Zlabel – título do eixo z Text – insere anotações no gráfico Gtext – insere anotações com o mouse Grid – linhas de grade no gráfico MATLAB - INF01040 - Profa. Patrícia Jaques 83 Exemplos de arquivos.m • matrizA.m – Gera matriz A (10x10) • cartograf.m – mapeamento de uma parte do fundo do oceano • circulo.m, exemplo-funcao.m, exfuncao.m , procbasico.m – usa comando plot, title, xlabel, ylabel…. • distacia.m – distancia em linha reta entre dois pontos num plano, usa funcao sqrt • exemploG3D.m, D3Dmesh.m, malha.m, superficies.m – comandos mesh, surf para gerar gráficos 3D • exemplopol.m – Exemplo de polinômios • G2D.m, G2Dplot.m, G2Dplotmult – Usa o comando plot, plotar com múltiplas linhas MATLAB - INF01040 - Profa. Patrícia Jaques 84 Exemplos de arquivos.m (2) • exif.m – Comando if-end • imagem.m – usa comando imagesc, matriz visualizada como imagem • linhatrid.m – Diagrama de linha tridimensional (uso do title, xlabel...) • matrizex.m – Exercício do cálculo das medias • exerciciotemp.m – Exercício das temperaturas MATLAB - INF01040 - Profa. Patrícia Jaques 85