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

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

Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II

Apresentações semelhantes


Apresentação em tema: "Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II"— Transcrição da apresentação:

1 Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
DI/FCT/UNL 1º Semestre 2004/2005

2 Simulação da Queda de Corpos II
Dada uma altura inicial, um coeficiente de resistência do ar e uma dada precisão do intervalo de tempo, mostrar a evolução da posição, velocidade e aceleração do objecto durante o tempo da queda. Algoritmo de Queda de Corpos Entrada Resistência do Ar Altura Inicial Intervalo de Tempo Resultados Gráficos para Posição Velocidade Aceleração

3 Gráficos Em Octave a forma mais simples de desenhar um gráfico da função f(x) é utilizar a função pre-definida plot(X,F) sendo X e F vectores da mesma dimensão, e em que o i-ésimo elemento do vector F corresponde ao valor da função no ponto x indicado pelo i-ésimo elemento do vector X.

4 Tipos de Dados Como se pretendem gráficos para a posição, velocidade e aceleração ao longo do tempo, deverá este manter um conjunto de vectores T, X, V e A com o significado esperado para registar os valores sucessivos de T : os instantes em que são avaliadas as outras grandezas X : a posição do corpo nos instantes registados em T V : a velocidade do corpo nos instantes registados em T A : a aceleração do corpo nos instantes registados em T As restantes variáveis dt, k e g são do tipo real e mantêm-se constantes ao longo do problema, uma vez inicializadas.

5 Vectores e Matrizes Todas as linguagens de programação de alto nível permitem a especificação de estruturas para agrupar dados do mesmo tipo. Em geral, os dados destas estruturas estão organizados em uma ou mais dimensões. Em Octave apenas se podem utilizar, como “primitivas”, estruturas uni-dimensionais (Vectores) e bi-dimensionais (Matrizes). Por exemplo: A = [ 1, 2, 3] B = [ ; 4 5 6]

6 Vectores e Matrizes As linguagens compiladas requerem em geral que os vectores e as matrizes sejam declarados antes de utilizados (definindo o tamanho das várias dimensões). Tal não é estritamente necessário em Octave (!) que vai alocando espaço de memória à medida que novos elementos são introduzidos. Notar no entanto que: Esta flexibilidade tem como custo a maior lentidão de execução. Em execuções sucessivas do mesmo programa, pode-se dar o caso da estrutura manter uma dimensão (anterior), maior do que a pretendida na execução corrente.

7 Vectores e Matrizes Desta forma, é conveniente inicializar os vectores utilizados num programa, sempre que se conheçam as suas dimensões e tamanho de cada dimensão. Em Octave, a inicialização pode ser feita por operações de “construção” de vectores e matrizes, indicadas através de parênteses rectos. Em Octave, podem-se ainda inicializar vectores através das instruções eye, zeros ou ones que inicializam matrizes identidade, ou preenchidas com zeros e uns, respectivamente. Alguns exemplos: A = eye(2) B = zeros(3,1) C = ones (2,3) 1 1

8 Vectores e Matrizes Um elemento de uma matriz é referido, indicando-se a ordem desse elemento em cada dimensão. A notação é diferente nas várias linguagens. Em Octave a referência faz-se com parênteses curvos. Por exemplo: x = A(2, 1) % = 4 1 2 3 4 5 6 2ª linha, 1ª coluna O Octave permite endereçar sub-vectores directamente, utilizando o operador : como identificador de todos os elementos de uma dimensão. Por exemplo: L1 = A(1 , : ) ou C2 = A(: , 2 ) 2 5 1 2 3 1ª linha, todas as colunas Todas as linhas da 2ª coluna,

9 Vectores e Matrizes : Ciclos
Para efeito de endereçamento é vulgar utilizar índices (i, j, k, ...) que indicam a posição nas respectivas dimensões. Variando estes índices pode variar-se o elemento do vector que é referido. É muito frequente pretender-se num programa “varrer” todos os elementos de um vector, isto é, percorrê-los por ordem crescente do(s) seu(s) índice(s). i  1; enquanto i < imax fazer A(i)  ... ...... i  i + 1; fim enquanto; No caso de vectores unidimensionais, tal pode ser feito num único ciclo enquanto

10 Ciclos Para Para evitar a necessidade de inicializar um índice e de ir procedendo ao seu incremento dentro do ciclo enquanto, todas as linguagens de programação prevêem um ciclo para que elimina essa necessidade. para i de 1 a imax fazer A(i)  ... ...... fim para; i  1; enquanto i < imax fazer A(i)  ... ...... i  i + 1; fim enquanto; Notas: É necessário conhecer imax, o tamanho máximo da dimensão i. Assume-se que o primeiro elemento tem índice 1 (obrigatório em OCTAVE)

