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

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

Vectores, Gráficos e Funções Trajectória de um Projéctil

Apresentações semelhantes


Apresentação em tema: "Vectores, Gráficos e Funções Trajectória de um Projéctil"— Transcrição da apresentação:

1 Vectores, Gráficos e Funções Trajectória de um Projéctil
Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

2 Especificação do Problema
Dada uma altura inicial (y0) uma velocidade inicial (v0) e um ângulo inicial de lançamento (), com base no modelo da trajectória apresentado e para uma dada precisão (dx), determinar a distância máxima (dmax) e a altura máxima (hmax) atingidas pelo projéctil e mostrar o gráfico da trajectória. Algoritmo de Simulação da Trajectória de um Projéctil Entrada Altura Inicial : y0 Velocidade Inicial : v0 Ângulo Inicial :  Precisão : dx Resultados Distância Máxima : dmax Altura Máxima : hmax Gráfico Trajectória 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

3 Vectores, Gráficos e Funções - Trajectória de um Projéctil
Em Octave a forma mais simples de desenhar um gráfico da função f(x) é utilizar o comando pre-definido plot(X,F) sendo X e F dois vectores do mesmo tamanho, 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. 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

4 Vectores, Gráficos e Funções - Trajectória de um Projéctil
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] 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

5 Vectores, Gráficos e Funções - Trajectória de um Projéctil
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. 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

6 Vectores, Gráficos e Funções - Trajectória de um Projéctil
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 (Ex: A=[], B=[1, 2; 3, 4]). 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 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

7 Vectores, Gráficos e Funções - Trajectória de um Projéctil
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, 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

8 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 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

9 Vectores, Gráficos e Funções - Trajectória de um Projéctil
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) 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

10 Alterações ao Algoritmo
O algoritmo para simulação da trajectória de um projéctil pode ser decomposto em 3 “componentes” 1. Inicialização de Variáveis 2. Ciclo de Simulação da Trajectória 3. Apresentação de Resultados O Ciclo de Simulação da Trajectória tem que ser alterado de modo a guardar num vector os valores da trajectória calculados. Na Apresentação de Resultados têm que ser adicionadas instruções para mostrar o gráfico da trajectória. 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

11 Vectores, Gráficos e Funções - Trajectória de um Projéctil
Ciclo de Simulação Para guardar todos os pontos calculados da trajectória são necessários dois vectores, X e Y, e um índice i que indica a posição do último elemento. Ambos os vectores são inicializados com o primeiro ponto da trajectória e o valor de i é inicializado a 1 porque de início apenas existe o primeiro ponto. Por cada novo ponto: i é incrementado, e os novos valores de x e y são colocados na posição i dos respectivos vectores. O valor da altura máxima pode agora ser calculado apenas no fim do ciclo, uma vez que se guardaram todos os valores de y no vector Y. X  [0]; Y  [y0]; i  1; x  0; y  y0; enquanto y > 0 fazer x  x + dx; y  x*tan()-(g*x^2)/ (2*v0^2*cos()^2)+y0; hmax  max(hmax,y); fim enquanto enquanto Y(i) > 0 fazer i  i+1; X(i)  X(i-1) + dx; Y(i)  X(i)*tan()-(g*X(i)^2)/ (2*v0^2*cos()^2)+y0; fim enquanto hmax  max(Y); 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

12 Apresentação dos Resultados
Agora, além de se mostrar os valores da distância e altura máximas, tem que ser apresentado o gráfico da trajectória. Como deixou de existir a variável x, a distancia máxima corresponde agora ao último elemento do vector X. As instruções para mostrar a distância e altura máximas mantêm-se. Em pseudo-código, um gráfico pode ser representado por uma instrução Gráfico(X,Y), que terá de ser particularizada para uma qualquer linguagem através das primitivas disponibilizadas nessa linguagem (Octave: plot(X,Y)). dmax  X(i); dmax  x; Sai dmax; Sai hmax; Sai dmax; Sai hmax; Gráfico(X,Y); 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

