14 outubro 2005vectores, gráficos e funções - trajectória de um projéctil1 vectores, gráficos...

24
14 Outubro 2 005 Vectores, Gráficos e Funções - Trajectória de um Projéctil 1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006

Upload: internet

Post on 17-Apr-2015

111 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil 1

Vectores, Gráficos e FunçõesTrajectória de Projéctil

Jorge CruzDI/FCT/UNL

Programação para as Ciências Experimentais1º Semestre 2005/2006

Page 2: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

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

Page 3: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil 3

GráficosEm 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.

0.00

0.20

0.40

0.60

0.80

1.00

0.00 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00

X

F

i 1 2 3 4 5 6 7 8 9 10 11X 0.00 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00F 0.00 0.00 0.01 0.03 0.06 0.13 0.22 0.34 0.51 0.73 1.00

Page 4: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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:

1 2 3A = [ 1, 2, 3]

1 2 3

4 5 6B = [ 1 2 3 ; 4 5 6]

Page 5: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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.

Page 6: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil 6

Vectores e MatrizesDesta forma, é conveniente inicializar os vectores utilizados num programa, sempre que se conheçam as suas dimensões e tamanho de cada dimensão.

1 1 1

1 1 1

0

0

0

1 0

0 1

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)

Page 7: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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

1 2 3

4 5 6

2

51 2 3

2ª linha,1ª coluna

1ª linha,todas as colunas

Todas as linhasda 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 )

Page 8: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil 8

Vectores e Matrizes : CiclosPara 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

Page 9: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil 9

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

Page 10: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

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

Page 11: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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 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

hmax 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*v0^2*cos()^2)+y0;fim enquanto

X [0]; Y [y0]; i 1;

Page 12: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 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;Sai dmax; Sai hmax;

Gráfico(X,Y);

Sai dmax; Sai hmax;

dmax X(i);

Page 13: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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 gravidadeEntra y0; % altura inicialEntra v0; % velocidade inicialEntra ; % ângulo inicial Entra dx; % precisãodmax 0; % distância máxima da trajectóriahmax 0; % altura máxima da trajectória

% Ciclo de SimulaçãoX [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);

Page 14: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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 gravidadey0 = 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óriahmax = 0; % altura máxima da trajectória

% Ciclo de SimulaçãoX = [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);

Page 15: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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.

Page 16: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 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.

fEntrada

x, y0, v0,

Resultados

y

maximosEntrada

y0, v0, , dx

Resultados

dmax, hmax

Page 17: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

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

Page 18: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 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 = xendfunction;

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

Page 19: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

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

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

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

3. A instrução x=2*x apenas envolve a variável local x, que passa a valer 10.

4. Na instrução y=x, é a nova variável local que é considerada, e portanto, y = 10, valor esse retornado.

5. No “programa principal” esse valor é atribuído à variável z.

Page 20: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 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

Page 21: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

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

Page 22: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

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

Page 23: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 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 Resultadosdisp("Distância maxima da trajectoria (m):"); disp(dmax);disp("Altura maxima da trajectoria (m):"); disp(hmax);

Page 24: 14 Outubro 2005Vectores, Gráficos e Funções - Trajectória de um Projéctil1 Vectores, Gráficos e Funções Trajectória de Projéctil Jorge Cruz DI/FCT/UNL

14 Outubro 2005 Vectores, Gráficos e Funções - Trajectória de um Projéctil 24

Funções: maximos e fA 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