11 Estrutura do Algoritmo
Estamos agora em condições de especificar as alterações ao algoritmo para simulação da queda dos corpos com a apresentação da posição, velocidade e aceleração durante a queda. Vamos novamente considerar cada uma das seguintes componentes separadamente: 1. Inicialização de Variáveis 2. Ciclo de Simulação da Queda 3. Apresentação de Resultados

12 Constantes e Variáveis Utilizadas
g = 9.8 a aceleração da gravidade (na Terra) Variáveis: x0: a altura inicial do corpo k: o coeficiente de resistência do ar dt: o valor do intervalo de tempo usado na simulação i: variável que indica a iteração corrente T: vector que regista o tempo em cada iteração X : vector com a altura do corpo em cada iteração V : vector com a velocidade do corpo em cada iteração A : vector com a aceleração do corpo em cada iteração

13 Inicialização de Variáveis
As variáveis têm que ser inicializadas e as constantes definidas antes de poderem ser referidas em expressões. A constante que representa a aceleração da gravidade deve ser definida com o respectivo valor. g  9.8; g: aceleração da gravidade x0: a altura inicial do corpo k: o coeficiente de resistência do ar dt: intervalo de tempo usado na simulação i: variável que indica a iteração corrente T: vector com o tempo em cada iteração X: vector com a altura em cada iteração V: vector com a velocidade em cada iteração A: vector com a aceleração em cada iteração

14 Inicialização de Variáveis
As variáveis têm que ser inicializadas e as constantes definidas antes de poderem ser referidas em expressões. g: aceleração da gravidade x0: a altura inicial do corpo k: o coeficiente de resistência do ar dt: intervalo de tempo usado na simulação i: variável que indica a iteração corrente T: vector com o tempo em cada iteração X: vector com a altura em cada iteração V: vector com a velocidade em cada iteração A: vector com a aceleração em cada iteração g  9.8; entra x0; entra k; entra dt; Quer a altura inicial, quer o valor do coeficiente da resistência do ar, quer o intervalo de tempo utilizados, devem ser especificados pelo utilizador através de instruções de entrada.

15 Inicialização de Variáveis
As variáveis têm que ser inicializadas e as constantes definidas antes de poderem ser referidas em expressões. g: aceleração da gravidade x0: a altura inicial do corpo k: o coeficiente de resistência do ar dt: intervalo de tempo usado na simulação i: variável que indica a iteração corrente T: vector com o tempo em cada iteração X: vector com a altura em cada iteração V: vector com a velocidade em cada iteração A: vector com a aceleração em cada iteração g  9.8; entra x0; entra k; entra dt; i  1; A variável que indica a iteração corrente é inicializada com o valor 1 representando a primeira iteração.

16 Inicialização de Variáveis
As variáveis têm que ser inicializadas e as constantes definidas antes de poderem ser referidas em expressões. g: aceleração da gravidade x0: a altura inicial do corpo k: o coeficiente de resistência do ar dt: intervalo de tempo usado na simulação i: variável que indica a iteração corrente T: vector com o tempo em cada iteração X: vector com a altura em cada iteração V: vector com a velocidade em cada iteração A: vector com a aceleração em cada iteração g  9.8; entra x0; entra k; entra dt; i  1; T(i)  0; X(i)  x0; V(i)  0; Assumindo que a queda começa na origem do tempo, da altura x0 e a partir de repouso, os valores do primeiro elemento dos vectores T, X e V deverão ser 0, x0 e 0 respectivamente.

17 Inicialização de Variáveis
As variáveis têm que ser inicializadas e as constantes definidas antes de poderem ser referidas em expressões. g: aceleração da gravidade x0: a altura inicial do corpo k: o coeficiente de resistência do ar dt: intervalo de tempo usado na simulação i: variável que indica a iteração corrente T: vector com o tempo em cada iteração X: vector com a altura em cada iteração V: vector com a velocidade em cada iteração A: vector com a aceleração em cada iteração g  9.8; entra x0; entra k; entra dt; i  1; T(i)  0; X(i)  x0; V(i)  0; A(i)  -g-kV(i) A aceleração inicial pode ser calculada de acordo com a respectiva fórmula.

18 Inicialização de Variáveis
As variáveis x0, dt e k são numéricas e devem ser introduzidas pelo utilizador, mantendo-se constantes após a inicialização. A variável i é de tipo inteiro e as outras de tipo real, mas no Octave não é necessário distinguir os tipos de dados numéricos. Os primeiros elementos dos vectores T, X, V e A - isto é, T(1), X(1), V(1) e A(1) - são inicializados antes do ciclo, Os restantes elementos dos vectores – isto é, T(i), X(i), V(i) e A(i), com i  2, – vão sendo calculados nas sucessivas iterações do ciclo Para.

19 Inicialização de Variáveis
g  9.8; % Aceleração da Gravidade entra x0; % Altura inicial entra k; % Coeficiente de Atrito entra dt; % Intervalo de Tempo i  1; % Primeira iteração T(i)  0; % Tempo inicial X(i)  x0; % Altura inicial V(i)  0; % Velocidade inicial A(i)  -g-kV(i); % Aceleração inicial

