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

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

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

Apresentações semelhantes


Apresentação em tema: "1 Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II DI/FCT/UNL 1º Semestre 2004/2005."— Transcrição da apresentação:

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

2 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 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 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 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 Octave apenas se podem utilizar, como primitivas, estruturas uni-dimensionais (Vectores) e bi-dimensionais (Matrizes). Em geral, os dados destas estruturas estão organizados em uma ou mais dimensões. Por exemplo: A = [ 1, 2, 3] B = [ ; 4 5 6]

6 6 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). Vectores e Matrizes 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 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)

8 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) % = ª linha, 1ª coluna 1ª linha, todas as colunas Todas as linhas da 2ª 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 )

9 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 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. i 1; enquanto i < imax fazer A(i) i i + 1; fim enquanto; para i de 1 a imax fazer A(i) fim para; Notas: 1.É necessário conhecer imax, o tamanho máximo da dimensão i. 2.Assume-se que o primeiro elemento tem índice 1 (obrigatório em OCTAVE)

11 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 12 Constantes e Variáveis Utilizadas Constantes: 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 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. 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 A constante que representa a aceleração da gravidade deve ser definida com o respectivo valor. g 9.8;

14 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 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. g 9.8; entra x0; entra k; entra dt;

15 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 A variável que indica a iteração corrente é inicializada com o valor 1 representando a primeira iteração. g 9.8; entra x0; entra k; entra dt; i 1;

16 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 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. g 9.8; entra x0; entra k; entra dt; i 1; T(i) 0; X(i) x0; V(i) 0;

17 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 A aceleração inicial pode ser calculada de acordo com a respectiva fórmula. 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)

18 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, 3... – vão sendo calculados nas sucessivas iterações do ciclo Para.

19 19 Inicialização de Variáveis 1. 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 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 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. 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 Agora temos que guardar os valores de cada iteração nos vectores T, X, V e A:

22 22 2. Ciclo de Simulação 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 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 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 25 Algoritmo Completo Inicialização de Variáveis Ciclo de Simulação Resultados Gráfico(T,X); % Altura do Objecto Gráfico(T,V); % Velocidade do Objecto Gráfico(T,A); % Aceleração do Objecto 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 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

26 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 "1 Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II DI/FCT/UNL 1º Semestre 2004/2005."

Apresentações semelhantes


Anúncios Google