MATLAB - Matrix Laboratory Adaptado de Profa. Carla Salso Freitas e profa. Luciana Nedel Por Profa. Patrícia Jaques MATLAB • Software para análise numérica • 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) • Elemento básico de informação: MATRIZ • Ótima performance • Alto nível 2 Pacotes científicos • MATLAB (www.mathworks.com) – – – – linguagem de programação ambiente para desenvolvimento sistema gráfico funções matemáticas 3 Introdução • Trabalha apenas com um tipo de objeto: Matrizes • ex: a= 6 • Vetores são matrizes 1xN ou Nx1 ex: A=[1,2,3] • 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 4 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! 5 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(1) = 5 resulta em: x = 5 1.4142 23.0400 Índices começam em 1 6 Acessando um elemento da Matriz • A = [1 2 3; 4 5 6;7 8 9] 1 1 2 3 2 linha 3 1 1 2 4 3 7 4 10 7 2 5 5 6 8 3 8 6 9 9 colun a A(2,1)=10 A(2)=10 7 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 = [1 2 3;4 5 6;7 8 9] >>Y=[A;r] Y= 1 4 7 10 A 2 5 8 11 3 6 9 12 r 8 Introdução • Pequenas matrizes podem ser extraídas de grandes matrizes usando “:” (deLinha:ateLinha,deColuna:ateColuna) >>J=Y(1:3,:) a partir da linha 1, seleciona 3 linhas e todas as colunas A= 1 4 7 10 2 5 8 11 3 6 9 12 k=Y(1:2,3:3) SELECIONA AS LINHAS DE 1 A 2 E A COLUNA 3 9 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. 10 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 11 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 12 Formatos de saída • O comando format modifica o modo como os valores são mostrados • 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 13 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 • Look for parteDoComando (usado qdo nao se sabe o nome exato do comando) 14 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 • http://pt.wikipedia.org/wiki/Determinante • det(A) – Determinante da matriz A. • inv(A) – Inversa da matriz A 15 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 = 2 6 10 6 10 14 10 14 18 16 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 17 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 18 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 (multiplica as matrizes) >>a.*b (multiplica os elementos da mesma posicao) 19 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) 20 Manipulação de vetores e matrizes • Elementos das matrizes: utiliza-se índices entre parênteses. – >> – >>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 resposta (MATRIZ ORIGINAL): 3 6 21 Funções Escalares • As funções escalares mais comuns são: – – – – – – – sin - seno asin - arcoseno 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 ex: rem(10,3) – sign - função sinal – ceil - arredonda na direção de mais infinito 22 Funções Vetoriais • Outros exemplos de funções vetoriais são: – – – – – – – – max(a) encontra o valor máximo 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(a) 23 Arquivos m • são arquivos que contém comandos do MATLAB • 2 passos: – criar arquivo .m usando um editor de texto ou: • edit nome do arquivo ou File New M-File • digitar código do script. • File Save As - escolher diretório corrente ou que esteja presente no search path do MATLAB. – chamar o arquivo m da linha de comando, ou de outro arquivo m. • nome do arquivo 24 Controle de fluxo >> for i=1:5 for j=1:5 a(i,j)=i+j; b(i,j)=i-j; end end c=a+b; Laço for >> for i=1:5 x(i)=i^2; end x= 1 4 9 16 25 b= a= 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 6 7 7 8 8 9 9 10 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 25 Controle de fluxo • Laço while a = 1; b = 15; while a<b clc ; a = a+1; b = b-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 26 Arquivos m • Exemplo 1 script – criar arquivo – digitar código • • • • clear clc A = [1 2 3; 4 5 6; 7 8 9] B = A’ – 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 27 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: » n1=input ('digite seu nome ', 's'); Vania » fprintf (1, 'Oi %s', n1) Oi Vania» • clc; 28 Exercicios Parte II Resolvendo Equações Polinomiais • • Achar raízes de um polinômio: 4x²=0 tem duas raízes nulas. – >>p=[4 0 0] – >>r=roots(p) • 4x²+5=0 não tem raízes reais. – >>p=[4 0 5] – >>r=roots(p) • r= 0 0 r = 0 + 1.1180i 0 - 1.1180i 4x²-12x=0 tem duas raízes reais: x'=3, x"=0 – >>p=[4 -12 0] – >>r=roots(p) r= 0 3 30 Resolvendo Equações Polinomiais • 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 31 Atividade • Exemplo: – f(x) = 3*x^4-0.5.*x^3+x-5.2 (x assume valores escalares) • p = [3 -0.5 0 1 -5.2]; • f = polyval(p,x); • Digitar estes comandos e observar a saída: – – – – p=[1 4 -7 -10]; x = linspace(-1,3); % gera 100 ptos entre -1 e 3 v=polyval(p,x) % gera f(x) para cada x contido no vetor x plot(x,v); title('Figure 19: x{^3} + 4x{^2} - 7x - 10');xlabel('x') 32