20 Ciclo de Simulação A parte fundamental do algoritmo é o ciclo de simulação em que se vão calculando os sucessivos valores de tempo, da altura, da velocidade e da aceleração, em tempos espaçados de um intervalo dt. enquanto x > 0 fazer t  t + dt ; x  x + v  dt ; % x(t+dt)  x(t) + v(t)  dt v  v + a  dt ; % v(t+dt)  v(t) + a(t)  dt a  -g - k  v ; % a(t+dt) = - g - k  v(t+dt) fim enquanto No problema anterior, em que não era necessário guardar os valores intermédios, tinhamos:

21 Ciclo de Simulação A parte fundamental do algoritmo é o ciclo de simulação em que se vão calculando os sucessivos valores de tempo, da altura, da velocidade e da aceleração, em tempos espaçados de um intervalo dt. Agora temos que guardar os valores de cada iteração nos vectores T, X, V e A: enquanto X(i) > 0 fazer i  i + 1; T(i)  T(i-1) + dt; X(i)  X(i-1) + V(i-1)dt; % x(t+dt)  x(t) + v(t)  dt V(i)  V(i-1) + A(i-1)dt; % v(t+dt)  v(t) + a(t)  dt A(i)  -g - k  V(i); % a(t+dt) = - g - k  v(t+dt) fim enquanto

22 Ciclo de Simulação 2. Ciclo de Simulação enquanto X(i) > 0 fazer
i  i + 1; T(i)  T(i-1) + dt; X(i)  X(i-1) + V(i-1)dt; % x(t+dt)  x(t) + v(t)  dt V(i)  V(i-1) + A(i-1)dt; % v(t+dt)  v(t) + a(t)  dt A(i)  -g - k  V(i); % a(t+dt) = - g - k  v(t+dt) fim enquanto

23 Apresentação de Resultados
Os resultados que se pretendem apresentar são a evolução da altura, da velocidade e da aceleração ao longo do tempo de queda. Gráfico(T,X); % Altura do Objecto Gráfico(T,V); % Velocidade do Objecto Gráfico(T,A); % Aceleração do Objecto Em pseudo-código, estes gráficos podem ser representados por: Que terá de ser particularizado para uma qualquer linguagem (por exemplo Octave) através das primitivas disponibilizadas nessa linguagem.

24 Gráficos em Octave Como se pretende mostrar 3 gráficos, com eixos diferentes, tal pode ser feito em Octave através da criação de 3 janelas de gráficos, e usando cada uma para a função pretendida multiplot(1,3); subwindow(1,1); xlabel(“Altura"); plot(T,X); subwindow(1,2); xlabel(“Velocidade"); plot(T,V); subwindow(1,3); xlabel(“Aceleração"); plot(T,A);

25 Algoritmo Completo g  9.8; % Aceleração da Gravidade
entra x0; % Altura inicial entra k; % Coeficiente de Atrito entra dt; % Intervalo de Tempo i  1; % Primeira iteração T(i)  0; % Tempo inicial X(i)  x0; % Altura inicial V(i)  0; % Velocidade inicial A(i)  -g-kV(i); % Aceleração inicial Inicialização de Variáveis enquanto X(i) > 0 fazer i  i + 1; T(i)  T(i-1) + dt; X(i)  X(i-1) + V(i-1)dt; % x(t+dt)  x(t) + v(t)  dt V(i)  V(i-1) + A(i-1)dt; % v(t+dt)  v(t) + a(t)  dt A(i)  -g - k  V(i); % a(t+dt) = - g - k  v(t+dt) fim enquanto Ciclo de Simulação Gráfico(T,X); % Altura do Objecto Gráfico(T,V); % Velocidade do Objecto Gráfico(T,A); % Aceleração do Objecto Resultados

26 Programa Octave g = 9.8; x0 = input(" Qual a altura inicial (em metros) ? "); k = input(" e o coeficiente de atrito (1/s) ? "); dt = input(" e o intervalo de tempo (em segs) ? "); i = 1; T=zeros(1,1); X=zeros(1,1); V=zeros(1,1); A=zeros(1,1); T(i) = 0; X(i) = x0; V(i) = 0; A(i) = - g - k * V(i); while (X(i) > 0) i = i + 1; T(i) = T(i-1) + dt; X(i) = X(i-1) + V(i-1)*dt; V(i) = V(i-1) + A(i-1)*dt; A(i) = -g - k*V(i); endwhile; multiplot(1,3); subwindow(1,1); xlabel("Altura");plot(T,X); subwindow(1,2); xlabel("Velocidade"); plot(T,V); subwindow(1,3); xlabel("Aceleração"); plot(T,A);


Carregar ppt "Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II"

Apresentações semelhantes


Anúncios Google