Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2007/2008.

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Controle
Advertisements

1 Trabalho prático 8 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Ficheiro de pontos Ficheiro de distancias.
Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto
Luís Torgo, 2002FEP, UP Indexação de vectores Para aceder a um elemento de um vector usamos a sua posição entre parênteses rectos. O R também nos permite.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 6.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Cadeias e ficheiros.
29 Outubro 2005Funções: Zeros, Máximos e Mínimos1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Variáveis, matrizes e séries 2.1 Octave Variáveis, Matrizes e Séries.
9 de Março de 2006Trajectória de um Projéctil1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
Introdução aos Computadores e Programação DI-FCT-UNL-2005/2006 Strings, operadores e funções 3.1 Octave Matrizes (cont.) e strings.
16 Março 2006Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL.
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004 Strings, operadores e funções 3.1 Octave Strings, Operadores e Funções.
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004 Variáveis, matrizes e séries 2.1 Octave Variáveis, Matrizes e Séries.
6 Outubro de 2005Trajectória de um Projéctil1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006.
Introdução aos Computadores e Programação DI-FCT-UNL-2004/2005 Strings, operadores e funções 3.1 Octave Strings, Operadores e Funções.
Octave Introdução, Variáveis e Matrizes
2 Dezembro de 2005Simulação com Modelos Diferenciais1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
Vectores e Matrizes Aplicações à Engenharia
Ciclos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2008/2009.
1 Funções Trajectória de Projéctil DI/FCT/UNL 1º Semestre 2004/2005.
Funções, Execução Condicional, Recursividade e Iteração
1 Folha de Cálculo DI/FCT/UNL 1º Semestre 2004/2005.
24 Novembro 2006Folha de Cálculo 11 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2006/2007.
7 de Março de 2006 Introdução (Informal) à Programação 1 Pedro Barahona DI/FCT/UNL Programação para as Ciências Experimentais 2º Semestre 2005/2006.
Recursividade e Iteração Factorial, Fibonacci e Maior Divisor Comum
Introdução (Informal) à Programação
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
11 de Maio de 2006Listas e Ordenação1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
31 de Março de 2005Trajectória de um Projéctil - Gráficos e Funções1 Trajectória de Projéctil –Gráficos e Funções Pedro Barahona DI/FCT/UNL Março 2005.
Vectores, Gráficos e Funções Trajectória de um Projéctil
17 Novembro 2005Leitura, Escrita e Processamento de Registos - Estruturas e Listas 1 Leitura, Escrita e Processamento de Registos Estruturas e Listas Jorge.
30 Novembro 2005Folha da Cálculo1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006.
Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Strings 4.1 Octave Strings.
1 Funções, Expressões e Excepções Trajectórias Óptimas DI/FCT/UNL 1º Semestre 2004/2005.
1 Processamento de Registos Listas e Estruturas DI/FCT/UNL 1º Semestre 2004/2005.
Ciclos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2007/2008.
9 Março 2007Matrizes e Gráficos - Trajectória de um Projéctil1 Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores.
10 Novembro 2006Leitura, Escrita e Processamento de Registos - Estruturas e Listas 1 Leitura, Escrita e Processamento de Registos Estruturas e Listas Jorge.
Integração Numérica: Equações Diferenciais
Introdução aos Computadores e à Programação
1 Introdução (Informal) à Programação DI/FCT/UNL 1º Semestre 2004/2005.
Introdução (Informal) à Programação
Introdução aos Computadores e Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Ficheiros (matrizes e registos)
5 de Maio de 2005Registos em Ficheiros1 Registos em Ficheiros - Estruturas Pedro Barahona DI/FCT/UNL Maio 2005.
16 Dezembro 2005Folha de Cálculo - Conclusão1 Folha da Cálculo - Conclusão Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre.
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
5 Março 2007Ciclos e Funções - Trajectória de um Projéctil1 Ciclos e Funções Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
Introdução aos Computadores e à Programação
Octave Variáveis, Matrizes e Séries
Introdução aos Computadores e à Programação
Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2008/2009.
Software Básico Silvio Fernandes
Matrizes. 2MF. Matrizes e vectores Multi-dimensionais Não há limite para o número de dimensões de um vector São uma estrutura de dados homogênea multidimensional.
Programação Baseada em Objectos Desenho de TAD
Programação em Java Prof. Maurício Braga
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Aula prática 6 Vetores e Matrizes
Aula 02 Variáveis, Matrizes, Gráficos
Array multidimensional
Aula prática 6 Vetores e Matrizes
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
20/21 Abril de 2004Funções, Expressões e Excepções1 Pedro Barahona DI/FCT/UNL Abril 2004.
MATRIZES Nas situações anteriores, cada variável do tipo vetor armazena os dados numa única fileira: Vetor de 8 posições Esta é a forma mais simples de.
Campus de Caraguatatuba
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
Exemplo 7. Encontre a velocidade instantânea da partícula descrita na Figura 1 nos seguintes instantes: (a) t = 1.0 s, (b) t = 3.0 s, (c) t= 4.5 s, e (d)
30/31 Março de 2004Movimento de uma Mola1 Pedro Barahona DI/FCT/UNL Março 2004.
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
13/14 Abril de 2004Trajectória de um Projéctil1 Trajectória de Projéctil - Funções Pedro Barahona DI/FCT/UNL Março 2004.
Transcrição da apresentação:

Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2007/2008

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 2 Gráficos e Matrizes Em muitas situações, a informação de saída é mais útil se for apresentada através de gráficos (ou outra forma de apresentação audio-visual). O Octave tem uma capacidade (limitada) de apresentação de gráficos, implementada através de uma estrutura de dados básica: a matriz. Esta funcionalidade será apresentada para obtenção do gráfico da trajectória de um projéctil, estudada anteriormente, e correspondente à função v0v0 (0,0) x y y0y0 a f(a)f(a) d max h max

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 3 Matrizes Uma matriz (array) é uma estrutura de dados que agrega um conjunto de valores do mesmo tipo, na forma de uma tabela multidimensional. No Octave, as matrizes têm apenas 1 dimensão (vaectores) ou duas dimensões. Noutras linguagens os arrays podem ter mais de 2 dimensões. Por exemplo, podemos representar no vector V os primeiros 5 números inteiros, num vector U os primeiros 4 números primos, e na matriz M a tabela da multiplicação dos primeiros números naturais. Nas tabelas os dados estãi dispostos em linhas e colunas. O vector V tem 1 linha e 5 colunas, o vector U tem 4 linhas e 1 coluna, e a matriz M 3 linhas e 4 colunas. Vector V Matriz M Vector U

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 4 Inicialização de Matrizes A forma mais simples de inicializar uma matriz (pequena) é indicar explicitamente os seus valores, numa operação de atribuição. Em Octave, todas as variáveis são matrizes, mesmo os valores simples, internamente guardados como matrizes de uma linha e uma coluna. Na atribuição directa, as dimensões da matriz são indicadas implicitamente. Os sucessivos valores são colocados entre parênteses rectos, separados por espaços ou vírgulas dentro de uma linha, sendo as linhas separadas por ponto e vírgula). Exemplos: V = [1, 4 9, 16 25] ; U = [ 2; 3; 5; 7] M = [ ; 2, 4, 6, 8 ; ] Vector V Matriz M Vector U

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 5 Inicialização de Matrizes Quando as matrizes são maiores elas podem ser inicializadas a 0 ou a 1spor instruções predefinidas zeros e ones, indicando-se explicitamente as dimensões das matrizes. Exemplos: V1 = ones(1,5) ; U1 = zeros(4,1) M1 = ones(3,4) Estes valores podem depois ser modificados. Para aceder a elementos da matriz deve indicar-se o identificador da matriz, seguido, entre parênteses curvos da região (range) da matriz que se pretende aceder. Nota: Em Octave, o primeiro elemento da linha ou coluna tem sempre o índice 1. Vector V1 Matriz M1 Vector U1

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 6 Inicialização de Matrizes Para identificar elementos individuais, a região da matriz é indicada pelo número de linha e coluna, podendo-se omitir as colunas e linhas em vectores linha e coluna, respectivamente. Exemplos: V(3) = 9 ; U(4) = 7 ; M(2,3) = 6 Para modificação de todos os valores são habitualmente utilizados ciclos, como os indicados para o vector V (em pseudo-código e em sintaxe Octave) Vector V Matriz M Vector U i = 1; while i <= 5 V(i) = i^2; i = i+1; endwhile i = 1; enquanto i <= 5 V(i) = i^2; i = i+1 fimenquanto

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 7 Ciclos Para Sendo conhecido o número de iterações de um ciclo, este ciclo pode ser especificado através de uma instrução de repetição para (for). Assim os ciclos abaixo, escritos em pseudo-código, são equivalentes Em Octave o ciclo é especificado pela instrução for. Os limites inicial e final são especificados como um range, com a sintaxe do Octave. i = 1; enquanto i <= 5 V(i) = i^2; i = i+1 fimenquanto para i de 1 a 5 V(i) = i^2; fimpara i = 1; while i <= 5 V(i) = i^2; i = i+1 endwhile for i = 1:5 V(i) = i^2; fimpara

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 8 Ranges Para além dos valores inicial e final, um range pode ainda ter opcionalmente um passo (distância entre valores consecutivos), com a sintaxe ilustrada em baixo. Nota 1: O passo é opcional, e por omissão vale 1. Assim, 1:5 é equivalente a 1:1:5. X = zeros(1,7) para i de 1 a 5 (passo 2) V1(i) = i^2; fimpara X = zeros(6,1) for i = 1:3:6 X(i) = i^2; fimpara

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 9 Ciclos Encadeados Em geral, é necessário utilizar tantos ciclos quanto as dimensões da matriz. Para aceder a todos os elementos de uma matriz (bidimensional), os ciclos terão de ser encadeados, podendo.se fazer o varrimento por linhas ou colunas. Varrimento por linhas i é linha e j é a coluna M = zeros(3,4) for i = 1:3 for j = 1:4 M(i,j) = i*j; endfor Varrimento por linhas j é linha e i é a coluna M = zeros(3,4) for i = 1:4 for j = 1:3 M(j,i) = i*j; endfor

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 10 Gráficos e Vectores Em Octave a forma mais simples de desenhar o gráfico de uma função f(x) é utilizar o comando pre-definido plot(X,F) –em que X é um vector que as abcissas consideradas; –e F é o vector com as ordenadas dos pontos correspondentes.

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 11 Gráficos e Vectores Normalmente, para se obter um gráfico de uma função, basta determinar o valor da função em n pontos, sendo o n dependente do contexto. Por exemplo, se pretendermos o gráfico da função f, calculado em n pontos, no intervalo de [a.. b] podemos usar a função grafico abaixo em que f é a função definida ao lado function y = grafico_f(a,b,n) dx = (b-a)/(n-1);% distância-x entre pontos X(1) = a; % especificação da 1ª abcissa(x) Y(1) = f(X(1));% cálculo da 1ª ordenada (y) for i = 2:n% cálculo dos outros pontos X(i) = X(i-1) + dx; % i-ésima abcissa Y(i) = f(X(i));% i-ésima ordenada endfor plot(X,Y);% desenha o gráfico de f endfunction; function y = f(x) y = x^3+x^2-x; endfunction;

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 12 Gráficos de Várias Funções O Octave permite igualmente o desenho simultâneo de várias funções, no mesmo intervalo X, através do mesmo comando plot(X,M) No entanto, o 2º argumento deve ser uma matriz com o mesmo número de colunas do vector X, e com tantas linhas quantas as funções a mostrar. Por exemplo, o gráfico das funções f e g entre os pontos a e b, desenhado com n pontos, pode ser obtido com a função grafico_fg, semelhante à anterior. No entanto, em vez de se determinarem apenas os valores de uma ordenada, e colocá-las num vector Y (com 1 linha), há que determinar os valores de 2 ordenadas, e colocá-las numa matriz M com 2 linhas.

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 13 Gráficos de Várias Funções Desta forma, a função para desenhar as funções f e g, simultâneamente, pode ser especificada como em que f é a função anterior e g a função definida ao lado function y = grafico_fg(a,b,n) dx = (b-a)/(n-1);% distância-x entre pontos X(1) = a; % especificação da 1ª abcissa(x) M(1,1) = f(X(1));% cálculo da 1ª ordenada f(x) M(2,1) = g(X(1));% cálculo da 1ª ordenada g(x) for i = 2:n% cálculo dos outros pontos X(i) = X(i-1) + dx; % i-ésima abcissa M(1,i) = f(X(i));% i-ésima ordenada f(x) M(2,i) = g(X(i));% i-ésima ordenada g(x) endfor plot(X,M);% desenha o gráfico de f e g endfunction; function y = g(x) y = x^3+x^2+x; endfunction;

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 14 Passagem de Funções como Parâmetros Nas versões anteriores da função gráfico, não se pode passar como parâmetro a função a desenhar. Em linguagens de alto nível, é geralmente possível fazê-lo, passando as funções por referência. Em Octave, onde não há passagem por referência, pode utilizar-se um truque, passando-se o nome da função como argumento e utilizando-se a função pré- definida feval, que recebe como 1º argumento o nome da função e nos seguintes parâmetros os parâmetros da função. Uma vez definida a função grafico (no diapositivo seguinte), são equivalentes as chamadas grafico_f(x,a,b) e grafico(f,x,a,b) bem como as chamadas grafico_g(x,a,b) e grafico(g,x,a,b)

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 15 Passagem de Funções como Parâmetros A função feval, recebe como 1º argumento o nome da função e nos seguintes parâmetros os parâmetros da função. Assim, saõ equivalente as chamadas f(x) e feval(f,x) Utilizada na especificação da função grafico, indicada abaixo function y = grafico(func,a,b,n) dx = (b-a)/(n-1);% distância-x entre pontos X(1) = a; % especificação da 1ª abcissa(x) Y(1) = feval(func,X(1)); % cálculo da 1ª ordenada (y) for i = 2:n% cálculo dos outros pontos X(i) = X(i-1) + dx; % i-ésima abcissa Y(i) = feval(func,X(i));% i-ésima ordenada endfor plot(X,Y);% desenha o gráfico de f endfunction;

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 16 Aproximações de Funções A possibilidade de mostrar várias funções num gráfico, permite visualizar a aproximação de funções calculadas através de séries. Consideremos por exemplo a função e x, obtida através da série expo(x) = 1 + x + x 2 /2! + x 3 /3!+ Como já foi visto, a função e x pode ser aproximada pela função = expo(x,n) que considera os primeiros n termos da série. Essa função pode ser definida como Há agora que adaptá-la, para mostrar o gráfico da convergência function z = expo(x,n) y = 1; for i = 1:n y = y + x^i/fact(i); endfor z = y; endfunction

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 17 Aproximações de Funções function z = expo(x,n) y = 1; for i = 1:n y = y + x^i/fact(i); endfor z = y; endfunction function z = expo(x,n,p) P(1) = 1; Y(1) = 1; for i = 1:n P(i+1) = P(i)+1; Y(i+1) = Y(i) + x^i/fact(i); endfor z = Y(n+1); if p plot(P,Y) endif endfunction Para esse efeito, é necessário –Guardar os sucessivos valores de y no vector Y; –Guardar os sucessivos valores das iterações no vector P; –Condicionar o desenho do gráfico ao parâmetro p de entrada.

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 18 Aproximações de Funções Outro exemplo de funçaõ obtida por iterações sucessivas é a raiz quadrada, que vamos aproximar por valores sucessivos do vector R. 1.A raiz do número x, raiz(x) está entre 1 e x. Assim uma primeira aproximação, é obtida pela média de 1 e x, isto é R(1) = (1+x)/2. 2.Suponhamos que a é um valor aproximado de raiz(x) obtido na iteração i-1, isto é, R(i-1) = a. Então obtem-se outra aproximação de raiz(x), fazendo b = x/a. 3.Notar que se a > raiz(x) então b < raiz(x) (e vice-versa). 4.Assim, o valor médio c = (a+b)/2 é uma melhor aproximação de raiz(x) do que a ou b, e podemos usá-lo como a aproximação na iteração seguinte, R(i) = c. Isto obtem-se com o seguinte ciclo: for i = 2:n a = R(i-1); b = x / a; c = a+b)/2; R(i) = c; endfor

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 19 Aproximações de Funções Eis a função r2(x,k), definida em Octave para determinar a raiz quadrada de x, em k iterações, mostrando graficamente as várias iterações. function y = r2(x,k); R(1) = (1+x)/2; % valor inicial for i = 2:k a = R(i-1); % aproximação da iteração anterior b = x/a; % nova aproximação c = (a+b)/2; % melhor aproximação P(i) = c; % que passa para a iteração seguinte endfor y = R(k); plot(P); endfunction Notar que a função plot tem um só argumento, pelo que a ordenada toma valores inteiros (1, 2, 3,...).

10 Outubro 2007 Matrizes e Gráficos - Trajectória de um Projéctil 20 Aproximações de Funções A função pode generalizar-se para raiz(n,x,k), definida em Octave para determinar a raiz de ordem n de x, em k iterações, mostrando graficamente as várias iterações. function y = raiz(x,k); R(1) = (1+x)/2; % valor inicial for i = 2:k a = R(i-1); % aproximação da iteração anterior b = x/a^(k-1); % nova aproximação c = ((k-1)*a+b)/k; % melhor aproximação P(i) = c; % que passa para a iteração seguinte endfor y = R(k); plot(P); endfunction Notar que a função raiz é a raiz quadrada para n=2.