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.

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

Métodos, Parâmetros, Argumentos e Contratos
Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 4.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 2.
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.
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 Introdução 1.1 Octave Funções, Condições e Ciclos.
Integração Numérica – Áreas e Equações
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 4.
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.
2 Dezembro de 2005Simulação com Modelos Diferenciais1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
17 Novembro 2006Algoritmos de Ordenação e Pesquisa Aplicação a Listas de Registos 1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º
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
30 Novembro 2005Folha da Cálculo1 Jorge Cruz DI/FCT/UNL Introdução aos Computadores e à Programação 1º Semestre 2005/2006.
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.
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.
Pesquisa e Ordenação de Vectores
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)
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.
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.
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
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 Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Arquivos Extensíveis.
Geometria Computacional Interseção de Segmentos
Organização da Memória Principal
Arquitetura de Computadores
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Aula prática 6 Vetores e Matrizes
Comunicação Inclusiva Acessibilidade e Programação Web
Aula 02 Variáveis, Matrizes, Gráficos
Arquitetura de computadores
Aula prática 6 Vetores e Matrizes
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
20/21 Abril de 2004Funções, Expressões e Excepções1 Pedro Barahona DI/FCT/UNL Abril 2004.
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
23/24 Março de 2004Simulação da Queda de Corpos1 Pedro Barahona DI/FCT/UNL Março 2004.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
1 Simulação da Queda de Corpos DI/FCT/UNL 1º Semestre 2004/2005.
17 Março de 2005Simulação da Queda de Corpos1 Pedro Barahona DI/FCT/UNL Março 2004.
7 de Abril de 2005Funções, Expressões e Excepções1 Pedro Barahona DI/FCT/UNL Abril 2004.
30/31 Março de 2004Movimento de uma Mola1 Pedro Barahona DI/FCT/UNL Março 2004.
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.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Transcrição da apresentação:

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

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

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.

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 = [ ; 4 5 6]

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.

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 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)

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) % = ª 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 )

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

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)

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.

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;

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);

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);

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);

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 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

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!

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.

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.

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.

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

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;

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.

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

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

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);