Mdulo 7 Aula Expositiva 8 3 2 Matrizes

  • Slides: 58
Download presentation
Módulo 7 Aula Expositiva 8 3. 2 Matrizes 3. 2. 1 Atribuindo valores a

Módulo 7 Aula Expositiva 8 3. 2 Matrizes 3. 2. 1 Atribuindo valores a uma Matriz 3. 2. 2 Vetores Linha e Coluna 3. 2. 3 Referenciando Partes de uma Matriz 3. 2. 4 Aritmética Matricial 3. 2. 5 Construindo Matrizes 3. 2. 6 Matrizes e Gráficos 3. 2. 7 Matrizes de Strings e Arquivos 3. 2. 8 Matrizes Numéricas e Arquivos 3. 2. 9 Matrizes e Expressões Lógicas DCC 001 Programação de Computadores 2° Semestre de 2011 Prof. Osvaldo Carvalho

Matrizes no Scilab n Matrizes são valores compostos por outros valores (todos de um

Matrizes no Scilab n Matrizes são valores compostos por outros valores (todos de um mesmo tipo) n Manipulação de matrizes em Scilab (Mat. Lab) mais flexível que em linguagens como C, Fortran, Java DCC 001 2011 -2 2

Criando uma Matriz n Exemplo de valor de matriz 2 x 3, com linhas

Criando uma Matriz n Exemplo de valor de matriz 2 x 3, com linhas separadas por “; ” -->A = [1 2 3; 4 5 6] A = 1. 4. DCC 001 2011 -2 2. 5. 3. 6. 3

Variável em Scilab é Matriz n Toda variável em Scilab é uma matriz -->x

Variável em Scilab é Matriz n Toda variável em Scilab é uma matriz -->x = 7. -->size(x) ans = 1. 1. --> DCC 001 2011 -2 Função size retorna número de linhas e de colunas do argumento x é uma matriz de uma linha e uma coluna! 4

Indexação -->A = [1 2 3; 4 5 6] A = 1. 4. DCC

Indexação -->A = [1 2 3; 4 5 6] A = 1. 4. DCC 001 2011 -2 2. 5. -->e = A(2, 3) e = 6. 3. 6. 5

Modificação de elemento -->A(1, 2) = 33 A DCC 001 2011 -2 = 1.

Modificação de elemento -->A(1, 2) = 33 A DCC 001 2011 -2 = 1. 4. 33. 5. 3. 6. 6

Vetores n Vetores: matrizes de uma única linha (ou coluna) -->v = [10 20

Vetores n Vetores: matrizes de uma única linha (ou coluna) -->v = [10 20 30] v = 10. 20. 30. -->u = [10; 20; 30] u = 10. Lembrando que o 20. “; ” separa linhas 30. DCC 001 2011 -2 7

Atribuindo único valor a parte de matriz x = 23. 30. 29. 23. 93.

Atribuindo único valor a parte de matriz x = 23. 30. 29. 23. 93. 56. 21. 48. 88. 31. 33. 65. 36. 59. -->x(2: 4, 3: 5) = -1 x = 23. 21. 88. 65. DCC 001 2011 -2 30. 93. 21. 36. 29. - 1. 59. 50. 43. 26. 63. 40. 91. 4. 48. 26. 41. 28. 12. 77. 21. 11. 68. 15. 69. 84. 40. 50. - 1. 40. 91. - 1. 41. 28. 12. 77. 21. 11. 68. 15. 69. 84. 40. 8

Atribuindo matriz a parte de matriz x = 40. 58. 38. 73. 53. 87.

Atribuindo matriz a parte de matriz x = 40. 58. 38. 73. 53. 87. 68. 92. 26. 11. 89. 94. 49. 22. 19. 50. 34. 26. 62. 56. 34. 37. 52. 76. -->x(3: 4, 4: 5) = [-1 -2; -3 -4] x = 40. 58. 38. 73. 53. 87. 68. 92. 26. 11. 89. 94. - 1. - 2. 19. 50. 34. - 3. - 4. 56. 34. 37. 52. 76. DCC 001 2011 -2 4. 67. 20. 39. 83. 58. 48. 22. 84. 12. 9

Acesso a linha de matriz x = 21. 75. 0. 33. 66. -->a =

Acesso a linha de matriz x = 21. 75. 0. 33. 66. -->a = 75. DCC 001 2011 -2 62. 84. 68. 87. 6. x(2, : ) 84. 56. 66. 72. 19. 54. 23. 21. 88. 65. 30. 93. 21. 36. 29. 56. 48. 33. 59. 50. 43. 26. 63. 40. “: ” designa todos os elementos de uma dimensão 66. 23. 93. 56. 43. 10

Acesso a linhas de parte de matriz x = 91. 4. 48. 26. 41.

Acesso a linhas de parte de matriz x = 91. 4. 48. 26. 41. -->b = 68. 15. 69. 84. 40. DCC 001 2011 -2 28. 12. 77. 21. 11. 68. 15. 69. 84. 40. 87. 11. 19. 56. 58. 68. 89. 50. 34. 38. 92. 94. 37. 73. 26. 49. 26. 52. x(: , 3: 5) 40. 87. 11. 19. 56. 58. 68. 89. 50. 34. 11

Aritmética Matricial n Como todas as variáveis Scilab são matrizes, operações aritméticas usuais (+,

Aritmética Matricial n Como todas as variáveis Scilab são matrizes, operações aritméticas usuais (+, -, *, /, ^) são entendidas como operações matriciais n Ou seja: a*b representa o produto matricial da matriz a pela matriz b n Operações escalares usam os mesmos símbolos, precedidos por “. ”. Exemplos: . *, . ^ etc. DCC 001 2011 -2 12

Adição e Subtração n Requerem matrizes de mesmas dimensões -->x = [1 2 3;

Adição e Subtração n Requerem matrizes de mesmas dimensões -->x = [1 2 3; 4 5 6]; -->y = [10 20 30; 40 50 60]; -->x + y ans = 11. 22. 33. 44. 55. 66. -->x - y ans = - 9. - 18. - 27. - 36. - 45. - 54. DCC 001 2011 -2 13

Produto Matricial -->x = [1 2 3; 4 5 6] x = 1. 2.

Produto Matricial -->x = [1 2 3; 4 5 6] x = 1. 2. 3. 4. 5. 6. -->y = [10 20; 30 40; 50 60] y = 10. 20. 30. 40. 220 = 1 x 10 50. 60. -->x * y ans = 220. 280. 490. 640. DCC 001 2011 -2 + 2 x 30 + 3 x 50 14

Produto Elemento a Elemento -->x = [1 2; 3 4]; -->y = [10 20;

Produto Elemento a Elemento -->x = [1 2; 3 4]; -->y = [10 20; 30 40]; -->x * y Produto ans = Matricial 70. 100. 150. 220. -->x. * y ans = Produto Elemento a 10. 40. Elemento 90. 160. DCC 001 2011 -2 15

Multiplicação de Matriz por Escalar -->x = [1 2 3; 4 5 6]; -->y

Multiplicação de Matriz por Escalar -->x = [1 2 3; 4 5 6]; -->y = 2*x y = 2. 8. DCC 001 2011 -2 4. 10. 6. 12. 16

Exponenciação -->x = [1 2; 3 4]; -->x^2 Produto ans = Matricial x *

Exponenciação -->x = [1 2; 3 4]; -->x^2 Produto ans = Matricial x * x 7. 10. 15. 22. -->x. ^ 2 ans = Exponenciação 1. 4. Elemento a Elemento 9. 16. DCC 001 2011 -2 17

Matriz Transposta A = 1. 2. 4. 5. 7. 33. -->B = A' B

Matriz Transposta A = 1. 2. 4. 5. 7. 33. -->B = A' B = 1. 4. 2. 5. 3. 6. DCC 001 2011 -2 3. 6. 9. A' é a transposta da matriz A 7. 33. 9. 18

Matriz Inversa – 1 A = 4. 7. 6. 2. 2. 1. 1. 1.

Matriz Inversa – 1 A = 4. 7. 6. 2. 2. 1. 1. 1. 6. -->IA = inv(A) IA = - 0. 3333333 1. 0909091 0. 3333333 - 0. 5454545 0. - 0. 0909091 DCC 001 2011 -2 0. 1515152 - 0. 2424242 0. 1818182 19

Matriz Inversa – 2 -->A * IA ans = 1. 0. 1. 110 D-16

Matriz Inversa – 2 -->A * IA ans = 1. 0. 1. 110 D-16 1. 5. 551 D-17 0. -->IA * A ans = 1. 8. 327 D-17 0. 1. 0. 0. DCC 001 2011 -2 Erro de Aproximação - 4. 441 D-16 - 1. 110 D-16 1. 0. 0. 1. 20

Sistemas de Equações Lineares n Vamos resolver n Onde, por exemplo, n Usando DCC

Sistemas de Equações Lineares n Vamos resolver n Onde, por exemplo, n Usando DCC 001 2011 -2 21

Solução com Scilab -->a = [-2 -2 3; 2 1 1; -4 1 3];

Solução com Scilab -->a = [-2 -2 3; 2 1 1; -4 1 3]; -->b = [-4 0 1]'; -->x = inv(a)*b x = - 0. 5 2. - 1. DCC 001 2011 -2 22

Verificando a Solução -->residuo = a*x - b residuo = 0. - 2. 220

Verificando a Solução -->residuo = a*x - b residuo = 0. - 2. 220 D-16 0. DCC 001 2011 -2 23

Construção de Vetores “Regulares” n Vetores com valores regularmente espaçados podem ser construídos de

Construção de Vetores “Regulares” n Vetores com valores regularmente espaçados podem ser construídos de forma similar à utilizada no comando for -->x = 10: 13 x = 10. 11. 12. 13. -->x = 12: -0. 5: 10 x = 12. 11. 5 DCC 001 2011 -2 11. 10. 5 10. 24

Revisitando o comando for n O comando for i = [9 3 14] printf("%d,

Revisitando o comando for n O comando for i = [9 3 14] printf("%d, ", i) end Vetor com valores atribuídos n imprime um a um à variável de controle 9, 3, 14, DCC 001 2011 -2 25

A Função linspace n Pode ser conveniente gerar um vetor regular especificando seus limites

A Função linspace n Pode ser conveniente gerar um vetor regular especificando seus limites e o número de pontos desejados Nro. de Pontos -->x = linspace(0, 10, 3) x = 0. 5. 10. Limites -->x = linspace(0, 10, 6) x = 0. 2. 4. 6. DCC 001 2011 -2 8. 10. 26

Zeros e Uns -->x = zeros(2, 3) x = 0. 0. 0. -->y =

Zeros e Uns -->x = zeros(2, 3) x = 0. 0. 0. -->y = ones(2, 3) y = 1. 1. 1. DCC 001 2011 -2 27

Matriz Identidade -->I = eye(4, 4) I = 1. 0. 0. 0. DCC 001

Matriz Identidade -->I = eye(4, 4) I = 1. 0. 0. 0. DCC 001 2011 -2 0. 1. 0. 0. 0. 1. 28

Matrizes Randômicas Gera números aleatórios entre 0 e 1 -->m = rand(2, 3) m

Matrizes Randômicas Gera números aleatórios entre 0 e 1 -->m = rand(2, 3) m = 0. 2113249 0. 7560439 -->n = rand(2, 3) n = 0. 8497452 0. 6857310 DCC 001 2011 -2 Novos números a cada chamada 0. 0002211 0. 3303271 0. 6653811 0. 6283918 0. 8782165 0. 0683740 0. 5608486 0. 6623569 29

Gerando Matrizes “Bonitinhas” Arredonda para o inteiro mais próximo Fator de Escala -->m =

Gerando Matrizes “Bonitinhas” Arredonda para o inteiro mais próximo Fator de Escala -->m = round(rand(2, 3)*100) m = 21. 75. DCC 001 2011 -2 0. 33. 66. 62. 30

Construindo Matrizes a partir de Matrizes -->x = [1 2; 3 4]; -->y =

Construindo Matrizes a partir de Matrizes -->x = [1 2; 3 4]; -->y = [10 20; 30 40]; -->z = [x y] z = 1. 2. 10. 20. 3. 4. 30. 40. -->z = [x ; y] z = 1. 2. 3. 4. 10. 20. 30. 40. DCC 001 2011 -2 31

Funções Scilab são Matriciais! n Se a função sqrt, por exemplo, for chamada com

Funções Scilab são Matriciais! n Se a função sqrt, por exemplo, for chamada com um argumento matricial, seu resultado também é uma matriz -->sqrt([4 9 16 25]) ans = 2. DCC 001 2011 -2 3. 4. 5. 32

Vetores e Gráficos n Vetores são utilíssimos para a construção de n n DCC

Vetores e Gráficos n Vetores são utilíssimos para a construção de n n DCC 001 2011 -2 gráficos O comando mais simples é plot 2 d(x, y), onde x e y são vetores com as mesmas dimensões O Scilab constrói um gráfico unindo por retas os pontos com coordenadas (x(1), y(1)), (x(2), y(2)), . . . 33

Exemplo de gráfico -->x = [1 4 7 11]; y = [12 6 15

Exemplo de gráfico -->x = [1 4 7 11]; y = [12 6 15 7]; -->plot 2 d(x, y) 7, 15 1, 12 DCC 001 2011 -2 4, 6 11, 7 34

Outro exemplo de gráfico -->x = [2 5 3 4]; y = [ 3

Outro exemplo de gráfico -->x = [2 5 3 4]; y = [ 3 1 4 7]; -->plot 2 d(x, y) 4, 7 3, 4 2, 3 DCC 001 2011 -2 5, 1 35

Gráfico Seno(x) – Versão 1 -->x = 0: 0. 8: 3*%pi; -->y = sin(x);

Gráfico Seno(x) – Versão 1 -->x = 0: 0. 8: 3*%pi; -->y = sin(x); -->plot 2 d(x, y) O espaçamento de 0. 8 está grande! DCC 001 2011 -2 36

Gráfico Seno(x) – Versão 2 -->x = 0: 0. 1: 3*%pi; -->y = sin(x);

Gráfico Seno(x) – Versão 2 -->x = 0: 0. 1: 3*%pi; -->y = sin(x); -->plot 2 d(x, y O espaçamento de 0. 1 está bem melhor! DCC 001 2011 -2 37

Várias curvas em um gráfico n A função plot 2 d pode ser usada

Várias curvas em um gráfico n A função plot 2 d pode ser usada para traçar várias curvas em um único gráfico n plot 2 d(x, M), onde n n x é um vetor coluna M é uma matriz com o mesmo número de linhas de x faz um gráfico de x versus cada coluna de M DCC 001 2011 -2 38

Gráfico com várias curvas -->x = linspace(0, 3*%pi, 101)'; -->plot 2 d(x, [sin(x) sin(2*x)

Gráfico com várias curvas -->x = linspace(0, 3*%pi, 101)'; -->plot 2 d(x, [sin(x) sin(2*x) sin(3*x)]) x é um vetor coluna (e sin(x), sin(2*x) e sin(3*x) também são) DCC 001 2011 -2 39

Matrizes de Strings -->a = ["s 1" "s 2"] a = !s 1 s

Matrizes de Strings -->a = ["s 1" "s 2"] a = !s 1 s 2 ! -->b = ["s 1" ; "s 2"] b = !s 1 ! !s 2 ! DCC 001 2011 -2 40

Leitura de Arquivos como Matrizes de Strings - 1 n O comando s =

Leitura de Arquivos como Matrizes de Strings - 1 n O comando s = mgetl(da) , onde da é o descritor de um arquivo já aberto, lê todas as linhas do arquivo da e coloca cada uma delas como um elemento do vetor coluna de strings s n Uso típico: fpath = uigetfile() da = mopen(fpath, 'r') linhas = mgetl(da); mclose(da); DCC 001 2011 -2 41

Leitura de Arquivos como Matrizes de Strings – 2 n Este programa usado com

Leitura de Arquivos como Matrizes de Strings – 2 n Este programa usado com o arquivo José produz: -->linhas = !E agora, José? !A festa acabou, !a luz apagou, !o povo sumiu, !a noite esfriou, !e agora, José? !e agora, você? !você que é sem nome, !que zomba dos outros, !você que faz versos, !que ama, protesta? !e agora, José? DCC 001 2011 -2 ! ! ! 42

Matrizes Numéricas e Arquivos no Scilab n Os comandos já vistos de leitura e

Matrizes Numéricas e Arquivos no Scilab n Os comandos já vistos de leitura e gravação de arquivos podem ser usados para a leitura de matrizes, mas o Scilab oferece mecanismos mais simples através dos comandos fscanf. Mat e fprintf. Mat arquivos que contêm somente números em formato tabular, à exceção das n Estes comandos lêm ou gravam primeiras linhas que podem conter textos. n A abertura e o fechamento dos arquivos são feitas internamente pelas funções fscanf. Mat e fprintf. Mat DCC 001 2011 -2 43

O Comando fprintf. Mat - 1 n fprintf. Mat(arq, r, '%5. 2 f', Cabecalho)

O Comando fprintf. Mat - 1 n fprintf. Mat(arq, r, '%5. 2 f', Cabecalho) n Grava a matriz r no arquivo arq n Cabecalho é um vetor de strings que são gravados nas primeiras linhas, e normalmente contém uma explicação sobre os campos presentes no arquivo. DCC 001 2011 -2 44

O Comando fprintf. Mat – 2 n O programa a = [1 2 3;

O Comando fprintf. Mat – 2 n O programa a = [1 2 3; 4 5 6; 7 8 9]; arq = uigetfile(); Cabecalho = [" Meus Dados "; "Col 1 Col 2 Col 3"] fprintf. Mat(arq, a, "%5. 2 f", Cabecalho); n produz o arquivo DCC 001 2011 -2 45

O Comando fscanf. Mat n r = fscanf. Mat(arq); n Lê uma matriz do

O Comando fscanf. Mat n r = fscanf. Mat(arq); n Lê uma matriz do arquivo cujo nome completo é um string armazenado em arq n Linhas com texto no início do arquivo são ignoradas DCC 001 2011 -2 46

O Comando fscanf. Mat n O programa arquivo = uigetfile(); m = fscanf. Mat(arquivo)

O Comando fscanf. Mat n O programa arquivo = uigetfile(); m = fscanf. Mat(arquivo) n Escolhendo o arquivo anterior, produz a matriz m DCC 001 2011 -2 = 1. 4. 7. 2. 5. 8. 3. 6. 9. 47

Clima em Belo Horizonte: O Arquivo Tempo. BHZ. txt n Aberto com o “Bloco

Clima em Belo Horizonte: O Arquivo Tempo. BHZ. txt n Aberto com o “Bloco de Notas” DCC 001 2011 -2 48

Clima em Belo Horizonte n Faça um programa que: n Leia este arquivo para

Clima em Belo Horizonte n Faça um programa que: n Leia este arquivo para uma matriz Clima. BH, usando a função fscanf. Mat, que ignora linhas de cabeçalho em um arquivo. n Da matriz Clima. BH, extraia os vetores Max. Med, Min. Med, Max. Rec, Min. Rec e Precip, com significados óbvios. n Gere um gráfico que tenha simultaneamente os valores de Max. Med, Min. Med, Max. Rec e Min. Rec. DCC 001 2011 -2 49

Clima em Belo Horizonte arq. Clima = uigetfile(title="Arquivo com dados do clima em BH:

Clima em Belo Horizonte arq. Clima = uigetfile(title="Arquivo com dados do clima em BH: "); Clima. BH = fscanf. Mat(arq. Clima); Max. Med Min. Med Max. Rec Min. Rec Precip = = = Clima. BH(: , 2); Clima. BH(: , 3); Clima. BH(: , 4); Clima. BH(: , 5); Clima. BH(: , 6); // // // Max. Med Min. Med Max. Rec Min. Rec Precip = = = 2 a 3 a 4 a 5 a 6 a coluna coluna plot 2 d([1: 12], [Max. Med Min. Med Max. Rec Min. Rec], . . . leg="Max. Med@Min. Med@Max. Rec@Min. Rec") xtitle("Temperaturas Mensais em BH", "Mês", "Graus C"); DCC 001 2011 -2 50

Clima em Belo Horizonte Gráfico DCC 001 2011 -2 51

Clima em Belo Horizonte Gráfico DCC 001 2011 -2 51

Gráficos de Dados Experimentais n O arquivo Acessos. Notas. txt tem este formato n

Gráficos de Dados Experimentais n O arquivo Acessos. Notas. txt tem este formato n Construir um gráfico que mostre estes dados DCC 001 2011 -2 52

Programa Acessos. Notas. sce // Este programa lê o arquivo Acessos. Notas. txt, //

Programa Acessos. Notas. sce // Este programa lê o arquivo Acessos. Notas. txt, // e produz um gráfico de dispersão dos dados arq = uigetfile("*. txt", pwd(), . . . "Arquivo com Acessos e Notas"); Acessos. Notas = fscanf. Mat(arq); Acessos = Acessos. Notas(: , 1); Notas = Acessos. Notas(: , 2); plot 2 d(Acessos, Notas, style=-1) xgrid() xtitle("Acessos versus Notas", . . . "Número de Acessos", "Aproveitamento") DCC 001 2011 -2 53

Resultado do programa Acessos. Notas. sce DCC 001 2011 -2 54

Resultado do programa Acessos. Notas. sce DCC 001 2011 -2 54

Matrizes e Expressões Lógicas n O resultado de uma expressão relacional envolvendo matrizes é

Matrizes e Expressões Lógicas n O resultado de uma expressão relacional envolvendo matrizes é uma matriz de booleanos -->a = [3 7; 8 2] a = 3. 7. 8. 2. -->a = [3 7; 8 2]; -->a > 5 ans = F T T F -->a > b ans = F T T F DCC 001 2011 -2 -->b = [5 6; 7 8]; 55

Matrizes, Expressões Lógicas e o Comando if -->a = [3 -->x = 0; -->if

Matrizes, Expressões Lógicas e o Comando if -->a = [3 -->x = 0; -->if a > -->[x y] ans = 0. DCC 001 2011 -2 9; 12 1] y = 0; 5 then; x = 10000; end; 0 then; y = 10000; end; 10000. 56

Usando Matrizes Booleanas para designar elementos de uma Matriz n Sejam X uma matriz

Usando Matrizes Booleanas para designar elementos de uma Matriz n Sejam X uma matriz de números reais, e mb uma matriz de booleanos com as mesmas dimensões de X n X(mb) designa os elementos de X com correspondentes em mb iguais a %T -->a = [3 -->a(a>5) a = 3. - 1. DCC 001 2011 -2 9; 12 1]; = -1 1. 1. 57

Notas n Matrizes são absolutamente essenciais para programas que tratam com problemas algébricos ou

Notas n Matrizes são absolutamente essenciais para programas que tratam com problemas algébricos ou com tabelas n A manipulação de matrizes é muito flexível no Scilab n Matrizes são também essenciais para o desenho de gráficos no Scilab DCC 001 2011 -2 58