Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.