módulo 7 aula expositiva 8 3.2 matrizes 3.2.1 atribuindo valores a uma matriz 3.2.2 vetores linha e...

58
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

Upload: internet

Post on 22-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

Módulo 7Aula Expositiva 8

3.2 Matrizes3.2.1 Atribuindo valores a uma Matriz3.2.2 Vetores Linha e Coluna3.2.3 Referenciando Partes de uma Matriz3.2.4 Aritmética Matricial3.2.5 Construindo Matrizes3.2.6 Matrizes e Gráficos3.2.7 Matrizes de Strings e Arquivos3.2.8 Matrizes Numéricas e Arquivos3.2.9 Matrizes e Expressões Lógicas

DCC 001Programação de Computadores

2° Semestre de 2011Prof. Osvaldo Carvalho

Page 2: 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

Matrizes no Scilab

Matrizes são valores compostos por outros valores (todos de um mesmo tipo)

Manipulação de matrizes em Scilab (MatLab) mais flexível que em linguagens como C, Fortran, Java

DCC001 2011-2 2

Page 3: 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

Criando uma Matriz

Exemplo de valor de matriz 2 x 3, com linhas separadas por “;”

-->A = [1 2 3; 4 5 6] A = 1. 2. 3. 4. 5. 6.

DCC001 2011-2 3

Page 4: 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

Variável em Scilab é Matriz

DCC001 2011-2 4

-->x = 7 x = 7.-->size(x) ans = 1. 1.-->

x é uma matriz de uma linha e uma

coluna!

Toda variável em Scilab é uma matriz

Função size retorna número de linhas e de colunas do argumento

Page 5: 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

Indexação

-->e = A(2,3) e = 6.

DCC001 2011-2 5

-->A = [1 2 3; 4 5 6] A = 1. 2. 3. 4. 5. 6.

Page 6: 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

Modificação de elemento

DCC001 2011-2 6

-->A(1,2) = 33

A = 1. 33. 3. 4. 5. 6.

Page 7: 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

Vetores Vetores: matrizes de uma única linha

(ou coluna)-->v = [10 20 30] v = 10. 20. 30.-->u = [10; 20; 30] u = 10. 20. 30.

Lembrando que o “;” separa linhas

DCC001 2011-2 7

Page 8: 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

Atribuindo único valor a parte de matriz

x = 23. 30. 29. 50. 91. 28. 68. 23. 93. 56. 43. 4. 12. 15. 21. 21. 48. 26. 48. 77. 69. 88. 31. 33. 63. 26. 21. 84. 65. 36. 59. 40. 41. 11. 40.-->x(2:4,3:5) = -1 x =

23. 30. 29. 50. 91. 28. 68. 23. 93. - 1. - 1. - 1. 12. 15. 21. 21. - 1. - 1. - 1. 77. 69. 88. 31. - 1. - 1. - 1. 21. 84. 65. 36. 59. 40. 41. 11. 40.

DCC001 2011-2 8

Page 9: 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

Atribuindo matriz a parte de matriz

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

DCC001 2011-2 9

Page 10: 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

x =

21. 62. 56. 23. 30. 29. 50. 75. 84. 66. 23. 93. 56. 43. 0. 68. 72. 21. 21. 48. 26. 33. 87. 19. 88. 31. 33. 63. 66. 6. 54. 65. 36. 59. 40.

-->a = x(2,:) a =

75. 84. 66. 23. 93. 56. 43.

Acesso a linha de matriz

x =

21. 62. 56. 23. 30. 29. 50. 75. 84. 66. 23. 93. 56. 43. 0. 68. 72. 21. 21. 48. 26. 33. 87. 19. 88. 31. 33. 63. 66. 6. 54. 65. 36. 59. 40.

-->a = x(2,:) a =

75. 84. 66. 23. 93. 56. 43.

DCC001 2011-2 10

“:” designa todos os elementos de uma dimensão

Page 11: 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

Acesso a linhas de parte de matriz

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

DCC001 2011-2 11

Page 12: 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

Como todas as variáveis Scilab são matrizes, operações aritméticas usuais (+,-,*,/,^) são entendidas como operações matriciais

Ou seja: a*b representa o produto matricial da matriz a pela matriz b

