1 / 19

Matrizes e Gráficos Trajectória de Projéctil

Matrizes e Gráficos Trajectória de Projéctil. Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2006/2007. y. v 0. f ( a ). h max. . y 0. d max. (0,0). x. a. Gráficos e Matrizes.

kelly-rojas
Download Presentation

Matrizes e Gráficos Trajectória de Projéctil

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Matrizes e Gráficos Trajectória de Projéctil Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2006/2007 Matrizes e Gráficos - Trajectória de um Projéctil

  2. y v0 f(a) hmax  y0 dmax (0,0) x a Gráficos e Matrizes • Em muitas situações, a informação de saída é mais útil se for apresentada através de gráficos (ou outra forma de apresentação audio-visual). • O Octave tem uma capacidade (limitada) de apresentação de gráficos, implementada através de uma estrutura de dados básica: a matriz. • Esta funcionalidade será apresentada para obtenção do gráfico da trajectória de um projéctil, estudada anteriormente, e correspondente à função Matrizes e Gráficos - Trajectória de um Projéctil

  3. Matriz M Vector V Vector U Matrizes • Uma matriz (“array”) é uma estrutura de dados que agrega um conjunto de valores do mesmo tipo, na forma de uma “tabela” multidimensional. • No Octave, as matrizes têm apenas 1 dimensão (vaectores) ou duas dimensões. Noutras linguagens os arrays podem ter mais de 2 dimensões. • Por exemplo, podemos representar no vector V os primeiros 5 números inteiros, num vector U os primeiros 4 números primos, e na matriz M a tabela da multiplicação dos primeiros números naturais. • Nas tabelas os dados estãi dispostos em linhas e colunas. O vector V tem 1 linha e 5 colunas, o vector U tem 4 linhas e 1 coluna, e a matriz M 3 linhas e 4 colunas. Matrizes e Gráficos - Trajectória de um Projéctil

  4. Matriz M Vector V Vector U Inicialização de Matrizes • A forma mais simples de inicializar uma matriz (pequena) é indicar explicitamente os seus valores, numa operação de atribuição. • Em Octave, todas as variáveis são matrizes, mesmo os valores isolados, internamente guardados como matrizes de uma linha e uma coluna. • Na atribuição directa, as dimensões da matriz são indicadas implícitamente. Os sucessivos valores são colocados entre parênteses rectos, separados por espaços ou vírgulas dentro de uma linha, sendo as linhas separadas por ponto e vírgula). • Exemplos: V = [1, 4 9, 16 25] ; U = [ 2; 3; 5; 7] M = [1 2 3 4 ; 2, 4, 6, 8 ; 3 6 9 12] Matrizes e Gráficos - Trajectória de um Projéctil

  5. Matriz M1 Vector V1 Vector U1 Inicialização de Matrizes • Quando as matrizes são “maiores” elas podem ser inicializadas a “0” ou a “1s”por instruções predefinidas zeros e ones, indicando-se explicitamente as dimensões das matrizes. • Exemplos: V1 = ones(1,5) ; U1 = zeros(4,1) M1 = ones(3,4) • Estes valores podem depois ser modificados. Para aceder a elementos da matriz deve indicar-se o identificador da matriz, seguido, entre parênteses curvos da “região” (range) da matriz que se pretende aceder. Nota: Em Octave, o primeiro elemento da linha ou coluna tem sempre o índice 1. Matrizes e Gráficos - Trajectória de um Projéctil

  6. Matriz M Vector V Vector U Inicialização de Matrizes • Para identificar elementos individuais, a região da matriz é indicada pelo número de linha e coluna, podendo-se omitir as colunas e linhas em vectores linha e coluna, respectivamente. • Exemplos: V(3) = 9 ; U(4) = 7 ; M(2,3) = 6 • Para modificação de todos os valores são habitualmente utilizados ciclos, como os indicados para o vector V (em pseudo-código e em sintaxe Octave) i = 1; enquanto i <= 5 V(i) = i^2; i = i+1 fimenquanto i = 1; while i <= 5 V(i) = i^2; i = i+1; endwhile Matrizes e Gráficos - Trajectória de um Projéctil

  7. i = 1; enquanto i <= 5 V(i) = i^2; i = i+1 fimenquanto para i de 1 a 5 V(i) = i^2; fimpara i = 1; while i <= 5 V(i) = i^2; i = i+1 endwhile for i = 1:5 V(i) = i^2; fimpara Ciclos Para • Sendo conhecido o número de iterações de um ciclo, este ciclo pode ser especificado através de uma instrução de repetição para (for). • Assim os ciclos abaixo, escritos em pseudo-código, são equivalentes • Em Octave o ciclo é especificado pela instrução for. Os limites inicial e final são especificados como um range, com a sintaxe do Octave. Matrizes e Gráficos - Trajectória de um Projéctil

  8. X = zeros(1,7) para i de 1 a 5 (passo 2) V1(i) = i^2; fimpara X = zeros(6,1) for i = 1:3:6 X(i) = i^2; fimpara Ranges • Para além dos valores inicial e final, um range pode ainda ter opcionalmente um passo (distância entre valores consecutivos), com a sintaxe ilustrada em baixo. Nota 1: O passo é opcional, e por omissão vale 1. Assim, 1:5 é equivalente a 1:1:5. Matrizes e Gráficos - Trajectória de um Projéctil

  9. Varrimento por linhas i é linha e j é a coluna M = zeros(3,4) for i = 1:3 for j = 1:4 M(i,j) = i*j; endfor endfor Varrimento por linhas j é linha e i é a coluna M = zeros(3,4) for 1 = 1:4 for j = 1:3 M(j,i) = i*j; endfor endfor Ciclos Encadeados • Em geral, é necessário utilizar tantos ciclos quanto as dimensões da matriz. • Para aceder a todos os elementos de uma matriz (bidimensional), os ciclos terão de ser encadeados, podendo.se fazer o “varrimento” por linhas ou colunas. Matrizes e Gráficos - Trajectória de um Projéctil

  10. Gráficos e Vectores • Em Octave a forma mais simples de desenhar o gráfico de uma função f(x) é utilizar o comando pre-definido plot(X,F) • em que X é um vector que as abcissas consideradas; • e F é o vector com as ordenadas dos pontos correspondentes. Matrizes e Gráficos - Trajectória de um Projéctil

  11. Gráficos e Vectores • Normalmente, para se obter um gráfico de uma função, basta determinar o valor da função em n pontos, sendo o n dependente do contexto. • Por exemplo, se pretendermos o gráfico da função f, calculado em n pontos, no intervalo de [a .. b] podemos usar a função grafico abaixo em que f é a função definida ao lado function y = grafico_f(a,b,n) dx = (b-a)/(n-1); % distância-x entre pontos X(1) = a; % especificação da 1ª abcissa(x) Y(1) = f(X(1)); % cálculo da 1ª ordenada (y) for i = 2:n % cálculo dos outros pontos X(i) = X(i-1) + dx; % i-ésima abcissa Y(i) = f(X(i)); % i-ésima ordenada endfor plot(X,Y); % desenha o gráfico de f endfunction; function y = f(x) y = x^3+x^2-x; endfunction; Matrizes e Gráficos - Trajectória de um Projéctil

  12. Gráficos de Várias Funções • O Octave permite igualmente o desenho simultâneo de várias funções, no mesmo intervalo X, através do mesmo comando plot(X,M) • No entanto, o 2º argumento deve ser uma matriz com o mesmo número de colunas do vector X, e com tantas linhas quantas as funções a mostrar. • Por exemplo, o gráfico das funções f e g entre os pontos a e b, desenhado com n pontos, pode ser obtido com a função grafico_fg, semelhante à anterior. • No entanto, em vez de se determinarem apenas os valores de uma ordenada, e colocá-las num vector Y (com 1 linha), há que determinar os valores de 2 ordenadas, e colocá-las numa matriz M com 2 linhas. Matrizes e Gráficos - Trajectória de um Projéctil

  13. Gráficos de Várias Funções function y = grafico_fg(a,b,n) dx = (b-a)/(n-1); % distância-x entre pontos X(1) = a; % especificação da 1ª abcissa(x) M(1,1) = f(X(1));% cálculo da 1ª ordenada f(x) M(2,1) = g(X(1));% cálculo da 1ª ordenada g(x) for i = 2:n % cálculo dos outros pontos X(i) = X(i-1) + dx; % i-ésima abcissa M(1,i) = f(X(i));% i-ésima ordenada f(x) M(2,i) = g(X(i));% i-ésima ordenada g(x) endfor plot(X,M); % desenha o gráfico de f e g endfunction; • Desta forma, a função para desenhar as funções f e g, simultâneamente, pode ser especificada como em que f é a função anterior e g a função definida ao lado function y = g(x) y = x^3+x^2+x; endfunction; Matrizes e Gráficos - Trajectória de um Projéctil

  14. Passagem de Funções como Parâmetros • Nas versões anteriores da função gráfico, não se pode passar como parâmetro a função a desenhar. • Em linguagens de alto nível, é geralmente possível fazê-lo, passando as funções por referência. • Em Octave, onde não há passagem por referência, pode utilizar-se um “truque”, passando-se o nome da função como argumento e utilizando-se a função pré-definida feval, que recebe como 1º argumento o nome da função e nos seguintes parâmetros os parâmetros da função. • Uma vez definida a função grafico (no diapositivo seguinte), são “equivalentes” as chamadas grafico_f(x,a,b) e grafico(‘f’,x,a,b) bem como as chamadas grafico_g(x,a,b) e grafico(‘g’,x,a,b) Matrizes e Gráficos - Trajectória de um Projéctil

  15. Passagem de Funções como Parâmetros • A função feval, recebe como 1º argumento o nome da função e nos seguintes parâmetros os parâmetros da função. • Assim, saõ equivalente as chamadas f(x) e feval(‘f’,x) • Utilizada na especificação da função grafico, indicada abaixo function y = grafico(func,a,b,n) dx = (b-a)/(n-1); % distância-x entre pontos X(1) = a; % especificação da 1ª abcissa(x) Y(1) = feval(func,X(1));% cálculo da 1ª ordenada (y) for i = 2:n % cálculo dos outros pontos X(i) = X(i-1) + dx; % i-ésima abcissa Y(i) = feval(func,X(i));% i-ésima ordenada endfor plot(X,Y); % desenha o gráfico de f endfunction; Matrizes e Gráficos - Trajectória de um Projéctil

  16. Aproximações de Funções • A possibilidade de mostrar várias funções num gráfico, permite visualizar a aproximação de funções calculadas através de séries. • Consideremos por exemplo a função ex, obtida através da série expo(x) = 1 + x + x2/2! + x3/3!+ • Como já foi visto, a função ex pode ser aproximada pela função = expo(x,n) que considera os primeiros n termos da série. Essa função pode ser definida como • Há agora que adaptá-la, para mostrar o gráfico da convergência function z = expo(x,n) y = 1; for i = 1:n y = y + x^i/fact(i); endfor z = y; endfunction Matrizes e Gráficos - Trajectória de um Projéctil

  17. Aproximações de Funções • Para esse efeito, é necessário • Guardar os sucessivos valores de y no vector Y; • Guardar os sucessivos valores das iterações no vector P; • Condicionar o desenho do gráfico ao parâmetro p de entrada. function z = expo(x,n) y = 1; for i = 1:n y = y + x^i/fact(i); endfor z = y; endfunction function z = expo(x,n,p) P(1) = 1; Y(1) = 1; for i = 1:n P(i+1) = P(i)+1; Y(i+1) = Y(i) + x^i/fact(i); endfor z = Y(n+1); if p plot(P,Y) endif endfunction Matrizes e Gráficos - Trajectória de um Projéctil

  18. Aproximações de Funções • Por vezes uma função é aproximada por um intervalo [ai, bi], que se vai estreitando em sucessivas iterações até ser ak≈ bk. • Este é o caso do algoritmo da raiz quadrada, raiz2(x), em que em qualquer iteração ai*bi = x. Se ak≈ bk, então x = ak2, e portantoak≈ raiz2(x). • Como intervalo inicial, pode considerar-se • [ai, bi] = [1,x] para x >= 1; ou • [ai, bi] = [x,1] para x < 1 • Para obter o intervalo seguinte ao intervalo [ai, bi], bissecta-se este intervalo, obtendo-se mi = (ai+bi)/2, e determina-se se este é maior ou menor que a raiz de x. • Caso seja maior, isto é mi2 > x, escolhe-se para o intervalo seguinte [ai+1, bi+1], tal que bi+1 = mi e ai+1 = x/bi+1. CAso contrário faz-se ai+1 = mi e bi+1 = x/ai+1. Em ambos os casos, [ai+1, bi+1]  [ai, bi], e portanto o intervalo vai-se estreitando em sucessivas iterações. • O algoritmo termina ou quando se atingirem um numero limite de iterações, ou quando o intervalo for suficientemente “apertado”. Matrizes e Gráficos - Trajectória de um Projéctil

  19. Aproximações de Funções • Eis a função raiz2(x,n), definida em Octave para determinar a raiz quadrada de x, em n iterações, mostrando graficamente a evolução dos intervalos [ai, bi], function y = raiz2(x,n); X(1) = 1; M(1,1)= min(1,x); M(1,2)= max(1,x); % intervalo inicial for i = 1:n-1 mid = (M(i,1)+M(i,2))/2; % bissecta o intervalo if mid^2 > x M(i+1,2) = mid; M(i+1,1) = x/mid; else % novo intervalo M(i+1,1) = mid; M(i+1,2) = x/mid; endif X(i+1) = i + 1; endfor y = (M(n,1)+M(n,2))/2; % retorna o valor da raiz quadrada plot(X,M); % grafico da evolução de [ai, bi] endfunction Matrizes e Gráficos - Trajectória de um Projéctil

More Related