Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLavínia Magro Alterado mais de 11 anos atrás
1
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 2º Semestre 2005/2006
2
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 2 Especificação do Problema Dada uma altura inicial (y 0 ) uma velocidade inicial (v 0 ) 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 (d max ) e a altura máxima (h max ) 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: y 0 Velocidade Inicial: v 0 Ângulo Inicial : Precisão : dx Resultados Distância Máxima : d max Altura Máxima : h max Gráfico Trajectória
3
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 3 Gráficos 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.
4
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 4 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 = [ 1 2 3 ; 4 5 6]
5
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 5 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.
6
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 6 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. 111 111 0 0 0 10 01 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)
7
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 7 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 123 456 2 5 123 2ª 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 )
8
16 Março 2006 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
9
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 9 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)
10
16 Março 2006 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.
11
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 11 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 y 0 ; enquanto y > 0 fazer x x + dx; y x*tan( )-(g*x^2)/ (2*v 0 ^2*cos( )^2)+y 0 ; h max max(h max,y); fim enquanto h max max(Y); enquanto Y(i) > 0 fazer i i+1; X(i) X(i-1) + dx; Y(i) X(i)*tan( )-(g*X(i)^2)/ (2*v 0 ^2*cos( )^2)+y 0 ; fim enquanto X [0]; Y [y 0 ]; i 1;
12
16 Março 2006 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)). d max x; Sai d max ; Sai h max ; Gráfico(X,Y); Sai d max ; Sai h max ; d max X(i);
13
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 13 Algoritmo Completo % Inicialização de Variáveis g 9.8; % aceleração da gravidade Entra y 0 ;% altura inicial Entra v 0 ;% velocidade inicial Entra ;% ângulo inicial Entra dx;% precisão d max 0;% distância máxima da trajectória h max 0;% altura máxima da trajectória % Ciclo de Simulação X [0]; Y [y 0 ]; 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*v 0 ^2*cos( )^2)+y 0 ; fim enquanto % Apresentação de Resultados h max max(Y); d max X(i); Sai d max ; Sai h max ; Gráfico(X,Y);
14
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 14 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);
15
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 15 Funções 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.
16
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 16 Funções 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, y 0, v 0, Resultados y maximos Entrada y 0, v 0,, dx Resultados d max, h max
17
16 Março 2006 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!
18
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 18 Passagem de Parâmetros por Valor Exemplo: Consideremos a função f (que calcula o dobro) function v = f(u) v = 2*u 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, y = 7; z = f(x); x, y, z,... os valores de x e y reportados no terminal são x = 5, y = 7 e z = 10.
19
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 19 Passagem de Parâmetros por Valor Exemplo:..., x = 5; y = 7; z = f(x); x, z,... function v = f(u) v = 2*u; endfunction; A computação da função dofro pode ser assim explicada: 1.Quando começa a ser executada a função f, são criadas duas novas variáveis, u e v, que são locais à função f. 2.O valor inicial da variável (local) u é o valor do parâmetro de chamada. Neste caso, é o valor da variável (do programa) x. 3.A instrução v=2*u apenas envolve as variáveis locais u e v. 4.Após a execução da função, a variável v, contém o valor a ser retornado ao programa principal. 5.No programa principa esse valor é atribuído à variável (de programa) z.
20
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 20 Passagem de Parâmetros por Valor Exemplo:..., x = 5; y = 7; z = f(x); x, y, z,... function y = f(x) y = 2*x; endfunction; 1.De notar que as variáveis que aparecem na definição da função são locais a essa função. 2.Num programa grande, com várias funções, é inevitável que variáveis em funções diferentes tenham o mesmo nome (embora os nomes das variáveis devam ser escolhidos para evitar essas coincidências). 3.Assim, elas podem ter o mesmo nome das variáveis de programa, que não serão confundidas com elas. x = 5, y = 7 e z = 10.
21
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 21 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
22
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 22 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;
23
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 23 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. Em geral, uma função de nome f, deve ser definida num ficheiro f.m. –Por exemplo, a função altura, deve estar definida no ficheiro altura.m. De notar que uma função pode ser invocada a partir de qualquer ficheiro e mesmo do terminal.
24
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 24 Programa: trajectoria1 O programa principal, guardado no ficheiro trajectoria1.m, chama a função altura para calcular a altura de um ponto da trajectória da trajectória. trajectoria1.m... % 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) = altura(X(i),g,y0,v0,tet); endwhile... altura.m function y = altura(x,g,y0,v0,tet); y = x*tan(tet)-(g*x^2)/(2*v0^2*cos(tet)^2)+y0; endfunction
25
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 25 Funções: maximos e f Funções podem chamar funções! Por exemplo, a função maximos, guardada no ficheiro maximos.m, usa a função altura para calcular o valor de y a partir do valor de x, g, y0, v0 e tet. maximos.m 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) = altura(x,g,y0,v0,tet); endwhile hmax = max(Y); dmax = X(i); plot(X,Y); endfunction
26
16 Março 2006 Vectores, Gráficos e Funções - Trajectória de um Projéctil 26 Programa: trajectoria2 Desta forma, o programa principal, guardado no ficheiro trajectoria2.m, chama a função maximos para calcular a distância e a altura máxima da trajectória e torna-se muito mais legível (curto). trajectoria2.m % 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);
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.