Operações escalares usam os mesmos símbolos, precedidos por “.”. Exemplos: .*, .^ etc.

DCC001 2011-2 12

Page 13: 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

Adição e Subtração 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.

DCC001 2011-2 13

Page 14: 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

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. 50. 60.-->x * y ans = 220. 280. 490. 640.

220 = 1x10 + 2x30 + 3x50

DCC001 2011-2 14

Page 15: 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

-->x = [1 2; 3 4];-->y = [10 20; 30 40];-->x * y ans = 70. 100. 150. 220.-->x .* y ans = 10. 40. 90. 160.

Produto Elemento a Elemento

Produto Matricial

Produto Elemento a Elemento

DCC001 2011-2 15

Page 16: 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

Multiplicação de Matriz por Escalar

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

-->y = 2*x y =

2. 4. 6. 8. 10. 12.

DCC001 2011-2 16

Page 17: 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

Exponenciação

-->x = [1 2; 3 4];-->x^2 ans = 7. 10. 15. 22.-->x .^ 2 ans = 1. 4. 9. 16.

Produto Matricial x * x

Exponenciação Elemento a Elemento

DCC001 2011-2 17

Page 18: 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

Matriz Transposta

A = 1. 2. 3. 4. 5. 6. 7. 33. 9.-->B = A' B = 1. 4. 7. 2. 5. 33. 3. 6. 9.

A' é a transposta da matriz A

DCC001 2011-2 18

Page 19: 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

Matriz Inversa – 1

A = 4. 7. 6. 2. 2. 1. 1. 1. 6.-->IA = inv(A) IA = - 0.3333333 1.0909091 0.1515152 0.3333333 - 0.5454545 - 0.2424242 0. - 0.0909091 0.1818182

DCC001 2011-2 19

Page 20: 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

Matriz Inversa – 2

-->A * IA ans = 1. 0. - 4.441D-16 1.110D-16 1. - 1.110D-16 5.551D-17 0. 1.-->IA * A ans = 1. 8.327D-17 0. 0. 1. 0. 0. 0. 1.

Erro de Aproximação

DCC001 2011-2 20

Page 21: 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

Vamos resolver Onde, por exemplo,

Usando

Sistemas de Equações Lineares

DCC001 2011-2 21

𝑎 = −2 −1 32 1 1−4 1 3൩ 𝑏= 401൩ 𝑎−1𝑎𝑥= 𝑥= 𝑎−1𝑏

Page 22: 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

Solução com Scilab

DCC001 2011-2 22

-->a = [-2 -2 3; 2 1 1;-4 1 3];-->b = [-4 0 1]';

-->x = inv(a)*b x = - 0.5 2. - 1.

Page 23: 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

Verificando a Solução

DCC001 2011-2 23

-->residuo = a*x - b residuo = 0. - 2.220D-16 0.

Page 24: 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

Construção de Vetores “Regulares”

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 11. 10.5 10.

DCC001 2011-2 24

Page 25: 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

Revisitando o comando for

DCC001 2011-2 25

for i = [9 3 14] printf("%d, ",i)end

O comando

imprime

9, 3, 14,

Vetor com valores atribuídos um a um à variável de controle

Page 26: 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

A Função linspace

-->x = linspace(0,10,3) x = 0. 5. 10. -->x = linspace(0,10,6) x = 0. 2. 4. 6. 8. 10.

Limites

Nro. de Pontos

Pode ser conveniente gerar um vetor regular especificando seus limites e o número de pontos desejados

DCC001 2011-2 26

Page 27: 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

Zeros e Uns

-->x = zeros(2,3) x = 0. 0. 0. 0. 0. 0.-->y = ones(2,3) y = 1. 1. 1. 1. 1. 1.

DCC001 2011-2 27

Page 28: 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

Matriz Identidade

-->I = eye(4,4) I =

1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1.

DCC001 2011-2 28

Page 29: 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

Matrizes Randômicas

-->m = rand(2,3) m = 0.2113249 0.0002211 0.6653811 0.7560439 0.3303271 0.6283918-->n = rand(2,3) n = 0.8497452 0.8782165 0.5608486 0.6857310 0.0683740 0.6623569

