A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação de Computadores 2° Semestre de 2011

Apresentações semelhantes


Apresentação em tema: "Programação de Computadores 2° Semestre de 2011"— Transcrição da apresentação:

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

2 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 DCC

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

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

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

6 Modificação de elemento
DCC

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

8 Atribuindo único valor a parte de matriz
x = -->x(2:4,3:5) = -1 DCC

9 Atribuindo matriz a parte de matriz
x = -->x(3:4,4:5) = [-1 -2;-3 -4] DCC

10 Acesso a linha de matriz
x = -->a = x(2,:) a = x = -->a = x(2,:) a = “:” designa todos os elementos de uma dimensão DCC

11 Acesso a linhas de parte de matriz
x = -->b = x(:,3:5) b = DCC

12 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. DCC

13 Adição e Subtração Requerem matrizes de mesmas dimensões
-->x = [1 2 3; 4 5 6]; -->y = [ ; ]; -->x + y ans = -->x - y DCC

14 Produto Matricial 220 = 1x10 + 2x30 + 3x50 -->x = [1 2 3; 4 5 6]
-->y = [10 20; 30 40; 50 60] y = -->x * y ans = 220 = 1x10 + 2x30 + 3x50 DCC

15 Produto Elemento a Elemento
-->x = [1 2; 3 4]; -->y = [10 20; 30 40]; -->x * y ans = -->x .* y Produto Matricial Produto Elemento a Elemento DCC

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

17 Exponenciação Elemento a Elemento
ans = -->x .^ 2 Produto Matricial x * x Exponenciação Elemento a Elemento DCC

18 A' é a transposta da matriz A
Matriz Transposta A = -->B = A' B = A' é a transposta da matriz A DCC

19 Matriz Inversa – 1 A = 4. 7. 6. 2. 2. 1. 1. 1. 6. -->IA = inv(A)
-->IA = inv(A) IA = DCC

20 Matriz Inversa – 2 Erro de Aproximação -->A * IA ans =
1.110D D-16 5.551D -->IA * A D DCC

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

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

23 Verificando a Solução -->residuo = a*x - b residuo = 0. - 2.220D-16
DCC

24 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 = -->x = 12:-0.5:10 DCC

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

26 A Função linspace 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 = -->x = linspace(0,10,6) Limites DCC

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

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

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

30 Gerando Matrizes “Bonitinhas”
Arredonda para o inteiro mais próximo Fator de Escala -->m = round(rand(2,3)*100) m = DCC

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

32 Funções Scilab são Matriciais!
Se a função sqrt, por exemplo, for chamada com um argumento matricial, seu resultado também é uma matriz -->sqrt([ ]) ans = DCC

33 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)), ... DCC

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

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

36 Gráfico Seno(x) – Versão 1
-->x = 0:0.8:3*%pi; -->y = sin(x); -->plot2d(x,y) O espaçamento de 0.8 está grande! DCC

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

38 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 DCC

39 Gráfico com várias curvas
-->x = linspace(0, 3*%pi, 101)'; -->plot2d(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

40 Matrizes de Strings -->a = ["s1" "s2"] a = !s1 s2 !
-->b = ["s1" ; "s2"] b = !s1 ! ! ! !s2 ! DCC

41 Leitura de Arquivos como Matrizes de Strings - 1
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: fpath = uigetfile() da = mopen(fpath,'r') linhas = mgetl(da); mclose(da); DCC

42 Leitura de Arquivos como Matrizes de Strings – 2
Este programa usado com o arquivo José produz: -->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? ! DCC

43 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 fprintfMat DCC

44 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. DCC

45 O Comando fprintfMat – 2 O programa produz o arquivo
arq = uigetfile(); Cabecalho = [" Meus Dados "; "Col1 Col2 Col3"] fprintfMat(arq,a,"%5.2f",Cabecalho); DCC

46 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 DCC

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

48 Clima em Belo Horizonte: O Arquivo TempoBHZ.txt
Aberto com o “Bloco de Notas” DCC

49 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. DCC

50 Clima em Belo Horizonte
arqClima = uigetfile(title="Arquivo com dados do clima em BH: "); ClimaBH = fscanfMat(arqClima); MaxMed = ClimaBH(:,2); // MaxMed = 2a coluna MinMed = ClimaBH(:,3); // MinMed = 3a coluna MaxRec = ClimaBH(:,4); // MaxRec = 4a coluna MinRec = ClimaBH(:,5); // MinRec = 5a coluna Precip = ClimaBH(:,6); // Precip = 6a coluna plot2d([1:12],[MaxMed MinMed MaxRec MinRec],... xtitle("Temperaturas Mensais em BH","Mês","Graus C"); DCC

51 Clima em Belo Horizonte Gráfico
DCC

52 Gráficos de Dados Experimentais
O arquivo AcessosNotas.txt tem este formato Construir um gráfico que mostre estes dados DCC

53 Programa AcessosNotas.sce
// 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") DCC

54 Resultado do programa AcessosNotas.sce
DCC

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

56 Matrizes, Expressões Lógicas e o Comando if
-->x = 0; y = 0; -->if a > 5 then; x = 10000; end; -->if a > 0 then; y = 10000; end; -->[x y] ans = DCC

57 Usando Matrizes Booleanas para designar elementos de uma Matriz
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 -->a = [3 9; 12 1]; -->a(a>5) = -1 a = DCC

58 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 DCC


Carregar ppt "Programação de Computadores 2° Semestre de 2011"

Apresentações semelhantes


Anúncios Google