13 Vectores, Gráficos e Funções - Trajectória de um Projéctil
Algoritmo Completo % Inicialização de Variáveis g  9.8; % aceleração da gravidade Entra y0; % altura inicial Entra v0; % velocidade inicial Entra ; % ângulo inicial Entra dx; % precisão dmax  0; % distância máxima da trajectória hmax  0; % altura máxima da trajectória % Ciclo de Simulação X  [0]; Y  [y0]; i  1; enquanto Y(i) > 0 fazer i  i+1; X(i)  X(i-1) + dx; Y(i)  X(i)*tan()-(g*X(i)^2)/(2*v0^2*cos()^2)+y0; fim enquanto % Apresentação de Resultados hmax  max(Y); dmax  X(i); Sai dmax; Sai hmax; Gráfico(X,Y); 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

14 Vectores, Gráficos e Funções - Trajectória de um Projéctil
Programa Octave % Inicialização de Variáveis g = 9.8; % aceleração da gravidade y0 = input(" Qual a altura inicial (m)? "); v0 = input(" Qual a velocidade inicial (m/s)? "); tet = input(" Qual o angulo inicial (rad)? "); dx = input(" Qual a precisao (m)? "); dmax = 0; % distância máxima da trajectória hmax = 0; % altura máxima da trajectória % Ciclo de Simulação X = [0]; Y = [y0]; i = 1; while Y(i) > 0 i = i+1; X(i) = X(i-1) + dx; Y(i) = X(i)*tan(tet)-(g*X(i)^2)/(2*v0^2*cos(tet)^2)+y0; endwhile % Apresentação de Resultados hmax = max(Y); dmax = X(i); disp("Distância maxima da trajectoria (m):"); disp(dmax); disp("Altura maxima da trajectoria (m):"); disp(hmax); plot(X,Y); 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

15 Vectores, Gráficos e Funções - Trajectória de um Projéctil
Em geral, as linguagens de programação, além de oferecerem funções prédefinidas (ex: sqrt(x), cos(x),…) permitem que o programador defina as suas próprias funções. A ideia é abstrair numa função (com nome, inputs e outputs) todos os procedimentos necessários para calcular os resultados pretendidos, isto é, calcular os outputs a partir dos inputs. Esta forma de proceder, tem muitas vantagens, já que permite: Estruturar um programa em componentes básicos; Reutilizar esses componentes básicos noutros programas. 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

16 Vectores, Gráficos e Funções - Trajectória de um Projéctil
No exemplo da trajectória de um projéctil, o cálculo do valor de y correspondente a cada valor de x pode ser abstraído numa função f responsável por executar esses cálculos correctamente. E, se quisermos, todo o cálculo da altura e distância máximas de uma trajectória pode ser abstraído numa função maximos que por sua vez utiliza a função f. f Entrada x, y0, v0,  Resultados y maximos Entrada y0, v0,  , dx Resultados dmax, hmax 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

17 Funções e Passagem de Parâmetros
Em muitos casos, ao invocar-se uma função pretende-se obter não apenas um mas vários resultados. Este requisito é tratado diferentemente em diferentes linguagens de programação, dependendo em grande parte da forma como são passados os parâmetros de uma função. Em OCTAVE, os parâmetros são passados exclusivamente por valor (com uma excepção - nomes de funções). Isto quer dizer, que ao especificar-se uma variável no parâmetro de uma função a invocar, o que se passa para a função é o valor da variável. Durante a função, a variável não pode ser alterada no programa que invoca a função! 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

18 Passagem de Parâmetros por Valor
Exemplo: Consideremos a função function y = f(x) x = 2*x y = x endfunction; Se chamada com o valor x = 5, durante a computação da função, esse valor é duplicado e retornado. Por exemplo, se invocarmos a função na sequência (pode ser ao terminal) ..., x = 5; z = f(x); x, z, ... os valores de x e y reportados no terminal são x = 5 e z = 10. 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