Gera números aleatórios entre

0 e 1Novos números

a cada chamada

DCC001 2011-2 29

Page 30: 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

Gerando Matrizes “Bonitinhas”

DCC001 2011-2 30

-->m = round(rand(2,3)*100) m = 21. 0. 66. 75. 33. 62.

Arredonda para o inteiro mais próximo

Fator de Escala

Page 31: 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

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.

DCC001 2011-2 31

Page 32: 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

Funções Scilab são Matriciais!

-->sqrt([4 9 16 25]) ans = 2. 3. 4. 5.

Se a função sqrt, por exemplo, for chamada com um argumento matricial, seu resultado também é uma matriz

DCC001 2011-2 32

Page 33: 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

Vetores e Gráficos Vetores são utilíssimos para a

construção de gráficos O comando mais simples é plot2d(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)), ...

DCC001 2011-2 33

Page 34: 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

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

-->plot2d(x,y)

1 2 3 4 5 6 7 8 9 10 116

7

8

9

10

11

12

13

14

15

1,12

4,6

7,15

11,7

DCC001 2011-2 34

Page 35: 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

Outro exemplo de gráfico

DCC001 2011-2

2,3

-->x = [2 5 3 4]; y = [ 3 1 4 7];

-->plot2d(x,y)

5,1

3,4

4,7

35

Page 36: 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

Gráfico Seno(x) – Versão 1

-->x = 0:0.8:3*%pi;-->y = sin(x);-->plot2d(x,y)

0 1 2 3 4 5 6 7 8 9-1.0

-0.8

-0.6

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

1.0

O espaçamento de 0.8 está

grande!

DCC001 2011-2 36

Page 37: 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

Gráfico Seno(x) – Versão 2

-->x = 0:0.1:3*%pi;-->y = sin(x);-->plot2d(x,y

0 1 2 3 4 5 6 7 8 9 10-1.0

-0.8

-0.6

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

1.0

DCC001 2011-2 37

O espaçamento de 0.1 está bem

melhor!

Page 38: 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

Várias curvas em um gráfico

A função plot2d pode ser usada para traçar várias curvas em um único gráfico

plot2d(x,M), onde 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

DCC001 2011-2 38

Page 39: 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

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

0 1 2 3 4 5 6 7 8 9 10-1.0

-0.8

-0.6

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

1.0

x é um vetor coluna (e sin(x),

sin(2*x) e sin(3*x)

também são)

DCC001 2011-2 39

Page 40: 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

Matrizes de Strings

-->a = ["s1" "s2"] a =!s1 s2 !

-->b = ["s1" ; "s2"] b =!s1 !! !!s2 !

DCC001 2011-2 40

Page 41: 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

Leitura de Arquivos como Matrizes de Strings - 1

fpath = uigetfile()da = mopen(fpath,'r')linhas = mgetl(da);mclose(da);

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 Uso típico:

DCC001 2011-2 41

Page 42: 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

Leitura de Arquivos como Matrizes de Strings – 2

-->linhas 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é? !

Este programa usado com o arquivo José produz:

DCC001 2011-2 42

Page 43: 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

Matrizes Numéricas e Arquivos no Scilab

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 fscanfMat e fprintfMat

Estes comandos lêm ou gravam arquivos que contêm somente números em formato tabular, à exceção das primeiras linhas que podem conter textos.

A abertura e o fechamento dos arquivos são feitas internamente pelas funções fscanfMat e fprintfMatDCC001 2011-2 43

Page 44: 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

O Comando fprintfMat - 1

fprintfMat(arq,r,'%5.2f', Cabecalho) Grava a matriz r no arquivo arq 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.

DCC001 2011-2 44

Page 45: 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

O programa

produz o arquivo

O Comando fprintfMat – 2

a = [1 2 3; 4 5 6; 7 8 9];arq = uigetfile();Cabecalho = [" Meus Dados "; "Col1 Col2 Col3"] fprintfMat(arq,a,"%5.2f",Cabecalho);

DCC001 2011-2 45

Page 46: 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

O Comando fscanfMat

r = fscanfMat(arq);Lê uma matriz do arquivo cujo

nome completo é um string armazenado em arq

Linhas com texto no início do arquivo são ignoradas

DCC001 2011-2 46

Page 47: 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

O programa

Escolhendo o arquivo anterior, produz a matriz

O Comando fscanfMat

arquivo = uigetfile();m = fscanfMat(arquivo)

m = 1. 2. 3. 4. 5. 6. 7. 8. 9.

DCC001 2011-2 47

Page 48: 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

Clima em Belo Horizonte:O Arquivo TempoBHZ.txt

Aberto com o “Bloco de Notas”

DCC001 2011-2 48

Page 49: 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

Clima em Belo Horizonte

Faça um programa que: Leia este arquivo para uma matriz ClimaBH,

usando a função fscanfMat, que ignora linhas de cabeçalho em um arquivo.

Da matriz ClimaBH, extraia os vetores MaxMed, MinMed, MaxRec, MinRec e Precip, com significados óbvios.

Gere um gráfico que tenha simultaneamente os valores de MaxMed, MinMed, MaxRec e MinRec.

DCC001 2011-2 49

Page 50: 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

Clima em Belo Horizonte

arqClima = uigetfile(title="Arquivo com dados do clima em BH: ");ClimaBH = fscanfMat(arqClima);

MaxMed = ClimaBH(:,2); // MaxMed = 2a colunaMinMed = ClimaBH(:,3); // MinMed = 3a colunaMaxRec = ClimaBH(:,4); // MaxRec = 4a colunaMinRec = ClimaBH(:,5); // MinRec = 5a colunaPrecip = ClimaBH(:,6); // Precip = 6a coluna

plot2d([1:12],[MaxMed MinMed MaxRec MinRec],...leg="MaxMed@MinMed@MaxRec@MinRec")xtitle("Temperaturas Mensais em BH","Mês","Graus C");

DCC001 2011-2 50

Page 51: 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

Clima em Belo HorizonteGráfico

MaxMedMinMedMaxRec

MinRec

0 2 4 6 8 10 120

5

10

15

20

25

30

35

40

Temperaturas Mensais em BH

Mês

Gra

us C

DCC001 2011-2 51

Page 52: 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

Gráficos de Dados Experimentais

O arquivo AcessosNotas.txt tem este formato

Construir um gráfico que mostre estes dados

DCC001 2011-2 52

Page 53: 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

Programa AcessosNotas.sce

DCC001 2011-2 53

// Este programa lê o arquivo AcessosNotas.txt,// e produz um gráfico de dispersão dos dados

arq = uigetfile("*.txt",pwd(), ..."Arquivo com Acessos e Notas");AcessosNotas = fscanfMat(arq);Acessos = AcessosNotas(:,1);Notas = AcessosNotas(:,2);plot2d(Acessos,Notas,style=-1)xgrid()xtitle("Acessos versus Notas", ..."Número de Acessos","Aproveitamento")

Page 54: 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

Resultado do programa AcessosNotas.sce

DCC001 2011-2 54

Page 55: 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

Matrizes e Expressões Lógicas

O resultado de uma expressão relacional envolvendo matrizes é uma matriz de booleanos

55DCC001 2011-2

-->a = [3 7;8 2]

a =

3. 7.

8. 2.

-->a > 5

ans =

F T

T F

-->a = [3 7; 8 2];

-->b = [5 6; 7 8];

-->a > b

ans =

F T

T F

Page 56: 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

Matrizes, Expressões Lógicas e o Comando if

-->a = [3 9; 12 1]-->x = 0; y = 0;-->if a > 5 then; x = 10000; end;-->if a > 0 then; y = 10000; end;-->[x y] ans = 0. 10000.

56DCC001 2011-2

Page 57: 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

Usando Matrizes Booleanas para designar elementos de uma Matriz

-->a = [3 9; 12 1];-->a(a>5) = -1 a = 3. - 1. - 1. 1.

Sejam X uma matriz de números reais, e mb uma matriz de booleanos com as mesmas dimensões de X

X(mb) designa os elementos de X com correspondentes em mb iguais a %T

57DCC001 2011-2

Page 58: 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

Notas

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

A manipulação de matrizes é muito flexível no Scilab

Matrizes são também essenciais para o desenho de gráficos no Scilab

DCC001 2011-2 58