19 Passagem de Parâmetros por Valor
Exemplo: ..., x = 5; z = f(x); x, z, ... function y = f(x) x = 2*x; y = x; endfunction; A computação da função f pode ser assim explicado: Quando começa a ser executada a função f, é criada uma nova variável x, que é local à função f, e que não se confunde com a variável x do programa. O valor inicial da variável x local é o valor da variável do programa que é passsada como parâmetro (e que por acaso se chama x). A instrução x=2*x apenas envolve a variável local x, que passa a valer 10. Na instrução y=x, é a nova variável local que é considerada, e portanto, y = 10, valor esse retornado. No “programa principal” esse valor é atribuído à variável z. 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

20 Passagem de Parâmetros por Referência
Outras linguagens (Pascal, C, C++, ...) permitem a passagem de parâmetros por referência, i.e. é passada a referência à variável do programa principal, que pode ser alterada pela função. Por exemplo se o parâmetro x fosse passado por referência (indicado com uma notação fictícia) ..., x = 5; z = f(x); x, z, ... function y = f(ref x) x = 2*x; y = x; endfunction; os valores de x e y reportados no terminal seriam x = 10 (sendo passada por referência, a variável x referida na função é a mesma variável que a variável x do programa); e z = 10 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

21 Funções com Múltiplos Resultados
A passagem de parâmetros por referência permite que uma função (ou procedimento) passe vários valores para o programa que a invocou. Basta passar por referência as variáveis onde esses valores devem ser “colocados”. O Octave, não suporta passagem de parâmetros por referência. A computação de vários resultados numa função é conseguida pela computação de um vector de resultados. Por exemplo, se se pretender que a função f, com argumento x, retorne dois valores, f1 e f2, especifica-se a função como function [f1,f2] = f(x) ... f1 = ...; f2 = ...; endfunction; 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

22 Programas e Funções Octave
Em Octave, os programas e as funções são muito semelhantes aos apresentados em pseudo-código. No entanto eles devem ser escritos em dois ficheiros m (“m files”) distintos, que devem residir na mesma directoria (a menos que se utilizem instruções de alteração da directoria corrente). O nome do ficheiro onde uma função é definida deve ter o nome dessa função. a função f deverá ser definida num ficheiro com o nome “f.m”. a função maximos deverá ser definida no ficheiro “maximos.m”. De notar que uma função pode ser invocada a partir de qualquer ficheiro e mesmo do terminal. 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

23 Programa: trajectoria
O programa principal, guardado no ficheiro “trajectoria.m”, chama a função maximos para calcular a distância e a altura máxima da trajectória. % Inicialização de Variáveis y0 = input(" Qual a altura inicial (m)? "); v0 = input(" Qual a velocidade inicial (m/s)? "); tet = input(" Qual o angulo inicial (rad)? "); dx = input(" Qual a precisao (m)? "); % Cálculo dos máximos [dmax, hmax]=maximos(y0,v0,tet,dx); % Apresentação de Resultados disp("Distância maxima da trajectoria (m):"); disp(dmax); disp("Altura maxima da trajectoria (m):"); disp(hmax); 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil

24 Vectores, Gráficos e Funções - Trajectória de um Projéctil
Funções: maximos e f A função maximos é guardada no ficheiro “maximos.m”, e usa a função f para calcular o valor de y a partir do valor de x. function [dmax, hmax]=maximos(y0,v0,tet,dx); X = [0]; Y = [y0]; i = 1; while Y(i) > 0 i = i+1; X(i) = X(i-1) + dx; Y(i) = f(X(i),y0,v0,tet); endwhile hmax = max(Y); dmax = X(i); plot(X,Y); endfunction A função f , guardada no ficheiro “f.m”, faz as contas. function y=f(x,y0,v0,tet); g = 9.8; y = x*tan(tet)-(g*x^2)/(2*v0^2*cos(tet)^2)+y0; endfunction 13 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil


Carregar ppt "Vectores, Gráficos e Funções Trajectória de um Projéctil"

Apresentações semelhantes


Anúncios Google